GNU/Linux >> Belajar Linux >  >> Linux

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

Solusi 1:

Mencoba memperluas jawaban @Zoredache, karena saya mencobanya 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 menambahkan ke grup yang sudah ada

    usermod -a -G www-pub userb

    groups usera ## tampilkan grup untuk pengguna

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

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

  • Ubah izin semua folder ke 2775

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

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

    Ada -R opsi rekursif, tetapi itu tidak akan membedakan antara file dan folder, jadi Anda harus menggunakan find, seperti:

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

  • Ubah semua file ke 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 baris 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 keluar/masuk agar perubahan pada grup Anda dapat diterapkan!

Solusi 2:

Saya tidak sepenuhnya yakin bagaimana Anda ingin mengonfigurasi izin, tetapi ini dapat 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 tersebut.
  • Ubah kepemilikan segala sesuatu di bawah /var/www menjadi root:www-pub.
  • Ubah izin semua folder ke 2775
  • Ubah semua file ke 0664.
  • Ubah umask untuk pengguna Anda menjadi 0002

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

Adapun seberapa keras saya pergi pada izin. Itu sepenuhnya tergantung pada situs / server. Jika hanya ada 1-2 editor dan saya hanya perlu menjaga mereka agar tidak merusak hal-hal yang terlalu parah maka saya akan santai saja. Jika bisnis membutuhkan sesuatu yang lebih kompleks maka saya akan menyiapkan sesuatu yang lebih kompleks.

Solusi 3:

Saya pikir Anda mungkin menemukan POSIX ACL (daftar kontrol akses) sangat membantu. Mereka mengizinkan model izin yang lebih halus dibandingkan dengan model pengguna:grup:lainnya. Menurut saya, mereka lebih mudah diingat karena saya bisa lebih eksplisit dan juga dapat menyetel perilaku "default" untuk cabang sistem file.

Misalnya, Anda dapat menentukan izin setiap 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 menjadikan pengguna Apache sebagai hanya-baca

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

Halaman manual:

  • setfacl
  • getfacl

Tutorial

Solusi 4:

Pertanyaan ini ditanyakan lagi, dan seperti yang dibahas di meta, praktik terbaik saat ini memberikan pendekatan yang lebih baik daripada yang tersedia di tahun 2009, saat pertanyaan ini ditanyakan. Jawaban ini mencoba memberikan beberapa solusi terkini untuk 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 menayangkan semua situs menggunakan www-data . Ini penting, karena saat ini Apache jarang hanya melayani statis file konten, tetapi menjalankan dinamis situs web. Jawaban ini berkonsentrasi pada PHP karena ini adalah bahasa situs server yang paling umum, tetapi prinsip yang sama juga berlaku untuk yang lain.

    Jika Anda memiliki masalah keamanan di satu situs, itu dapat menyebar ke setiap situs yang dijalankan sebagai pengguna yang sama. Penyerang dapat melihat semua yang dilihat pengguna, termasuk informasi masuk basis data, dan mengubah setiap situs yang izin tulisnya dimiliki pengguna.

  • Gunakan SSH File Transfer Protocol (SFTP). Meskipun menggunakan FTP harus ditinggalkan demi keamanan (karena mengirimkan kata sandi dan konten dalam teks biasa), SFTP pengganti amannya 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, tentang apa pertanyaan ini. Daripada memberi mereka kata sandi untuk pengguna situs ini – atau akses ke file situs menggunakan akun pengguna pribadi mereka seperti yang disarankan di awal – Anda dapat menggunakan 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 sedang dikerjakan pengembang. Ini memiliki banyak keuntungan untuk mengelola kata sandi dan info masuk:

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

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

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

  • Gunakan PHP-FPM . Ini pendekatan saat ini untuk menjalankan PHP sebagai pengguna. Buat kumpulan baru 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 digunakan oleh satu situs.

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


Linux
  1. Batasi Akses Ftp Hanya Ke /var/www Dengan Vsftpd?

  2. Perbedaan Antara /var/log/messages, /var/log/syslog, Dan /var/log/kern.log?

  3. UNIX / Linux :Apa izin yang benar dari direktori /tmp dan /var/tmp?

  1. Apa cara terbaik untuk mengirim sinyal ke semua anggota grup proses?

  2. Gunakan repositori git di /var/www/html/

  3. Django static_root di /var/www/... - tidak ada izin untuk mengumpulkan statis

  1. izin tulis ditolak melalui filezilla sftp ke /var/www/html

  2. /etc/passwd menampilkan pengguna dalam grup, tetapi /etc/group tidak

  3. Apa cara terbaik untuk mempelajari SELinux?