Надання дозволу на запис для групи даних www


27

Я створюю веб-сайт, і частина функції полягає в тому, щоб записувати дані, створені користувачем, за допомогою php. Я використовую nginx на Ubuntu 13.04. На даний момент я лише тестую, і все подається через nginx у lochost.

Мій сценарій php не може записати текстовий файл (хоча я можу це зробити вручну), і я думаю, що це проблема з дозволом для запису в мій каталог /var/www/example.com/public_html.

На даний момент я (iain) володію цим каталогом, але, мабуть, було б більше сенсу передати право власності на каталог / var / www та все, що знаходиться всередині нього, користувачеві www-data (чи це має бути група?) Та додати себе до група даних www. Чи є наступний правильний спосіб зробити це?

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

Так це означає, що хтось із групи даних www може тепер читати, писати та виконувати в / var / www?

Відповіді:


53

По-перше, useraddстворює нового користувача. Оскільки ви (iain) вже існуєте, ви хочете зателефонувати usermodнатомість. Так це було б:

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

(зауважте, -aна серверах на базі Debian (включений Ubuntu), які додадуть вас до цієї групи та збережуть своє членство в інших групах. Забудьте про це, і ви будете належати лише до групи даних www - може бути поганим досвідом, якщо хтось із На серверах типу SUSE параметр -Aзамість того, -aGщоб man usermodуважно прочитати, щоб правильно це зробити.)

По-друге, ви не хочете, щоб апаш мав повний доступ до доступу /var/www: це, можливо, є серйозним порушенням безпеки. Як правило, дозволяйте лише те, що вам потрібно, і більше нічого ( принцип найменшої пільги ). У цьому випадку вам потрібно apache ( www-data) і ви ( www-dataгрупа), щоб записати (і прочитати) в /var/www/example.com/public_html, так

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

Редагувати : щоб відповісти на своє початкове запитання, так, будь-який учасник www-dataтепер може читати та виконувати /var/www(тому що останній біт ваших дозволів 5 = read + exec). Але оскільки ви не використовували -Rкомутатор, це стосується лише /var/wwwфайлів і підкаталогів, які він містить. Тепер, чи можуть вони писати - це інша справа, і залежить від групи /var/www, яку ви не встановили. Я думаю, це зазвичай root:root, так що ні, вони (напевно) не вміють писати.

Редагувати 22.06.2014 : додано зауваження, що -aGопція дійсна на серверах на базі Debian. Мабуть, це залежить від розподілу, тому manуважно читайте перед виконанням.


Добре, я бачу. Група / var / www дійсно є root: root. Дякуємо за посилання Здається, більш розумним є звичка надавати необхідне, а не піти на зручність. Дякую за вказівки.
duff

2
Гаразд, тому я щойно спробував написати /var/www/example.com/public_html за допомогою, cp -r php /var/www/example.com/public_htmlі мені отримати дозвіл відмовлено. Я в групі даних www, яка має rwxrwx --- дозволи для цього dir. Чому це?
duff

Тут може бути багато речей. Наприклад, у вас не було дозволу читати деякі речі в php, або ви не вийшли з системи та після користувальницького модуля (я оновив свою відповідь на цей момент за допомогою addgroup, щоб уникнути цього, і уточнив, де використовувати sudo).
Калімо

З усіх відповідей, що стосуються www-data:www-dataцього, цей вирішив питання з відсутніми дозволами. Дякую.
Євген
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.