Цель состоит в том, чтобы настроить подрывную деятельность с доступом как 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)