svnserve, кажется, пишет файлы как root. Как я могу предоставить доступ к одному и тому же хранилищу через svnserve и apache?

Цель состоит в том, чтобы настроить Subversion с доступом к svnserve и apache / webdav.

Когда пользователи фиксируют через http / apache, файлы записываются в файловую систему и принадлежат пользователю apache.

Когда пользователи фиксируют через svn / svnserve, файлы записываются в файловую систему и принадлежат пользователю root.

Я попытался настроить apache как пользователь svnserve без улучшений:


cat /pathto/repo/conf/passwd
[users]
apache = XxXxXxX

 cat /pathto/repo/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd


[sasl]
use-sasl = false

svn: Commit failed (details follow):
svn: Can't move '/pathto/repo/db/txn-protorevs/1091-ux.rev' 
to '/pathto/repo/db/revs/1/1092': Permission denied

Действительно, root является владельцем каталога, я хотел apache.


ls -ld /pathto/repo/db/revs/1/
drwxr-s--- 2 root svn 4096 Jul 17 15:25 /pathto/repo/db/revs/1/

Сейчас я использую следующий обходной путь:


chown -R apache /pathto/repo/db/

У кого-нибудь есть чистое решение для запуска svnserve?

обновление 1: svnserve запускается как отдельная служба

обновление 2: Вот содержимое / etc / sysconfig / svnserve:


OPTIONS="--threads --root /pathto "

Обновление 3: Я согласен с JvO: использование http / apache / webdav в качестве единственной системы доступа было бы намного проще. К сожалению, стороннее программное обеспечение имеет только привязку svn: // и не привязку http: //.

обновление 4: модификация скрипта инициализации svnserve должна работать, но у кого-нибудь есть другая идея?

обновление 5: добавлена ​​награда: ищем элегантный обходной путь

2 ответа

Ясно, что ваш процесс svnserve выполняется от имени пользователя root. Поэтому измените конфигурацию, чтобы запускать этот процесс от имени какого-то непривилегированного пользователя (из вашего описания не совсем ясно, как запускается svnserve; это может быть xinetd или что-то еще).

С точки зрения безопасности, лучший подход IMO состоит в том, чтобы добавить как apache, так и пользователя snvserve в общую группу (например, 'svn') и изменить разрешения в вашем репозитории на drwxrws --- (то есть разрешения группы являются "липкими")

Вы должны быть в состоянии изменить скрипт запуска svnserv для запуска от имени другого пользователя. взгляните на https://gist.github.com/dexterbt1/905615 с соответствующей частью

start() {
        echo -n $"Starting $desc ($prog): "
    daemon --user $USER $prog -d $OPTIONS
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
    echo
}

и тогда вы просто сможете установить USER в /etc/sysconfig/subversion пользователю, который вы хотели бы запустить как. Я также хотел бы повторить предложение @JVQ о работе в качестве пользователя с общей группой (т. Е. Создать пользователя SVN, с группой SVN заставить демона работать от имени пользователя SVN, а затем добавить пользователя Apache в группу SVN).

Другие вопросы по тегам