Права доступа к файлу по умолчанию для пользователя php www-data

8

У меня установлен php на моей машине с Ubuntu. Корень сети/var/www

Я установил разрешения для этой папки следующим образом:

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

ftpuser - это пользователь, которого я настроил, чтобы я мог ftp к / var / www с другого компьютера в сети. www-data - это пользователь php. Я дважды проверил, используя whoamiphp.

Всякий раз, когда я загружаю новый файл по FTP, группа не имеет прав доступа к файлу. Поэтому, когда я пытаюсь получить к нему доступ в своем браузере через, machine-name/new-file.phpмне сообщают, что в разрешении отказано, и мне нужно идти и chmodновый файл.

Мне интересно, есть ли способ по умолчанию для пользователя / группы www-data иметь права доступа к новым файлам, чтобы мне не приходилось хранить chmod каждый новый файл?

JD Исаакс
источник

Ответы:

6

Вы можете использовать ACL. Чтобы настроить ACL для Ubuntu 10.10, сначала смонтируйте файловые системы с параметром acl в / etc / fstab.

sudo vim /etc/fstab

UUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 по умолчанию, acl 0 1

sudo mount -o remount,acl /

Затем создайте группу, к которой пользователь может принадлежать для этой цели.

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

Пользователь должен выйти из системы и войти снова, чтобы стать членом группы разработчиков.

Конечно, не делайте этого, если у вас есть содержимое в каталоге / var / www, которое вы хотите, но просто для иллюстрации настройки его для запуска:

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

Затем замените ссылки на "/ var / www" на "/ var / www / public" в файле конфигурации и перезагрузите.

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

Если мы хотим ограничить удаление и переименование для всех, кроме пользователя, который создал файл:

sudo chmod +t /var/www/public

Таким образом, если мы хотим создать каталоги для каркасов, которые существуют вне корневого каталога документов Apache, или, возможно, создать каталоги, доступные для записи на сервере, это все еще просто.

Каталог журналов, доступных для записи в Apache:

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

Apache-читаемый каталог библиотеки:

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

источник
Это работало отлично для меня, но мне было бы интересно , если вы могли бы объяснить , что chmod g+sи setfaclкоманды сделали (и их параметров).
Грег
4

Я уверен, что вы уже разобрались, так что это для тех, кто с подобным запросом

выполните команду «изменить владельца» в папке webroot:

sudo chown manny -R www

Это заставит вас заменить «manny» на ваше имя пользователя, что позволит вам писать / читать в папке www

Мэнни
источник
1

Если ваш веб-сервер не может даже прочитать файлы, очень вероятно, что права доступа new-file.phpпримерно 600 (чтение и запись для владельца). Найдите настройку umask в своем приложении FTP и убедитесь, что это что-то вроде 007.

Если вашему веб-приложению нужно изменить файлы (или другие операции, которые могут быть выполнены только владельцем файла), вам нужен другой подход. Если вы используете Apache, вы должны рассмотреть возможность использования itk MPM . С этим модулем вы можете заставить Apache запускать / открывать файлы, используя того же пользователя, что и «ftpuser». Если вам нужна дополнительная информация по этому вопросу, добавьте комментарий.

Lekensteyn
источник