Pertanyaan Apa cara terbaik menangani izin untuk pengguna www-data Apache 2 di / var / www?


Apakah ada yang punya solusi bagus untuk menangani file /var/www? Kami menjalankan Nama Berbasis Virtual Host dan pengguna Apache 2 adalah www-data.

Kami punya dua pengguna reguler & root. Jadi ketika mengotak-atik file /var/www, daripada harus ...

chown -R www-data:www-data

... sepanjang waktu, apa cara yang baik untuk menangani ini?

Pertanyaan tambahan: Seberapa tegakah Anda kemudian pergi pada izin?

Yang satu ini selalu menjadi masalah dalam lingkungan pengembangan kolaboratif.


211
2018-05-11 05:13




Juga lihat: Apa izin linux terbaik yang digunakan untuk situs web saya? - Zoredache


Jawaban:


Berupaya memperluas di @ Zoredache menjawab, karena saya memberikan ini pergi sendiri:

  • Buat grup baru (www-pub) dan tambahkan pengguna ke grup itu

    groupadd www-pub

    usermod -a -G www-pub usera  ## harus menggunakan -a untuk ditambahkan ke grup yang ada

    usermod -a -G www-pub userb

    groups usera  ## kelompok tampilan untuk pengguna

  • Ubah kepemilikan segala sesuatu di bawah / var / www ke root: www-pub

    chown -R root:www-pub /var/www  ## -R untuk rekursif

  • Ubah izin dari semua folder ke 2775

    chmod 2775 /var/www  ## 2 = set id grup, 7 = rwx untuk pemilik (root), 7 = rwx untuk grup (www-pub), 5 = rx untuk dunia (termasuk pengguna apache www-data)

    Setel ID grup (SETGID) bit (2) menyebabkan grup (www-pub) disalin ke semua file / folder baru yang dibuat di folder itu. Pilihan lainnya adalah SETUID (4) untuk menyalin id pengguna, dan STICKY (1) yang menurut saya hanya memungkinkan pemilik menghapus file.

    Ada -R pilihan rekursif, tetapi itu tidak akan membedakan antara file dan folder, jadi Anda harus melakukannya gunakan temukan, seperti:

    find /var/www -type d -exec chmod 2775 {} +

  • Ubah semua file menjadi 0664

    find /var/www -type f -exec chmod 0664 {} +

  • Ubah umask untuk pengguna Anda menjadi 0002

    Umask mengontrol izin pembuatan file default, 0002 berarti file akan memiliki 664 dan direktori 775. Pengaturan ini (dengan mengedit umask garis di bagian bawah /etc/profile dalam kasus saya) berarti file yang dibuat oleh satu pengguna akan dapat ditulis oleh pengguna lain di grup-www tanpa perlu chmod mereka.

Uji semua ini dengan membuat file dan direktori dan memverifikasi pemilik, grup, dan izin dengan ls -l.

Catatan: Anda harus logout / masuk agar perubahan grup Anda berlaku!


201
2017-09-15 05:11



@Tom Sangat bagus untuk melihat bahwa Anda merekomendasikan menggunakan findperintah untuk ini. Satu tip kinerja kecil yang akan saya berikan jika Anda memiliki banyak file / direktori dan Anda menggunakan GNU find adalah untuk digunakan + dari pada \; sehingga perintah akan beroperasi pada banyak file karena "Lebih cepat menjalankan perintah pada sebanyak mungkin file sekaligus, daripada sekali per file. Melakukan hal ini menghemat waktu yang diperlukan untuk memulai perintah setiap kali." Juga, lebih mudah untuk mengetik karena tidak perlu backslash. - aculich
Diperbarui dengan saran @ aculich untuk menggunakan + tidak \; - Tom
@SunnyJ. coba ini (tanpa tanda kutip luar): "find / var / www -type f -exec chmod 0664 '{}' \ +" Cobalah itu. Ada spasi antara '{}' dan \ +. - Buttle Butkus
@ Tom- cara untuk memecahnya, terima kasih. Sekedar catatan - Saya pikir "SETUID (4) untuk menyalin id pengguna" seperti yang dimasukkan dalam jawaban Anda salah- SETUID diabaikan saat diterapkan ke direktori di Linux / Unix - Ref - Yarin
Ok, jadi begitu usera dan userb maksudmu www-data dan ftpuser ? Saya menemukan ini sangat membingungkan dengan penyebutan apa pun www-data, yang ada di pertanyaan aslinya. Juga, apa gunanya memberi manfaat kepada pemilik root? Haruskah kita mengaturnya ftpuser? - gskema


