2008-10-02 4 views
4

На моем сервере установлены Subversion и Apache, а веб-каталог Apache также является рабочей копией Subversion. Причина этого в том, что простая команда svn update /server/staging будет развертывать последний источник на промежуточном сервере.Как настроить разрешения в Linux, чтобы два пользователя могли обновить рабочую копию SVN на сервере?

Apache общедоступного веб-каталог: /server/staging- (Это рабочая копия SVN.)

У меня есть два пользователя на моем сервере, 'ричарда' и 'Остин. Они оба являются членами группы разработчиков. Я рекурсивно устанавливаю разрешения в каталоге/server для richard: developers, используя «sudo chown -R richard: developers/server».

Затем я устанавливаю разрешения для чтения, записи и исполнения как для «богачей», так и для группы «разработчиков».

Итак, «austin» теперь должен использовать команду svn update /server/staging? Однако, когда он пытается, он получает ошибку:

svn: Can't open file '/server/staging/.svn/lock': Permission denied 

Если я рекурсивно изменить владелец/сервер Остин: разработчики, он может запустить команду просто отлично, но затем «ричард» не может.

Как исправить проблему? Я хочу создать крюк post-commit для автоматического развертывания промежуточного сайта, когда файлы будут зафиксированы, но я не вижу способа для этого работать для обоих пользователей. Крюк будет:

/usr/bin/svn update /server/staging 

Используя ту же учетную запись пользователя, для них обоих не будет действительно приемлемое решение, и я не знаю ни одного способа выполнить команду внутри крючка, как «корень» ,

Любая помощь приветствуется!

+0

Если бы я был вами, я бы сделал много проверок `ls -l`, чтобы убедиться, что разрешения выглядят так, как вы думаете, что они делают. Всегда возможно, что вы ошиблись в том, что chmod или набрали 755 вместо 775. Если вы уже это сделали, не было совершено никакого преступления - он просто никогда не боится дважды проверять! – 2008-10-02 21:06:24

+0

Полностью согласен, но похоже, что это не так. Фактический файл /server/staging/.svn/lock фактически не существует до тех пор, пока в subversion не произойдет что-то, поэтому мне интересно, просто ли это случай добавления конкретного пользователя в группу разработчиков. Спасибо за предложение. – rmh 2008-10-02 21:09:41

+0

Я не отправляю это как ответ, потому что я не уверен, но: Если richard и austin обращаются к нему через HTTP, а не через файловую систему, тогда необходимо добавить www-данные или соответствующее имя пользователя Apache group, так как он создает файл блокировки. – 2008-10-02 21:12:04

ответ

8

Каталог Set Group ID

Если setgid бит на записи каталога установлен, файлы в этом каталоге, будут иметь право собственности группы в качестве каталога, а не чем группы пользователя, создавшего файл.

Этот атрибут полезен, когда нескольким пользователям необходим доступ к определенным файлам. Если пользователи работают в каталоге с установленным атрибутом setgid, любые файлы, созданные в каталоге любым из пользователей, будут иметь разрешение группы. Например, администратор может создать группу под названием spcprj и добавить пользователей Kathy и Mark в группу spcprj. Каталог spcprjdir может быть создан с установленным набором бит GID и Kathy и Mark, хотя в разных первичных группах может работать в каталоге и иметь полный доступ ко всем файлам в этом каталоге, но все же не иметь доступа к файлам в основной группе друг друга ,

Следующая команда установит бит GID на каталог:

chmod g+s spcprjdir 

каталог листинг директории "spcprjdir":

drwxrwsr-x 2 kathy spcprj 1674 Sep 17 1999 spcprjdir 

«S '' в месте выполнения бит в групповых разрешениях приводит к тому, что все файлы, записанные в каталог «spcprjdir», принадлежат к группе «spcprj».

Редактировать: source = Linux Files and File Permissions

0

Я бы установил svnserve, который является простым сервером Subversion, используя протокол svn://. Вы можете настроить это так, чтобы он выполнялся под собственной учетной записью пользователя, тогда доступ к репозиторию будет доступен только одному пользователю. Тогда этот пользователь мог бы иметь правильные привилегии для запуска svn update /server/staging на крюке после фиксации.

0

В вашем реестре svn вы можете найти каталог «conf», в котором вы устанавливаете разрешения. у вас есть 3 файла там:

  • AuthZ
  • PASSWD
  • svnserve.conf

вы установили в файле AuthZ, какие пользователи имеют какой-то доступ для каждого пользователя или группы. Вы установили группы там, SVN группы не Linux группы пользователей (хэшированные строки являются комментариями):

[groups] 
# harry_and_sally = harry,sally 
projectgroup = richard,austin 

# [/foo/bar] 
# harry = rw -- user harry has read/write access 
# * = -- everybody have no access 

# [repository:/baz/fuz] 
# @harry_and_sally = rw -- harry_and_sally group members have read/write access 
# * = r -- everyone has read access 

[/server/staging] 
@projectgroup = rw 
* = r 

работа вокруг этого примера и установить конфигурации. в файле 'passwd' вы настраиваете пароли пользователей. выполнить

cat passwd 

Вы получите комментарий к файлу с объяснением, как его настроить.

0

Я использую WebDAV - все обновления SVN и фиксации обрабатываются через apache, и у меня таких проблем нет.