Как я могу настроить разрешения в Linux, чтобы два пользователя могли обновлять одну и ту же рабочую копию SVN на сервере?

StackOverflow https://stackoverflow.com/questions/164597

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Если я рекурсивно изменю владельца /server на austin:developers, он сможет выполнить команду просто отлично, но тогда "ричард" не сможет.

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

/usr/bin/svn update /server/staging

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

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

Это было полезно?

Решение

Идентификатор группы каталогов

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

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

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

chmod g+s spcprjdir

Список каталогов каталога " spcprjdir "

drwxrwsr-x 2 kathy spcprj 1674 Sep 17 1999 spcprjdir

Символ 's' 'вместо бита выполнения в разрешениях группы приводит к тому, что все файлы записываются в каталог " spcprjdir " принадлежать к группе "spcprj" ,

edit: source = Файлы Linux и разрешения для файлов

Другие советы

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

в вашем репозитории 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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top