21

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

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

На данный момент я (iain) владею этим каталогом, но, похоже, было бы более разумно передать право собственности на каталог /var /www и все, что в нем, пользователю www-data (или это должна быть группа?) и добавить себя в группу www-data. Является ли следующий правильный способ сделать это?

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

Значит ли это, что кто-то из группы www-data теперь может читать, писать и выполнять в /var /www?

1 ответ1

44

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

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

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

Во-вторых, вы не хотите, чтобы у apache был полный доступ с правами доступа к /var/www: это потенциально серьезное нарушение безопасности. Как правило, разрешите только то, что вам нужно, и ничего более (принцип наименьших привилегий). В этом случае вам нужно apache (www-data) и вы (www-data group), чтобы написать (и прочитать) в /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 , так что нет, они (вероятно) не могут писать.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .