Memberikan izin menulis ke grup data-www

27

Saya membuat situs web dan bagian dari fungsinya adalah untuk menulis data yang dihasilkan pengguna dengan php. Saya menggunakan nginx di Ubuntu 13.04. Suatu saat saya hanya menguji dan semuanya dilayani melalui nginx di locahost.

Script php saya gagal menulis file teks (walaupun saya bisa melakukan ini secara manual) dan saya pikir ini masalah izin untuk menulis ke direktori /var/www/example.com/public_html saya.

Saat ini saya (iain) memiliki direktori ini tetapi tampaknya akan lebih masuk akal untuk mentransfer kepemilikan direktori / var / www dan semua yang ada di dalamnya kepada pengguna data-www (atau yang seharusnya dikelompokkan?) Dan menambahkan diri saya ke grup data-www. Apakah mengikuti cara yang benar untuk melakukan ini?

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

Jadi apakah ini berarti siapa pun di grup www-data sekarang dapat membaca, menulis, dan exec di / var / www?

duff
sumber

Jawaban:

52

Pertama, useraddbuat pengguna baru. Karena Anda (iain) sudah ada, Anda ingin menelepon usermodsaja. Jadi itu akan menjadi:

sudo usermod -aG www-data iain
addgroup www-data

(perhatikan -apada server berbasis Debian (termasuk Ubuntu) yang akan menambahkan Anda ke grup itu, dan menjaga keanggotaan Anda ke grup lain. Lupakan saja dan Anda hanya akan menjadi anggota grup data-www - bisa menjadi pengalaman buruk jika salah satu dari itu adalah roda. Pada server SUSE-type, pilihannya -Abukan -aGjadi baca man usermoddengan cermat untuk memperbaikinya.)

Kedua, Anda tidak ingin apache memiliki akses penuh ke /var/www: ini berpotensi merupakan pelanggaran keamanan utama. Sebagai aturan umum, hanya izinkan apa yang Anda butuhkan, dan tidak lebih dari itu ( prinsip hak istimewa yang paling rendah ). Dalam hal ini, Anda memerlukan apache ( www-data) dan Anda ( www-datagrup) untuk menulis (dan membaca) /var/www/example.com/public_html, jadi

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 770 /var/www/example.com/public_html

Sunting : untuk menjawab pertanyaan awal Anda, ya, setiap anggota www-datasekarang dapat membaca dan mengeksekusi /var/www(karena bit terakhir dari izin Anda adalah 5 = baca + exec). Tetapi karena Anda belum pernah menggunakan -Rsakelar, itu hanya berlaku untuk /var/www, dan bukan pada file dan sub-direktori yang dikandungnya. Sekarang, apakah mereka dapat menulis adalah masalah lain, dan tergantung pada kelompok /var/www, yang belum Anda tentukan. Saya kira itu biasanya root:root, jadi tidak, mereka (mungkin) tidak bisa menulis.

Edit pada 2014-06-22 : menambahkan catatan bahwa -aGopsi ini valid di server berbasis Debian. Tampaknya bervariasi dengan distribusinya, jadi bacalah mandengan cermat sebelum menjalankan.

Calimo
sumber
Ok aku paham. Kelompok / var / www memang root: root. Terima kasih untuk tautannya. Tampaknya lebih masuk akal untuk terbiasa memberikan apa yang dibutuhkan daripada pergi untuk kenyamanan. Terima kasih untuk panduannya.
duff
2
Ok, jadi saya baru saja mencoba menulis ke /var/www/example.com/public_html dengan cp -r php /var/www/example.com/public_htmldan saya mendapat izin ditolak. Saya berada di grup data-www yang memiliki rwxrwx --- izin untuk dir ini. Kenapa ini?
duff
Mungkin ada banyak hal di sini. Misalnya Anda tidak dapat memiliki izin untuk membaca beberapa hal dalam php, atau Anda tidak logout dan setelah usermod (saya memperbarui jawaban saya pada titik itu dengan addgroup untuk menghindari hal ini, dan menentukan di mana harus menggunakan sudo).
Calimo
Dari semua jawaban yang terkait www-data:www-data, yang ini memecahkan masalah dengan izin yang hilang. Terima kasih.
Eugene