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

/ var / www управление правами

У меня есть сервер с несколькими пользователями, и я хотел бы разрешить некоторым из них хранить на нем веб-страницы. Таким образом, я создал для них подкаталоги / 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