У меня есть небольшой веб-сервер, на котором некоторые друзья размещают личные сайты. Иногда им нужно создать папку для загрузок, в которую может записывать веб-сервер (www-data). Есть ли безопасный способ разрешить обычному пользователю (не в sudoers) установить определенную группу, членом которой он не является?
Мне кажется, что это опасный вариант, но мне, возможно, придется разрешить. Так что меня интересуют безопасные способы сделать это. Написание собственного скрипта и разрешение пользователям использовать sudo, вероятно, небезопасно. Я хочу попробовать использовать лучшие практики, а не просто разрешить sudo chgrp, если это действительно не безопасно.
Некоторые требования * Может изменять файлы только в определенной области сервера * Можно изменять только два файла и из определенных групп * Нельзя взломать, чтобы разрешить повышение привилегий или другие проблемы безопасности.
Запуск PHP FastCGI от имени конкретного пользователя может быть хорошим решением, но как я могу убедиться, что он настроен надежно и безопасно?
Если веб-сайты ваших пользователей разделены на виртуальный хост, простыми и безопасными способами в большинстве случаев будет использование apache2-mpm-itk, которое позволяет ограничить каждый отдельный виртуальный хост определенным пользователем / группой системы.
После установки apache2-mpm-itk добавьте эти строки в часть конфигурации apache:
<virtualhost foobar.com:80> ... <IfModule mpm_itk_module> 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>
и им даже не придется этого делать.