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).