Предоставление прав на запись для группы www-data

27

Я создаю веб-сайт, и частью функции является запись пользовательских данных с помощью php. Я использую nginx на Ubuntu 13.04. На данный момент я только тестирую и все обслуживается через nginx на locahost.

Мой 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-data теперь может читать, писать и выполнять в / var / www?

фальсифицировать
источник

Ответы:

53

Во-первых, useraddсоздает нового пользователя. Поскольку вы (iain) уже существуют, usermodвместо этого вы хотите позвонить . Так что это будет:

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

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

Во-вторых, вы не хотите, чтобы у apache был полный доступ к rw /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 = чтение + exec). Но поскольку вы не использовали этот -Rпереключатель, он применяется только к /var/wwwфайлам и подкаталогам, которые он содержит, а не к ним. Теперь, могут ли они написать, это другое дело, и оно зависит от группы /var/www, которую вы не установили. Я предполагаю, что это типично root:root, поэтому нет, они (вероятно) не могут писать.

Редактировать в 2014-06-22 : добавлено примечание, что -aGопция действительна на серверах на основе Debian. Очевидно, это зависит от дистрибутива, поэтому manвнимательно прочитайте его перед выполнением.

Calimo
источник
Да я вижу. Группа / var / www действительно является root: root. Спасибо за ссылку. Кажется более разумным иметь привычку предоставлять то, что требуется, вместо того, чтобы идти для удобства. Спасибо за руководство.
Дафф
2
Итак, я только что попытался написать в /var/www/example.com/public_html с помощью, cp -r php /var/www/example.com/public_htmlи я получил отказ в разрешении. Я в группе www-data, у которой есть разрешения rwxrwx --- для этого каталога. Почему это?
Дафф
Здесь может быть много вещей. Например, у вас не было разрешения на чтение некоторых вещей в php, или вы не вышли из системы и не вошли после usermod (я обновил свой ответ по этому вопросу с помощью addgroup, чтобы избежать этого, и уточнил, где использовать sudo).
Calimo
Из всех ответов, касающихся www-data:www-data, этот решил проблему с отсутствующими разрешениями. Спасибо.
Евгений,