Saya akan menyelesaikan jawaban rahmu dan MV dengan solusi teknis. Segala sesuatu yang mengikuti ini hanya berlaku untuk sistem seperti UNIX.
Gulir melewati bagian chmod / chown untuk contoh menggunakan ACL - alat yang lebih kuat daripada mode file UNIX.
Menemukan nama pengguna server web Anda
Pertama, Anda harus mengetahui nama pengguna yang digunakan server web Anda. Jika Anda menggunakan Apache, dapat apache
atau httpd
, www-data
, dll Pada kebanyakan Debian-seperti sistem, Apache www-data
. Untuk nginx, umumnya, itu juga www-data
.
Untuk memeriksanya, cobalah:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Pastikan bahwa nama pengguna yang dikembalikan oleh perintah ini adalah koheren (misalnya, saya menggunakan nginx 99% waktu, tetapi perintah ini kembali tomcat7
, server web Java yang saya pasang sekali) .
Memberikan izin ke server web: menggunakan chmod
danchown
Melakukan chmod
666 atau 777 (solusi masuk untuk masalah semacam itu di dokumentasi / tutorial yang buruk) secara ajaib dapat membuat semuanya berfungsi, tetapi tidak aman. Memberikan izin 666 atau 777 akan memberikan akses ke "orang lain". Jadi bukan hanya Apache, tetapi juga grandmother
dan nsa
(asalkan akun pengguna itu ada di komputer Anda - tetapi tidak juga, harap hindari melakukan ini kecuali itu hanya untuk pengujian / pemecahan masalah).
Lebih baik untuk lebih spesifik dan memberikan izin hanya untuk Anda dan Apache. Ubah grup file Anda untuk memberikan kontrol penuh pada file Anda ke server web. Untuk melakukan ini, ubah pemilik secara rekursif:
chown -R www-data:www-data your/folder/
Tetapi kemungkinan besar, Anda mungkin ingin menyimpan akses penuh pada file Anda dengan mengubah grup saja:
chown -R yourusername:www-data your/folder/
Kemudian, lakukan yang sesuai chmod
untuk memberi grup www-data
izin yang sama dengan Anda. Misalnya, jika mode saat ini adalah 640 (6 untuk Anda, 4 untuk www-data, 0 untuk orang lain, diterjemahkan ke -rw-r -----) , setel ke 660 (6 untuk Anda, 6 untuk www- data, 0 untuk yang lain, menerjemahkan ke -rw-rw ----) . Lihat jawaban rahmu untuk mempelajari lebih lanjut tentang mode file, ini adalah mekanisme yang lama, namun elegan.
Untuk menghindari memanipulasi angka misterius dengan chmod
, Anda juga dapat menggunakan sintaks ini:
chmod -R g+rw your/folder/
Ini berarti "ke grup ( g
), tambahkan ( +
) baca dan tulis ( rw
) izin pada folder your/folder/
, secara rekursif ( -R
)".
Dalam 90% kasus, ini sudah cukup.
Metode pilihan saya: menggunakan ACL (Access Control List)
Terkadang solusi pertama tidak cukup. Saya akan mengambil contoh Kerangka Symfony yang mencatat dan menyimpan banyak data. Jadi perlu akses tulis ke folder yang sesuai.
Dan metode chmod
/ chown
mungkin tidak mencukupi, ketika Anda menggunakan secara paralel Symfony Console di CLI (di bawah akun pengguna saya) dan Web (pengguna server web). Ini menyebabkan banyak masalah karena Symfony terus-menerus mengubah izin.
Dalam hal ini, kami akan menggunakan ACL (Access Control List), yang merupakan cara yang lebih maju untuk mengelola izin pada banyak sistem UNIX.
Di sini perintah yang diberikan oleh dokumentasi Symfony resmi ( silakan ubah app/cache
dan app/logs
sesuai kebutuhan Anda ):
Pada sistem yang mendukung chmod +a
(mis. Bukan Debian / Ubuntu)
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
Pada sistem yang tidak mendukung chmod +a
(paling umum)
Anda akan membutuhkan setfacl
alat tersebut; mungkin itu diinstal pada sistem Anda secara default, jadi cobalah setfacl -v
untuk melihat apakah perintah itu tersedia.
Jika perintah tidak tersedia, dan Anda menggunakan Ubuntu 14.04+, Anda hanya perlu menginstal alat ini:
sudo apt install acl
Jika tidak, ikuti dokumentasi OS Anda, karena Anda mungkin perlu mengubah cara partisi Anda dipasang ( dokumentasi Ubuntu di sini ).
Dan di sanalah kita:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
Saya tidak pernah memiliki masalah dengan metode ini, puas atau uang Anda kembali.