Назад | Перейти на главную страницу

Правильное назначение разрешений и групп

Итак, мой nginx использует www-data:www-data, и я хочу правильно развернуть файлы на моем сервере с помощью Beanstalk через sftp.

Итак, я создал пользователя по имени beanstalk и добавил его в www-data группа.

$ id beanstalk
uid=1000(beanstalk) gid=1000(beanstalk) groups=1000(beanstalk),33(www-data)

$ groups beanstalk
beanstalk : beanstalk www-data

Теперь, когда я запустил сценарий, который генерирует subby.site.net и устанавливает для него разрешения 755 www-data:www-data (EasyEngine), я готов развернуть свою штуку, но вот в чем дело:

beanstalk@site.net:/var/www/subby.site.net.net$ ls -la
total 20
drwxr-sr-x  4 www-data www-data 4096 Nov 14 08:50 .
drwxrwsr-x 26 www-data www-data 4096 Nov 14 09:32 ..
drwxr-sr-x  5 www-data www-data 4096 Nov 14 08:50 htdocs
drwxr-sr-x  2 www-data www-data 4096 Nov 14 08:50 logs
-rw-r--r--  1 www-data www-data 3052 Nov 14 08:50 wp-config.php

beanstalk@site.net:/var/www/subby.site.net.net$ mkdir test
mkdir: cannot create directory ‘test’: Permission denied

Если я сделаю sudo chmod 775 /var/www/subby.site.net, Я могу создать этот тестовый каталог с помощью beanstalk user, но я не думаю, что 775 - это правильный способ настройки разрешений веб-сервера, или я ошибаюсь?

Ваша проблема в том, что ваш бобовый стебель работает с beanstalk:www-data пользователь / группа при попытке доступа к вашему www-data:www-data собственное дерево каталогов (группа beanstalk здесь бесполезна).

Поскольку пользователь beanstalk не имеет прав там (файлы / каталоги принадлежат www-data пользователя, разрешения определяются на уровне группы (файлы / каталоги принадлежат www-data группа, к которой принадлежит beanstalk). Также могут быть использованы «другие» разрешения.

Однако когда вы используете 755 разрешения на каталог, права "группа" и "другое" 5, что значит r-x. Таким образом, ваша программа beanstalk может открывать (выполнять) каталог и читать его содержимое ... но не может создавать там файлы!

Проблема, которую я вижу с решением ACL, которое вам было предоставлено, заключается в том, что эти ACL необходимо обновлять каждый раз при создании новых файлов / каталогов.

Что вы могли бы сделать, используя свойства самой файловой системы ext:

  • Сделайте свое дерево собственностью beanstalk:www-data с правами по умолчанию: по умолчанию только пользователь может писать (755 для справочников и 644 для файлов). Так что для этого вам просто нужен beanstalk, это нормально! nginx и любую программу веб-сервера обычно нужно только читать файлы и перемещаться по дереву каталогов, чтобы сделать их частью www-data достаточно. Чтобы обеспечить автоматическое создание группы www-data при последующем создании каталогов, вы можете установить setgid флаг на ваших существующих каталогах, уже установленный с beanstalk:www-data пара владельцев. Каждый новый созданный файл / каталог теперь будет принадлежать beanstalk:www-data!
  • Добавьте разрешение на запись для группы во все созданные каталоги. Однако, опять же, маска по умолчанию создаст каталоги с 755 вам нужно будет вручную преобразовать в 775... Если ваше дерево каталогов веб-содержимого находится в выделенном разделе, вы можете изменить маску разрешений по умолчанию, чтобы она была 775, что является ограничением. Еще один недостаток - теперь каждое приложение, принадлежащее www-data группа сможет записывать данные в дерево каталогов ... которое включает nginx и, возможно, любое бэкэнд-приложение. Я считаю плохим давать им разрешения «open-bar»: подумайте, когда им каким-то образом введут инъекции, они могут испортить / стереть все по своему желанию!