Есть ли способ разрешить 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 для написания своего собственного модуля.

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