Назад | Перейти на главную страницу

Как включить сценарии CGI с возможностью групповой записи, поддерживающие suexec?

Меня попросили создать общее веб-пространство на веб-сервере нашего отдела, к которому могут получить доступ несколько человек и на котором могут выполняться сценарии CGI или PHP. Люди, обслуживающие веб-пространство, могут решить использовать его для отправки файлов, что будет означать, что им потребуется доступ к любым файлам, созданным сценариями. Мы запускаем Apache в Scientific Linux 6.

Поскольку нескольким людям требуется доступ для записи в веб-пространство, наш стандартный подход заключается в создании группы, к которой принадлежат все соответствующие люди, а затем для установки разрешений для каталогов в веб-пространстве на g+ws. suexec недоволен тем, что файлы доступны для групповой записи, и отказывается их запускать.

Как мы можем это настроить и убедиться, что любые сценарии запускаются под учетной записью, которая отличается от основной учетной записи apache (и отличается от любого из пользователей, которые не в группе для веб-пространства)? По причинам подотчетности (и другим) я бы предпочел не создавать общую учетную запись, которую различные люди должны будут использовать для поддержки этого веб-пространства.

Для более подробного контекста, вот как мы сейчас настроены: у нас есть пользователи, чьи домашние каталоги находятся в NFS и при необходимости автоматически монтируются. Большинство людей просто используют свое личное веб-пространство, доступное через mod_userdir. В прошлом мы отправляли несколько запросов на совместное веб-пространство, создавая дополнительные автоматически подключенные каталоги на сервере NFS, которые не привязаны к конкретным учетным записям, но для которых настроено групповое владение для облегчения доступа для нескольких учетных записей. До сих пор эти общие пространства содержали только статический контент (и мы доверяли вовлеченным людям не запускать из них скрипты), поэтому нам никогда раньше не приходилось решать какие-либо проблемы, связанные с suexec, для такого рода пространств.


редактировать: Обратите внимание, что пользователям может потребоваться доступ к файлам, созданным сценариями.

Чтобы обеспечить подотчетность в этом контексте и при этом обеспечить правильное владение и разрешения для опубликованного контента, я использую слегка измененную версию рабочего процесса, описанного в этот статья.

Вот как я реализовал, обратите внимание, что большинство частей можно заменить:

  • Весь опубликованный контент управляется системой контроля версий (в данном случае git)
  • У пользователей есть номинальные учетные записи, зарегистрированные в Kerberized LDAP вместе с их открытыми ключами RSA.
  • Раньше я использовал такие открытые ключи для предоставления доступа к различным репозиториям с помощью gitosis / gitolite, но вы также можете использовать простой git с git-shell.
  • Некоторое время назад я перешел на gitblit, который обеспечивает авторизацию LDAP. Для доступа к веб-интерфейсу gitblit требуется действующий билет Kerberos.
  • У репозиториев есть символическая ссылка на хук после обновления на скрипт, содержащий:

#!/bin/sh

sudo /usr/local/sbin/publisher-hub2live

exit 0

Скрипт не доступен напрямую неавторизованным пользователям:

# ls -lrt /usr/local/sbin/publisher-hub2live
-rwx------. 1 root root 400 Oct 12  2012 /usr/local/sbin/publisher-hub2live

Отсюда судорула:

Defaults:git   !requiretty
git   Host_Alias = (root) NOPASSWD: /usr/local/sbin/publisher-hub2live

Заменить git с фактическим владельцем репозиториев.

Содержимое скрипта издателя работает здесь "волшебно" (упрощенная версия):


#!/bin/sh

echo
echo "**** Pulling changes into Live [Hub's post-update hook]"
echo

cd /path/to/live/repo || exit
umask 0022
unset GIT_DIR
git pull hub master

chown -R root:root /path/to/live/repo
find /path/to/live/repo/ -type d | xargs chmod u=rwx,go+rx
find /path/to/live/repo/ -type f | xargs chmod u=rw,go+r
restorecon -v -R /path/to/live/repo

exec git update-server-info

exit 0

Ваши потребности могут различаться в зависимости от прав владельца, группы, DAC и MAC, но рабочий процесс остается прежним.