Извините за этот «глупый» вопрос, но я действительно не могу найти решение в Интернете. Пожалуйста, помогите мне.
Я использую 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'