Я использую snv + ssh с аутентификацией на основе ключа. Прямо сейчас, чтобы любой из моих пользователей svn мог получить доступ к репозиторию через Subversion, я должен сделать файлы репо доступными для чтения и записи в файловой системе для этих пользователей.
Я хочу запретить пользователям удалять базу данных репо при входе на сервер через ssh, но при этом иметь возможность проверять и фиксировать код.
Мысли о том, как это сделать?
В общей пользовательской среде я бы рекомендовал настроить настоящий сервер Subversion (либо svnserve
или через Apache). В этой среде отдельным пользователям вообще не нужен доступ к файлам репозитория, потому что весь доступ к файлам осуществляется под учетной записью пользователя серверного процесса.
В книге о Subversion есть раздел о Выбор конфигурации сервера что может помочь. Из этого раздела (выделено мной):
Если у вас есть существующая инфраструктура, которая в значительной степени основана на учетных записях SSH, и если у ваших пользователей уже есть системные учетные записи на вашем сервере, имеет смысл развернуть решение svnserve-over-SSH. В противном случае мы не рекомендуем этот вариант широкой публике. Обычно считается более безопасным, если ваши пользователи получают доступ к репозиторию через (воображаемые) учетные записи, управляемые svnserve или Apache, а не через полноценные системные учетные записи.
Для доступа к URL-адресу svn + ssh клиент svn запускает экземпляр svnserve, используя «ssh -q user @ host svnserve -t», и общается с этим экземпляром через stdin / stdout.
Если вашим пользователям нужен нормальный доступ по ssh, вы все равно можете запретить им доступ к репозиторию, ограничив доступ одним пользователем. (chown -R svnserve: репозиторий svnserve; chmod -R g-rwx, репо o-rwx) и заменив команду svnserve этим setuid / setgid программа-оболочка svnserve.
На этом сайте есть несколько интересных приемов: http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks
Если у вас ничего из этого не работает, может быть, обходной путь поможет? Вы можете делать резервную копию репозитория каждый раз, когда кто-то что-то фиксирует, добавляя что-то вроде этого в крючки фиксации: sudo rsync -a / my / repo / path / my / closed / path /
Я вижу два возможных направления решения этой проблемы:
Я согласен с Грегом и Олафом - переходите на https-доступ. Я использую такую установку довольно давно и не вижу в ней никаких недостатков.
вы получите дополнительное преимущество детализированного управления доступом в репозитории - так что вы можете сделать некоторые его части доступными только для чтения, а некоторые полностью недоступными для выбранных пользователей.