Saya tidak sepenuhnya yakin bagaimana Anda ingin mengonfigurasi izin, tetapi ini mungkin memberi Anda titik awal. Mungkin ada cara yang lebih baik. Saya berasumsi Anda ingin kedua pengguna dapat mengubah apa pun di bawah / var / www /

  • Buat grup baru (www-pub) dan tambahkan pengguna ke grup itu.
  • Ubah kepemilikan segala sesuatu di bawah / var / www ke root: www-pub.
  • Ubah izin dari semua folder ke 2775
  • Ubah semua file menjadi 0664.
  • Ubah umask untuk pengguna Anda menjadi 0002

Ini berarti setiap file baru yang dibuat oleh salah satu pengguna Anda harus berupa nama pengguna: www-pub 0664 dan direktori apa pun yang dibuat akan menjadi nama pengguna: www-pub 2775. Apache akan mendapatkan akses baca ke semua melalui komponen 'pengguna lain'. Bit SETGID pada direktori akan memaksa semua file yang dibuat untuk dimiliki oleh grup yang memiliki folder tersebut. Menyesuaikan umask diperlukan untuk memastikan bahwa bit tulis diatur sehingga siapa pun dalam grup akan dapat mengedit file.

Adapun bagaimana hardcore saya pergi perizinan. Itu sepenuhnya tergantung pada situs / server. Jika hanya ada 1-2 editor dan saya hanya perlu menjaga mereka dari melanggar hal-hal terlalu buruk maka saya akan pergi dengan mudah. Jika bisnis membutuhkan sesuatu yang lebih kompleks maka saya akan menyiapkan sesuatu yang lebih kompleks.


59
2018-05-11 05:49



Kemungkinan tambahan - atur cache / upload dirs yang perlu ditulis oleh server web ke www-data: www-data dan 775. - gacrux
Akankah berfungsi juga untuk menambahkan pengguna ke grup apache alih-alih mengandalkan izin 'lainnya'? Jika semua yang Anda lakukan adalah mengunggah file dan file-file tersebut harus dapat dibaca oleh apache grup ke-3 tampaknya berguna jika Anda perlu mengedit file-file tersebut. - Simurr
Adakah kemungkinan Anda dapat memperluas ini sedikit @Zoredache? Saya grok penggunaan dasar bit rwx, chmod, chown, adduser, usermod, tetapi Anda telah kehilangan saya dengan digit pertama ekstra pada izin oktal, umasks dan semua itu. Beberapa contoh perintah yang menggambarkan pendekatan yang diuraikan Anda akan sangat dihargai. - Tom
Dengan cara ini setiap pengguna dapat mengakses setiap file pengguna lainnya! Ini berarti userA dapat membaca config.php dari userB ... dengan menyimpan kredensial mysql-nya, misalnya - drAlberT
Menggunakan ACL Anda dapat menangani keamanan dan kolaborasi-an :) - drAlberT


Saya pikir Anda mungkin menemukan POSIX ACL (daftar kontrol akses) untuk membantu. Mereka memungkinkan model izin yang lebih halus dibandingkan dengan pengguna: grup: model lain. Saya telah menemukan mereka lebih mudah untuk tetap lurus di kepala saya karena saya bisa lebih eksplisit dan juga dapat mengatur perilaku "default" untuk cabang dari sistem file.

Misalnya, Anda dapat menentukan izin masing-masing pengguna secara eksplisit:

setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

Atau Anda dapat melakukannya berdasarkan beberapa grup bersama:

setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

Dan mungkin Anda ingin menjaga pengguna Apache Anda sebagai hanya-baca

setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

Halaman manual:

Tutorial


39
2018-05-11 16:26



