Solusi 1:
Setelah penelitian lebih lanjut, sepertinya cara lain (mungkin cara yang lebih baik) untuk menjawab ini adalah dengan menyiapkan folder www seperti itu.
sudo usermod -a -G developer user1
(tambahkan setiap pengguna ke grup pengembang)sudo chgrp -R developer /var/www/site.com/
sehingga pengembang dapat bekerja di sanasudo chmod -R 2774 /var/www/site.com/
sehingga hanya pengembang yang dapat membuat/mengedit file (lain/dunia dapat membaca)sudo chgrp -R www-data /var/www/site.com/uploads
sehingga www-data (apache/nginx) dapat membuat unggahan.
Sejak git
berjalan sesuai panggilan pengguna apa pun, selama pengguna berada di grup "pengembang", mereka harus dapat membuat folder, mengedit file PHP, dan mengelola repositori git.
Catatan:Pada langkah (3):'2' pada 2774 berarti 'mengatur ID Grup' untuk direktori. Ini menyebabkan file baru dan sub direktori yang dibuat di dalamnya mewarisi ID grup dari direktori induk (bukan grup utama pengguna) Referensi:http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories
Solusi 2:
Saya tidak yakin apakah itu "benar", tapi inilah yang saya lakukan di server saya:
- /var/www berisi folder untuk setiap situs web.
- Setiap situs web memiliki pemilik yang ditunjuk, yang ditetapkan sebagai pemilik semua file dan folder di direktori situs web.
- Semua pengguna yang memelihara situs web dimasukkan ke dalam grup untuk situs web tersebut.
- Grup ini disetel sebagai pemilik grup dari semua file dan folder di direktori.
- File atau folder apa pun yang perlu ditulis oleh server web (mis. PHP) diubah pemiliknya menjadi www-data, pengguna yang menjalankan apache.
Ingatlah bahwa Anda harus mengaktifkan bit eksekusi pada direktori sehingga Anda dapat membuat daftar konten.
Solusi 3:
Setelah melakukan penelitian lebih lanjut, tampaknya git/svn ALAT BUKAN masalah karena dijalankan sebagai pengguna apa pun yang menggunakannya. (Namun, daemon git/svn adalah masalah yang berbeda!) Semua yang saya buat/kloning dengan git memiliki izin saya dan alat git terdaftar di /usr/bin
yang cocok dengan tesis ini.
Izin Git terpecahkan.
Izin pengguna tampaknya dapat dipecahkan dengan menambahkan semua pengguna yang memerlukan akses ke direktori www ke www-data
grup tempat menjalankan apache (dan nginx).
Jadi sepertinya satu jawaban untuk pertanyaan ini seperti ini:
Secara default /var/www
dimiliki oleh root:root
dan tidak ada dapat menambah atau mengubah file di sana.
1) Ubah pemilik grup
Pertama kita perlu mengubah grup direktori www agar dimiliki oleh "www-data" daripada grup "root"
sudo chgrp -R www-data /var/www
2) Tambahkan pengguna ke www-data
Kemudian kita perlu menambahkan pengguna saat ini (dan siapa saja) ke grup www-data
sudo usermod -a -G www-data demousername
3) Direktori www CHMOD
Ubah izin sehingga HANYA pemilik (root) dan semua pengguna dalam grup "www-data" dapat rwx (membaca/menulis/mengeksekusi) file dan direktori (bahkan tidak ada orang lain yang dapat mengaksesnya ).
sudo chmod -R 2770 /var/www
Sekarang semua file dan direktori yang dibuat oleh setiap pengguna yang memiliki akses (yaitu di grup "www-data") akan dapat dibaca/ditulis oleh apache dan karenanya php.
Apakah ini benar? Bagaimana dengan file yang dibuat oleh PHP/Ruby - dapatkah pengguna www-data mengaksesnya?
Solusi 4:
Kelekatan bukanlah warisan izin. Kelekatan pada direktori berarti hanya pemilik file, atau pemilik direktori, yang dapat mengganti nama atau menghapus file tersebut di direktori, meskipun izin mengatakan sebaliknya. Jadi 1777 di /tmp/.
Di Unix klasik, tidak ada pewarisan izin berdasarkan sistem file, hanya pada umask proses saat ini. Pada *BSD, atau Linux dengan setgid pada direktori, bidang grup dari file yang baru dibuat akan diatur sama dengan direktori induk. Untuk hal lainnya, Anda perlu melihat ACL, dengan ACL 'default' pada direktori, yang memungkinkan Anda mewarisi izin.
Anda harus mulai dengan mendefinisikan:* apa yang pengguna miliki akses ke sistem* apa model ancaman Anda
Misalnya, jika Anda melakukan hosting web dengan banyak pelanggan dan Anda tidak ingin mereka melihat file satu sama lain, maka Anda dapat menggunakan "webcusts" grup umum untuk semua pengguna tersebut dan mode direktori 0705. Kemudian file dilayani oleh proses server web (bukan di "webcusts") akan melihat izin Lainnya dan diizinkan; pelanggan tidak dapat melihat file satu sama lain dan pengguna dapat mengotak-atik file mereka sendiri. Namun, ini berarti saat Anda mengizinkan CGI atau PHP, Anda memilikinya untuk memastikan bahwa proses berjalan sebagai pengguna tertentu (praktik yang baik, untuk banyak pengguna di satu host, untuk akuntabilitas). Jika tidak, pelanggan dapat mengacaukan file satu sama lain dengan meminta CGI melakukannya.
Namun, jika pengguna run-time untuk situs web sama dengan pemilik situs web, maka Anda memiliki masalah karena tidak dapat melindungi konten dari pelaku penyalahgunaan jika ada lubang keamanan pada skrip. Di situlah host khusus menang, sehingga Anda dapat memiliki pengguna run-time yang berbeda dari pemilik konten statis dan tidak perlu terlalu khawatir tentang interaksi dengan pengguna lain.
Solusi 5:
Saya percaya bahwa cara terbaik untuk melakukannya adalah dengan menggunakan Posix ACL. Mereka nyaman digunakan dan menawarkan semua fungsi yang Anda butuhkan.
http://en.wikipedia.org/wiki/Access_control_list#Filesystem_ACLs