Пользовательские веб-каталоги Apache под собственным идентификатором пользователя вместо www-данных?

Разговор об этой функции http://httpd.apache.org/docs/current/howto/public_html.html

Есть ли способ (КАК?) Заставить Apache принимать (setuid) ID каждого "~ пользователя" вместо того, чтобы делать все под идентификатором пользователя www-data?

Здесь есть связанный вопрос: Apache для каждого пользователя

В этом вопросе один ответ на самом деле не советует делать то, что я спрашиваю:

Если бы вам нужно было запустить по одному экземпляру apache для каждого пользователя и иметь этот apache, принадлежащий пользователю, вы тем самым предоставили бы разрешения apache для записи во все каталоги пользователя. Это вообще не считается хорошей идеей вообще.

Тот факт, что ответчик заявил, что вы НЕ ДОЛЖНЫ делать этого, похоже, подразумевает, что вы МОЖЕТЕ сделать это. Так что теперь я просто спрашиваю, КАК это сделать, потому что у меня есть очень конкретный вариант использования, который требует этого, но запуск отдельного экземпляра для каждого идентификатора пользователя слишком ресурсоемкий. Так есть ли более простой способ?

2 ответа

Вы можете попробовать Apache ITK MPM. Он работает как традиционная модель prefork Apache, но назначает разные UID для каждого виртуального хоста. И если вы используете Apache 2.4, вы можете использовать mod_rewrite, чтобы сделать ~/ пути использования UID этого конкретного homedir в соответствии с инструкциями домашней страницы ITK MPM.

RewriteEngine on
RewriteRule /~([a-z]+)/ - [E=ITKUID:$1]
AssignUserIDExpr %{reqenv:ITKUID}

Да, вы бы включили SuExec.

https://httpd.apache.org/docs/2.4/suexec.html

В частности, раздел, который начинается с использования suEXEC.

Цитируется здесь для удобства:

Использование suEXEC

Запросы для программ CGI будут вызывать обертку suEXEC, только если они предназначены для виртуального хоста, содержащего директиву SuexecUserGroup, или если они обрабатываются mod_userdir.

Виртуальные хосты. Одним из способов использования оболочки suEXEC является использование директивы SuexecUserGroup в определениях Virtual Host. Установив в этой директиве значения, отличные от идентификатора пользователя основного сервера, все запросы на ресурсы CGI будут выполняться как пользователь и группа, определенные для этого ''. Если эта директива не указана для '', то предполагается использование основного идентификатора сервера.

Пользовательские каталоги: запросы, которые обрабатываются mod_userdir, будут вызывать оболочку suEXEC для выполнения CGI-программ под идентификатором пользователя запрошенного пользовательского каталога. Единственное требование, необходимое для работы этой функции, - чтобы для пользователя было разрешено выполнение CGI, а сценарий должен соответствовать проверкам безопасности, описанным выше. Смотрите также параметр времени компиляции --with-suexec-userdir.

Вам нужно убедиться, что во время сборки Apache включена опция времени компиляции --with-suexec-userdir.

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