Давать / var / www файлы доступа к www-данным и моему пользователю?

Любая папка, которую я хочу, чтобы мой PHP-код мог сохранить или какой-либо файл, который я хочу, чтобы он мог изменять, должен принадлежать www-данным. Это раздражает, потому что все, что я создаю или хочу редактировать без sudo, принадлежит моему пользователю.

С другой стороны, сервер моей школы показывает все, что принадлежит пользователю, но таких вопросов никогда не бывает. Кажется, что у www-данных нет проблем с сохранением или модификацией вещей, несмотря на то, что они не являются владельцами.

Как мне заставить мой / var / www сайт работать таким образом, где я могу сохранить право собственности на все, но не испортить доступ к www-данным?

Решение, которое я обычно использую на веб-серверах, использует ACL. В основном это означает использование дополнительных наборов разрешений, отличных от обычной системы с другими группами пользователей. Я считаю это особенно полезным, когда я настраиваю ограниченный доступ к PHP (например, используя suPHP).

Чтобы сохранить право собственности на мои файлы, я убеждаюсь, что они принадлежат мне:

$ chown me:me /var/www -R 

Затем я предоставляю доступ к чтению www-data всюду (и разрешение на доступ к каталогам, иногда предпочтительнее настройки).

 $ setfacl -Rdm 'u:www-data:rX' /var/www $ setfacl -Rm 'u:www-data:rX' /var/www 

Я также предоставляю доступ для записи в Apache везде, где я хочу, чтобы он писал материал. Например:

 $ setfacl -Rdm 'u:www-data:rwX' /var/www/uploads $ setfacl -Rm 'u:www-data:rwX' /var/www/uploads 

Обратите внимание, что для использования списков ACL вам необходимо убедиться, что вы установили файловую систему с опцией acl . Это делается в /etc/fstab :

 # <file system> <mount point> <type> <options> <dump> <pass> /dev/sdxy /var ext4 defaults,acl 0 2 

(предполагая, что /var находится в другом разделе, в противном случае см. / )

Кстати, в некоторых системах параметр acl устанавливается по умолчанию. Например :

Начиная с Ubuntu 14.04 и для ext4, вышеуказанное не требуется, поскольку acl уже по умолчанию.

Вы можете проверить, включены ли ACL в файловой системе с использованием tune2fs (при условии ext * FS):

 # tune2fs -l /dev/sdxy | grep acl Default mount options: acl ... 

Для получения дополнительной информации о setfacl , посмотрите здесь .

Самое простое, что вы могли бы сделать (на машине, которую вы контролируете), было бы

  • добавьте идентификатор группы www-data в группы вашей учетной записи и сделайте папки доступными для групп, например, chmod 775 .

  • Кроме того, вы можете изменить DocumentRoot чтобы указать на свой собственный каталог, и обеспечили, чтобы www-data могли читать (и выполнять сценарии).

Ни один из них не будет удовлетворительным решением для реального сервера (он недостаточно безопасен).