(Еще один!) Вопрос о привилегиях www-данных и руте - но с изюминкой
Короче говоря: безопасно ли предоставлять root (пользовательский) доступ к www-данным?
Более длинное утверждение: поскольку множество вопросов, задаваемых по этому вопросу с использованием chmod g+s, POSIX ACL и других сайтов, указывают на подходящий способ предоставления привилегий для /var/www/html и т. Д., Но мой немного другой, и все это Я пытался, кажется, не решить проблему.
/ var / www / project / html <- содержит все веб-файлы / var / www / project / log <- содержит все журналы на основе проекта
У меня также есть crontab, настроенный для того, чтобы пользователь root мог выполнять обслуживание и т. Д. В этих сценариях обслуживания (в основном PHP, чтобы я мог использовать свою общую библиотеку функций) у меня есть результаты, также переданные в папку журнала, в том же файле журнала для днем некоторые сценарии запускаются один раз в день, другие (могут) запускаться каждую минуту.
При запуске моего приложения (через Vagrant) я оставляю его на несколько минут (чтобы мои задания cron могли публиковать в файле журнала), а затем я вхожу в приложение. Сразу же я получаю сообщение об ошибке записи в файл журнала дней. После проверки убедитесь, что он принадлежит root:root - конечно, задания cron его создали (если его еще не было)...
Но! Как часть сценария установки при создании приложения, я выполняю следующее до конца:
chown -R www-data:www-data /var/www/project
chmod -R 775 /var/www/project
chmod g+s /var/www/project
... после чего мой сервер перезагружается (имя хоста также меняется перед перезагрузкой).
(Обратите внимание: я также пробовал выше с трейлинг /)
Насколько я понимаю, последняя команда ("g+s") заключается в том, что любой новый файл, созданный в этой папке, будет принимать разрешения родительской папки. Очевидно, что это не так, поскольку root создает файл, а его права доступа - root: root.
Выполнение различных "ls -l", которые я вижу (удаление размера файла, меток времени и т. Д.):
/var/www # ls -l
drwxrwsr-- www-data www-data project
/var/www # cd project
/var/www/project # ls -l
drwxrwsr-- www-data www-data html
drwxrwsr-- www-data www-data log
/var/www/project # cd log
/var/www/project/log # ls -l
-rw-r--r-- root root 170309.log
Итак... я удаляю этот файл журнала и затем повторяю команды chown, chmod и chmod g+s, чтобы посмотреть, была ли это перезагрузка или изменение имени хоста, это меня отталкивает... и, конечно же, мой сценарий обслуживания создает файл журнала еще раз, с привилегиями root: root.
Если я оставлю файл там и повторю команды, то получу результат, который искал:
/var/www/project/log # ls -l
-rwxrwxr-- 2 www-data www-data 170309.log
Однако у меня не обязательно будет возможность применять эти команды после перезагрузки системы, и я уверен, что на следующий день я столкнусь с теми же проблемами, поскольку файл журнала будет другим, и мой Сценарий обслуживания собирается создать его первым.
AFAICS, у меня есть пара решений:
- Когда функция, которая создает файл журнала (либо через задание cron, либо через приложение), я проверяю, существует ли он уже, а если нет, создает его, а затем "chown www-data: www-data todaysLogFile" а потом "chmod 774" это потом... возможно, обходной путь, а не решение
- добавить root в группу www-data (какие-нибудь потенциальные проблемы безопасности? это поможет?)
- использовать POSIX ACL
Я на самом деле ищу твердое решение, а не хаки или обходные пути. Я знаю, что я не единственный, кто делает это, но должен быть более легкий путь!!!: О)
1 ответ
Итак, если коротко, то если я не хочу связываться с umask (что я в идеале никогда не хотел делать), и хотя добавление root в группу www-data на самом деле не влияет на проблемы безопасности, я пошел с используя ACL.
В целом, это было довольно безболезненно: 14.04 и более поздние версии автоматически монтируют разделы с помощью опции ACL, так что в fstab не требуется никаких манипуляций, а затем просто устанавливаются утилиты ACL и устанавливаются необходимые разрешения для этой папки (и любой другой). Последующее: facl также использует опцию -R) было быстро, просто и делало именно то, что написано на банке.