Есть ли способ разрешить apache2 вошедшему в систему пользователю для динамического доступа к определенному каталогу?
Это на удивление очень сложная проблема.
Я хочу, чтобы мои пользователи Linux могли входить в Apache2 и иметь доступ только к своим собственным каталогам. Мне удалось заставить пользователей Linux проходить аутентификацию на Apache2 с использованием PAM, и это прекрасно работает.
Однако предоставление доступа к своим собственным каталогам оказалось реальной проблемой.
То, как Apache2 работает как обычный пользователь, предотвращает использование отдельных прав доступа к файлам, поскольку вошедший в систему пользователь работает как обычный пользователь Apache2.
Я бы предпочел не запускать Apache2 от имени пользователя root и писать модуль, который выполняет setuid (вошел в систему пользователя) из-за проблем безопасности.
Есть ли способ разрешить apache2 вошедшему в систему пользователю для динамического доступа к определенному каталогу?
Спасибо, Цезарь.
3 ответа
То, что вы ищете, это Apache suexec
функция. Как говорится там:
Функция suEXEC предоставляет пользователям Apache возможность запускать программы CGI и SSI под идентификаторами пользователей, отличными от идентификатора пользователя вызывающего веб-сервера. Обычно, когда выполняется программа CGI или SSI, она запускается как тот же пользователь, который запускает веб-сервер.
При правильном использовании эта функция может значительно снизить риски безопасности, связанные с предоставлением пользователям возможности разрабатывать и запускать частные программы CGI или SSI. Однако, если suEXEC неправильно настроен, это может вызвать любое количество проблем и, возможно, создать новые дыры в безопасности вашего компьютера. Если вы не знакомы с управлением
setuid
корневые программы и проблемы безопасности, которые они представляют, мы настоятельно рекомендуем вам не рассматривать использование suEXEC.
Вы можете добавить строку как
SuexecUserGroup script_user script_user
к вашим конфигам apache - желательно на VirtualHost
основа. Затем укажите каталоги, которые можно использовать в конфигурации suexec, например: /etc/apache2/suexec/www-data
, Затем перезапустите Apache и попробуйте.
У Digital Ocean есть учебник, который может помочь, если вы делаете это на Ubuntu.
На самом деле это невозможно только с помощью Apache; даже у mod_dav нет такой функциональности, и это было бы исключительно полезно там.
suEXEC не устанавливает uid, для которого apache аутентифицируется (например, HTTP-аутентификация), целевой euid фиксируется в конфигурации сервера или виртуального хоста.
Как вы упомянули, вам нужен безопасный CGI с установленным setuid, который сбрасывает привилегии до идентифицированного uid и читает ваши файлы и каталоги для веб-приложения. CGI должен был бы запускаться от имени пользователя root, а затем setgid & setuid в качестве аутентифицированного пользователя, который, как я полагаю, передается в CGI apache в качестве переменной среды REMOTE_USER. Есть много ошибок, связанных с правильным изменением UID.
Я бы порекомендовал использовать другой протокол, который уже поддерживал такое поведение, например SFTP.
Чтобы закрыть это. Я нашел модуль mpm_itk, который выполняет setuid. Однако mpm_itk использует предварительно настроенный идентификатор пользователя или выражение регулярного выражения. Нет способа указать использование аутентифицированного пользователя.
Я собирал код mpm_itk для написания своего собственного модуля.