(Еще один!) Вопрос о привилегиях 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, у меня есть пара решений:

  1. Когда функция, которая создает файл журнала (либо через задание cron, либо через приложение), я проверяю, существует ли он уже, а если нет, создает его, а затем "chown www-data: www-data todaysLogFile" а потом "chmod 774" это потом... возможно, обходной путь, а не решение
  2. добавить root в группу www-data (какие-нибудь потенциальные проблемы безопасности? это поможет?)
  3. использовать POSIX ACL

Я на самом деле ищу твердое решение, а не хаки или обходные пути. Я знаю, что я не единственный, кто делает это, но должен быть более легкий путь!!!: О)

1 ответ

Итак, если коротко, то если я не хочу связываться с umask (что я в идеале никогда не хотел делать), и хотя добавление root в группу www-data на самом деле не влияет на проблемы безопасности, я пошел с используя ACL.

В целом, это было довольно безболезненно: 14.04 и более поздние версии автоматически монтируют разделы с помощью опции ACL, так что в fstab не требуется никаких манипуляций, а затем просто устанавливаются утилиты ACL и устанавливаются необходимые разрешения для этой папки (и любой другой). Последующее: facl также использует опцию -R) было быстро, просто и делало именно то, что написано на банке.

Другие вопросы по тегам