Безопасный способ разрешить пользователям chgrp для www-данных
У меня есть небольшой веб-сервер, используемый некоторыми друзьями для размещения личных веб-сайтов. Иногда им нужно создать папку для загрузки, которая может быть записана веб-сервером (www-data). Есть ли безопасный способ позволить обычному пользователю (не в sudoers) установить конкретную группу, членом которой он не является?
Мне кажется, это опасный вариант, но мне, возможно, придется это разрешить. Поэтому я заинтересован в безопасных способах сделать это. Написание собственного сценария и предоставление пользователям возможности sudo, вероятно, небезопасно. Я хочу попытаться использовать лучшие практики, а не просто использовать sudo chgrp, если это действительно не безопасно.
Некоторые требования * Может изменять только файлы в определенной области сервера * Может изменяться только два и из определенных групп * Не может быть взломан для повышения привилегий или других проблем безопасности.
Запуск PHP FastCGI от имени конкретного пользователя может быть хорошим решением, но как я могу обеспечить безопасную и безопасную настройку?
2 ответа
Если сайты ваших пользователей разделены на виртуальный хост, в большинстве случаев простым и безопасным способом было бы использовать apache2-mpm-itk, который позволяет ограничить каждого отдельного хоста отдельным пользователем / группой системы.
После установки apache2-mpm-itk добавьте эти строки в часть конфигурации apache:
... AssignUserId USERID GROUPID IfModule> VirtualHost>
Таким образом, скрипты php/perl/python в vhosts также запускаются с обычным пользователем и разрешениями.
Одна вещь, которую вы можете сделать, и я делаю это, это использовать suexec, чтобы указать, что PHP-скрипты каждого пользователя выполняются под их собственной учетной записью пользователя или группы.
Для этого вам также нужно запустить PHP как модуль FastCGI и запустить mod_fcgid в Apache (подсказка: вы также можете использовать Apache Worker MPM). Установка немного сложна - вам нужны скрипты-обертки (вы можете обойти это, используя suphp, но я не пробовал).
У меня так, что PHP (и все процессы CGI) работают как www-data:<username>
, Затем, если пользователи хотят иметь возможность загружать PHP в свою собственную папку, они могут просто установить флаг записи группы самостоятельно.
Или просто запустите PHP как <username>:<username>
и им даже не придется это делать.