Назад | Перейти на главную страницу

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

Цель состоит в том, чтобы настроить подрывную деятельность с доступом как 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: Добавлена ​​награда: ищем элегантный обходной путь

Очевидно, что ваш процесс 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)