Izin file default untuk www-data pengguna php

8

Saya memiliki php yang diinstal pada mesin ubuntu saya. Root web adalah/var/www

Saya mengatur izin untuk folder ini seperti ini:

sudo chown -R ftpuser: www-data / var / www

ftpuser adalah pengguna yang saya atur sehingga saya dapat ftp ke / var / www dari komputer lain di jaringan. www-data adalah php yang digunakan pengguna. Saya mengecek menggunakan whoamidari php.

Setiap kali saya ftp mengunggah file baru ke mesin, grup tidak memiliki izin untuk file tersebut. Jadi ketika saya mencoba mengaksesnya di browser saya melalui machine-name/new-file.phpsaya diberitahu izin ditolak dan saya harus pergi dan chmodfile baru.

Saya bertanya-tanya apakah ada cara saya dapat default pengguna data-www / grup untuk memiliki izin akses ke file baru jadi saya tidak harus menyimpan chmod setiap file baru?

JD Isaacks
sumber

Jawaban:

6

Anda bisa menggunakan ACL. Untuk mengatur ACL untuk Ubuntu 10.10, pertama-tama pasang sistem file dengan opsi acl di / etc / fstab.

sudo vim /etc/fstab

UUID = default xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4, acl 0 1

sudo mount -o remount,acl /

Kemudian buat grup tempat pengguna dapat memiliki untuk tujuan ini.

sudo groupadd developers
sudo usermod -a -G developers $username

Pengguna harus keluar dan masuk lagi untuk menjadi anggota grup pengembang.

Tentu saja, jangan lakukan ini jika Anda memiliki konten di direktori / var / www yang Anda inginkan, tetapi hanya untuk menggambarkan pengaturannya untuk memulai:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root.developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public

Kemudian ganti referensi ke "/ var / www" dengan "/ var / www / public" di file konfigurasi dan muat ulang.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Jika kami ingin membatasi hapus dan ganti nama dari semua kecuali pengguna yang membuat file:

sudo chmod +t /var/www/public

Dengan cara ini, jika kita ingin membuat direktori untuk kerangka kerja yang ada di luar root dokumen Apache atau mungkin membuat direktori server yang dapat ditulis, itu masih mudah.

Direktori log yang dapat ditulis oleh Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Direktori perpustakaan yang dapat dibaca oleh Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/lib
sudo chmod 0750 /var/www/lib

sumber
Ini bekerja dengan baik untuk saya, tetapi saya akan tertarik jika Anda bisa menjelaskan apa yang dilakukan chmod g+sdan setfaclperintah (dan parameternya).
Greg
4

Saya yakin Anda sudah menyelesaikan ini, jadi ini untuk siapa saja dengan permintaan serupa

jalankan perintah "ubah kepemilikan" pada folder webroot Anda:

sudo chown manny -R www

Ini akan membuat Anda pemiliknya mengganti "manny" dengan nama pengguna Anda, memungkinkan Anda untuk menulis / membaca di dalam folder www

Manny
sumber
1

Jika server web Anda bahkan tidak dapat membaca file, kemungkinan besar izinnya new-file.phpadalah sekitar 600 (baca dan tulis untuk pemilik). Cari pengaturan umask di aplikasi FTP Anda, dan pastikan itu seperti 007.

Jika aplikasi web Anda perlu chmod file (atau operasi lain yang hanya dapat dilakukan oleh pemilik file), Anda memerlukan pendekatan lain. Jika Anda menggunakan Apache, Anda harus mempertimbangkan menggunakan MPM gatal . Dengan modul itu, Anda dapat membuat Apache menjalankan / membuka file menggunakan pengguna yang sama dengan "ftpuser". Jika Anda memerlukan informasi lebih lanjut tentang subjek ini, tambahkan komentar.

Lekensteyn
sumber