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

Правильные разрешения Subversion с использованием HTTP и авторизации репозитория с пользователями Linux

Извините за этот «глупый» вопрос, но я действительно не могу найти решение в Интернете. Пожалуйста, помогите мне.

Я использую Subversion на сервере Linux, чтобы контролировать версии файлов проекта веб-сайта, который я поддерживаю.

Это моя конфигурация:

Папка проекта (рабочая копия репозитория на сервере, для доступа к проекту и просмотра веб-сайта в браузере - Apache указывает на этот каталог как DocumentRoot):

/var/projects/prj

Папка репозитория:

/var/repo/prjrepo

Когда я установил SVN (apt-get install subversion libapache2-svn), он не создавал ни подрывной деятельности пользователя, ни подрывной деятельности группы. Я не могу понять почему.

Я использую TortoiseSVN в Windows для проверки / обновления / фиксации.

Я использую HTTP для подключения к репозиториям со списком авторизованных пользователей:

http://1.2.3.4/svn/prjrepo

Список пользователей, авторизованных в репозитории, сохраняется в файле htpasswd со списком пользователей и их паролями MD5.

Конечно, Apache работает как www-data.

Папка prj принадлежит root: root, а остальные имеют только rx-доступ к файлам, за исключением тех каталогов, в которые www-data необходимо записать (например, загрузка файлов).

Папка репозитория принадлежит пользователю и группе svn: svn, которую я создал, но, возможно, это бесполезно. Разрешения - это rwx для пользователя и для группы и ничего для других. Кроме того, я установил g + s для всех папок, чтобы группа svn всегда была владельцем всех новых файлов.

Проблема в том, что когда я фиксирую файл в репозитории, он сообщает, что он не прошел из-за «отказано в разрешении». Я могу понять, почему: папка репозитория принадлежит svn: svn, но Tortoise отправляет HTTP-запрос на сервер, когда он фиксируется. HTTP-запросы выполняются как www-данные, которые, конечно, не имеют прав доступа к репозиторию.

Я также добавил действие после фиксации, чтобы обновлять рабочую копию (папку prj) при каждой фиксации. Если я изменю группу владельцев репозитория на www-data, Tortoise сможет выполнить фиксацию, но, конечно, действие после фиксации происходит с ошибкой, потому что www-data не может записывать ВСЕ каталоги и файлы в папке prj. И это правильно (www-data не может записывать файлы, которые нужно только читать - это Apache, это веб-сайт…).

Итак: я действительно не могу понять, как правильно настроить разрешения для папок, чтобы все работало правильно. Помните, что www-data НЕ ДОЛЖЕН иметь доступ на запись к prj, потому что он должен только читать эти файлы (за исключением некоторых папок, например, той, которая используется для загрузки файлов).

Другой вопрос: теперь Apache настроен так, чтобы разрешать доступ к репозиторию только тем пользователям, которые определены в определенном файле htpasswd, созданном для этой цели (см. Выше). Есть ли способ сделать репозиторий доступным для некоторых пользователей LINUX, не определяя новых пользователей только для доступа к репозиторию? Это возможно? Как?

Если вы используете опцию DAV для подрывной деятельности, вам необходимо предоставить веб-серверу доступ к репозиторию. Это может быть так же просто, как изменить все файлы / каталоги в репозитории, чтобы они принадлежали www-data.

Если вы хотите, чтобы ваше действие после фиксации делало что-то полезное, вам, вероятно, нужно взглянуть на настройку sudo без пароля для конкретных сценариев / команд, которые необходимо выполнять при работе как www-data. Итак, в вашем посткомандном сценарии у вас может быть что-то вроде

sudo bash -c 'cd /var/projects/prj ; svn update'