izin www-data?

108

Jadi saya memiliki direktori di / var / www (disebut kue) dan saya perlu mengizinkan www-data untuk menulis padanya, tetapi saya juga ingin menulis ke sana (tanpa harus menggunakan sudo). Saya takut untuk mengubah hak akses ke 777 jika ada pengguna lain di komputer saya (atau peretas) mencoba mengubah file di direktori itu. Bagaimana cara saya hanya mengizinkan akses untuk diri saya sendiri dan data www Apache?

q3d
sumber

Jawaban:

168
sudo chown -R yourname:www-data cake

kemudian

sudo chmod -R g+s cake

Perintah pertama mengubah pemilik dan grup.

Perintah kedua menambahkan atribut s yang akan menyimpan file dan direktori baru di dalam kue yang memiliki izin grup yang sama.

James L.
sumber
3
Mengapa chmod g + s rekursif?
Ben Rogmans
tidak tahu tentang g + s. sangat sangat berguna!
FRAGA
1
apa yang dapat dilakukan pengguna dengan file yang dibuat oleh www-data dalam kue itu sendiri, dan file yang dibuat oleh www-data dalam direktori yang dibuat oleh www-data? misalnya, tentang mengedit, mengganti nama, menghapus operasi? Sepengetahuan saya, mengganti nama dan menghapus tidak mungkin dilakukan di dalam direktori yang dibuat oleh www-data, dan pengeditan file yang dibuat oleh www-data tidak mungkin dilakukan oleh pengguna sama sekali.
qdinar
49

Seperti yang dinyatakan dalam artikel oleh Slicehost :

Pengaturan pengguna

Jadi mari kita mulai dengan menambahkan pengguna utama ke grup pengguna Apache:

sudo usermod -a -G www-data demo

Itu menambahkan 'demo' pengguna ke grup 'www-data'. Pastikan Anda menggunakan opsi -a dan -G dengan perintah usermod yang ditunjukkan di atas.

Anda harus keluar dan masuk kembali untuk mengaktifkan perubahan grup.

Periksa grup sekarang:

groups
...
# demo www-data

Jadi sekarang saya adalah anggota dari dua grup: Grup saya sendiri (demo) dan grup Apache (www-data).

Pengaturan folder

Sekarang kita perlu memastikan folder public_html dimiliki oleh pengguna utama (demo) dan merupakan bagian dari grup Apache (www-data).

Mari kita atur:

sudo chgrp -R www-data /home/demo/public_html

Saat kita berbicara tentang izin, saya akan menambahkan catatan singkat mengenai perintah sudo: Merupakan kebiasaan yang baik untuk menggunakan jalur absolut (/ home / demo / public_html) seperti yang ditunjukkan di atas daripada jalur relatif (~ / public_html). Ini memastikan sudo digunakan di lokasi yang benar.

Jika Anda memiliki folder public_html dengan symlink di tempatnya, maka berhati-hatilah dengan perintah itu karena akan mengikuti symlink. Dalam kasus folder public_html yang berfungsi, ubah setiap folder secara manual.

Setgid

Bagus sejauh ini, tapi ingat perintah yang baru saja kita berikan hanya memengaruhi folder yang ada. Bagaimana dengan sesuatu yang baru?

Kami dapat mengatur kepemilikan sehingga apa pun yang baru juga ada di grup 'www-data'.

Perintah pertama akan mengubah izin untuk direktori public_html agar menyertakan bit "setgid":

sudo chmod 2750 /home/demo/public_html

Itu akan memastikan bahwa setiap file baru diberikan grup 'www-data'. Jika Anda memiliki subdirektori, Anda akan ingin menjalankan perintah tersebut untuk setiap subdirektori (jenis izin ini tidak bekerja dengan '-R'). Untungnya subdirektori baru akan dibuat dengan bit 'setgid' disetel secara otomatis.

Jika kita perlu mengizinkan akses tulis ke Apache, ke direktori unggahan misalnya, maka setel izin untuk direktori itu seperti:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

Izin hanya perlu disetel sekali karena file baru secara otomatis akan diberi kepemilikan yang benar.

Kwadz
sumber
Solusi ini berhasil untuk saya. Sebelumnya, saya selalu menjalankan server dari terminal menggunakan pengguna root. Dengan solusi ini, saya dapat mengunggah file ke direktori yang memiliki izin 770. Luar biasa, karena sebelumnya saya hanya dapat mengunggah file menggunakan izin 777.
Ifan Iqbal