У меня есть сервер с несколькими пользователями, и я хотел бы разрешить некоторым из них хранить на нем веб-страницы. Таким образом, я создал для них подкаталоги / var / www и соответствующим образом настроил свой веб-сервер.
Однако я не хочу, чтобы они могли просматривать любое содержимое подкаталога в / var / www, кроме их собственного. Как я могу это сделать? Если я установлю права верхнего каталога на user: www-data и права доступа на 760, я думаю, это будет возможно. Но как я могу гарантировать, что каждый файл или каталог, созданный в их каталоге, использует одни и те же атрибуты user: group?
Кроме того, я хотел бы иметь возможность использовать git для развертывания содержимого веб-страницы. Я не хочу знать никаких технических подробностей о том, как это сделать, я хочу знать, как мне снова организовать права. Я использую gitolite, и каждый репозиторий хранится в / var / lib / gitolite / repositories (владельцем файлов является пользователь git). Как лучше всего разрешить пользователю git писать в один из каталогов веб-страницы, используя правильную информацию о пользователе: группе? Это вообще возможно? Как вы управляете своими правами доступа / var / www? Как это делают провайдеры?
Во-первых, обратите внимание, что ваш 760 откажет группе www-data в разрешении «войти» в этот каталог, поэтому он не сможет обслуживать файлы из него.
Биты + s в каталогах заставляют файлы и подкаталоги создаваться с тем же uid / gid, что и сам каталог (и подкаталоги также будут + s), поэтому, если вы
chown user:www-data /var/www/userdir
chmod 6770 /var/www/userdir
любые файлы и папки, созданные в этой папке после этого момента, будут иметь имя пользователя: www-data. Обратите внимание, что вы хотите установить это только для каталогов, и он не будет «исправлять» файлы и каталоги, которые уже существуют.
Если вам не нужен список каталогов или функции согласования содержимого веб-сервера, вы можете оставить бит группы r в папке (6730). Это немного усложнит написание сценария, который запускается веб-сервером и заглядывает в каталог другого пользователя (они должны знать имя файла, который они хотят прочитать). Вы также можете смягчить это, используя некоторую форму suexec, чтобы убедиться, что скрипты в пользовательских каталогах не запускаются в группе www-data.
Взгляните на мод Apache2, mod_userdir для стандартного подхода к пользовательским веб-каталогам.
Что касается доступа к git ...
Вы разрешаете пользователю apache иметь доступ только для чтения к соответствующим репозиториям git. Потом периодически бегаешь git pull ...
(например, через cron) для обновления веб-сервера. Это означает, что вам вообще не нужно беспокоиться о разрешениях в файловой системе - все файлы принадлежат пользователю Apache; никто другой не имеет права записи.
Это важно: пользователь git не имеет права записи в каталоги Apache. Пользователь apache запускает git pull
работа и подключение к вашему серверу git через ssh (даже если он работает на том же хосте).
Если вы хотите, чтобы обновление происходило автоматически, а не при опросе через cron, у вас может быть сценарий CGI, запускающий git pull
, а затем в вашем репозитории post-update
крючок, вы бы поместили что-то вроде:
curl http://www.example.com/trigger-post-update-script