Как я могу настроить разрешения в Linux, чтобы два пользователя могли обновлять одну и ту же рабочую копию SVN на сервере?
-
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, и у меня никогда не возникало таких проблем.