DIPERBARUI UNTUK CLARITY LEBIH LANJUT:
Menurut http://expressionengine.com/user_guide/installation/installation.html , dikatakan:
Untuk sebagian besar host Unix, berikut ini adalah tipikal, tetapi Anda dapat memeriksa dengan host Anda untuk melihat apakah izin yang lebih ketat dapat digunakan untuk memungkinkan PHP menulis ke file (666) dan folder (777) . Pada server Windows hal-hal berikut tidak akan berlaku, tetapi Anda harus memastikan bahwa file dan folder dapat ditulis oleh ExpressionEngine. Anda mungkin perlu menghubungi tuan rumah Anda untuk ini.
Tidak yakin apa maksudnya. Saya dapat mengubah file dan folder tertentu masing-masing menjadi 666 dan 777 di mana saya adalah chown'er, tetapi di atas terdengar seperti saya perlu mengizinkan PHP untuk melakukan ini juga?
PERTANYAAN ASLI:
Saya perlu memastikan bahwa PHP dapat menulis ke file tertentu (666) dan folder (777).
Bagaimana saya melakukan ini?
sumber
Jawaban:
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
atauhttpd
,www-data
, dll Pada kebanyakan Debian-seperti sistem, Apachewww-data
. Untuk nginx, umumnya, itu jugawww-data
.Untuk memeriksanya, cobalah:
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 jugagrandmother
dannsa
(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:
Tetapi kemungkinan besar, Anda mungkin ingin menyimpan akses penuh pada file Anda dengan mengubah grup saja:
Kemudian, lakukan yang sesuai
chmod
untuk memberi grupwww-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:Ini berarti "ke grup (
g
), tambahkan (+
) baca dan tulis (rw
) izin pada folderyour/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
danapp/logs
sesuai kebutuhan Anda ):Pada sistem yang mendukung
chmod +a
(mis. Bukan Debian / Ubuntu)Pada sistem yang tidak mendukung
chmod +a
(paling umum)Anda akan membutuhkan
setfacl
alat tersebut; mungkin itu diinstal pada sistem Anda secara default, jadi cobalahsetfacl -v
untuk melihat apakah perintah itu tersedia.Jika perintah tidak tersedia, dan Anda menggunakan Ubuntu 14.04+, Anda hanya perlu menginstal alat ini:
Jika tidak, ikuti dokumentasi OS Anda, karena Anda mungkin perlu mengubah cara partisi Anda dipasang ( dokumentasi Ubuntu di sini ).
Dan di sanalah kita:
Saya tidak pernah memiliki masalah dengan metode ini, puas atau uang Anda kembali.
sumber
Tidak peduli siapa pemilik file, 666 izin dan 777 akan cukup: digit terakhir memastikan bahwa setiap pengguna pada sistem memiliki akses. Meskipun ini adalah cara termudah untuk melakukannya, sudah pasti bukan yang paling aman untuk alasan yang tepat.
Cara yang lebih baik untuk melakukannya
Hal pertama yang perlu Anda pahami adalah cara kerja izin Unix . Untuk memahami jawaban yang saya berikan di tautan ini, harap perhatikan bahwa izin dapat diterjemahkan ke angka:
---
--x
-w-
-wx
r--
r-x
rw-
rwx
A
chmod 666
kemudian setara dengan mengubah izinrw-rw-rw
.Selanjutnya Anda harus mencari tahu siapa pengguna yang mengeksekusi skrip PHP. Biasanya itu adalah pengguna yang menjalankan server web Anda. Berikut adalah contoh cara melakukan ini (Anda dapat mengganti Apache dengan nama server web Anda).
Setelah Anda tahu mana pengguna yang menjalankan skrip, dan pemilik file yang Anda sebutkan, terserah Anda untuk mengatur izin yang sesuai. Ingatlah bahwa memberikan akses tulis (bahkan dibaca) ke setiap pengguna di sistem Anda dapat berpotensi bencana.
sumber
Expression Engine sama seperti banyak aplikasi web PHP lainnya yang memerlukan akses baca + tulis ke beberapa file dan direktori. Misalnya, EE memerlukan akses tulis ke file config.php dan database.php, dan akses tulis ke direktori unggah file.
Apa yang dinyatakan oleh dokumentasi adalah bahwa, karena sebagian besar server menjalankan PHP sebagai mod_php (dan dijalankan dengan izin dari server web), dan karena Anda mungkin akan mengunggah file Anda dengan FTP (atau serupa) menggunakan pengguna Anda sendiri, file-file tersebut dan direktori perlu diberikan izin 666 (semua orang dapat membaca dan menulis) dan 777 (semua orang dapat membaca, menulis, dan menelusuri).
Itu bukan cara yang paling aman, tetapi tentu saja adalah yang termudah, khususnya jika Anda menggunakan layanan hosting.
Namun, seperti yang dinyatakan dalam instruksi EE, tanyakan penyedia hosting Anda, karena beberapa tidak menggunakan mod_php tetapi versi fastcgi, suphp atau yang berbeda. Server-server itu menjalankan PHP sebagai pengguna Anda sendiri, sehingga semua file yang Anda unggah sudah dapat dibaca dan ditulis oleh PHP dan oleh file apa pun yang dibuat oleh skrip EE. Dalam hal ini file dan direktori yang diakses oleh PHP perlu diberikan akses 600 dan 700. File lain yang dapat diakses langsung oleh server web (bukan runtime PHP) masih membutuhkan akses 666 dan 777).
sumber