Itu jalan ! +1 - drAlberT
ACL untuk menang +1 ... Untuk melihat lebih jauh serverfault.com/a/360120/41823 - Yarin
Saya ingin tahu apakah ada penurunan kinerja untuk ACL vs izin dasar. - Buttle Butkus
Sayangnya, ACL terlalu sering hilang pada instalasi / distribusi standar. Sangat sulit untuk mengkompilasi kernel di setiap server yang saya kelola, atau lebih buruk lagi, kadang-kadang mengubah filesystem. Plus Anda harus sangat berhati-hati ketika membuat cadangan file, terutama jika Anda beralih server. ACL sangat bagus tetapi dukungannya saat ini sangat rendah sehingga saya akan merekomendasikannya untuk siapa saja yang tidak memiliki kontrol penuh pada segala sesuatu di server dan sekitarnya. Tetapi +1 untuk menunjukkan ACL di mana itu benar-benar masuk akal! - Ninj
Jawaban bagus +1; Catatan tentang mengubah proses baca / tulis izin proses apache (www-data misalnya) untuk read-only untuk seluruh situs (melalui setfacl atau chmod - atau keduanya) -> Ini jelas akan memblokir semua tulisan (plugin / modul mengunggah / memperbarui dari sisi browser pada kebanyakan CMS misalnya). Saya percaya banyak yang populer juga hanya menguji akses tulis pada tingkat perm user bukan level grup. Anda masih dapat memperbarui, tetapi pembaruan harus diterapkan secara manual dan izin khusus untuk menulis folder (log / temp / unggahan / dll). Hanya-baca adalah keamanan besar jika situs Anda berfungsi dengan itu .. sebagian besar tidak. - bshea


Pertanyaan ini bertanya lagi, dan sebagai didiskusikan pada meta, praktik terbaik saat ini memberikan pendekatan yang lebih baik daripada yang tersedia pada tahun 2009, ketika hal ini diminta. Jawaban ini mencoba memberikan beberapa solusi saat ini menangani lingkungan pengembangan web kolaboratif dengan aman.


Untuk server web yang aman & pengembangan kolaboratif, ada lebih dari sekadar izin file:

  • Memiliki pengguna terpisah untuk setiap situs yaitu tidak melayani semua situs yang menggunakan www-data. Ini penting, karena saat ini Apache jarang melayani semata statis file konten, tetapi berjalan dinamis situs web. Jawaban ini berkonsentrasi pada PHP karena itu paling umum bahasa situs server, tetapi prinsip yang sama juga berlaku untuk yang lain.

    Jika Anda memiliki masalah keamanan di satu situs, itu dapat menyebar ke setiap situs yang berjalan sebagai pengguna yang sama. Seorang penyerang dapat melihat semua yang dilihat pengguna, termasuk informasi masuk basis data, dan memodifikasi setiap situs yang memiliki izin tulis ke pengguna.

  • Menggunakan SSH File Transfer Protocol (SFTP). Meskipun menggunakan FTP harus ditinggalkan demi keamanan (karena mengirim baik kata sandi dan konten dalam teks biasa), ini adalah pengganti yang aman SFTP juga memiliki fitur yang merupakan solusi sempurna untuk pengembangan web kolaboratif.

    Setelah Anda mengisolasi situs dan satu pengguna per situs, Anda perlu memberikan akses ke pengembang web Anda, pertanyaan ini adalah semua tentang. Daripada memberi mereka kata sandi untuk pengguna situs ini - atau akses ke file situs menggunakan akun pengguna pribadi mereka seperti yang disarankan - Anda dapat menggunakannya Kunci SSH untuk masuk.

    Setiap pengembang dapat menghasilkan keypair dan menjaga rahasia kunci pribadi. Kemudian, kunci publik ditambahkan ke ~/.ssh/authorized_keys file untuk setiap akun pengguna situs web yang digunakan pengembang. Ini memiliki banyak keuntungan untuk mengelola kata sandi dan masuk:

    • Setiap pengembang dapat memiliki akses ke sejumlah situs web tanpa beban untuk mengingat atau menyimpan semua kata sandi yang terlibat dengan pengaturan pengguna-per-situs.

    • Tidak perlu mengubah & membagikan kata sandi setiap kali seseorang meninggalkan perusahaan.

    • Anda dapat menggunakan kata sandi yang sangat kuat atau menonaktifkan login berbasis kata sandi sama sekali.

  • Gunakan PHP-FPM. Ini adalah pendekatan terkini untuk menjalankan PHP sebagai pengguna. Buat yang baru kolam untuk setiap pengguna, yaitu satu kumpulan per setiap situs. Ini adalah yang terbaik untuk keamanan dan kinerja, karena Anda juga dapat menentukan berapa banyak sumber daya yang dapat dikonsumsi satu situs.

    Lihat mis. NeverEndingSecurity's Jalankan php-fpm dengan pengguna / uid dan grup terpisah di linux. Ada tutorial seperti HowtoForge Menggunakan PHP-FPM dengan Apache pada Ubuntu 16.04 yang tidak menggunakan PHP-FPM untuk meningkatkan keamanan melalui pemisahan pengguna, memandu untuk menggunakan soket FPM tunggal di seluruh server.


7
2018-05-10 10:03