18.14. Построение анонимного репозитория CVS

Проблема

Требуется создать общедоступный репозиторий CVS, чтобы любой желающий мог загрузить хранящуюся в нём информацию. При этом анонимным пользователям должен быть разрешён доступ только к подкаталогам (не выше), с возможностью только чтения содержимого каталогов и файлов, но не записи.

Решение

Настройте CVS Pserver. Вам потребуется cvsd, рабочий сервер CVS и OpenSSH для работы сервера CVS в режиме демона. Программа cvsd — это дополнение для запуска CVS в режиме Pserver. Она доступна для Debian в тестовой версии и как tar-архив с исходными текстами. Единственные доступные пакеты RPM на момент написания слишком устарели (версия 0.6-2). Этот раздел предназначен для версии 1.0.2. Если не удаётся найти более новый пакет RPM, собирайте cvsd по исходным текстам. Исходные тексты можно загрузить с [домашней страницы cvsd](http://tiefighter.et.tude.nl/~arthur/cvsd).

Установка по исходным текстам:

$ ./configure --prefix=/usr --sysconfdir=/etc
# make install

Создайте пользователя и группу cvsd:

# groupadd cvsd
# useradd -d /cvs/home -s /bin/false -c "cvs pserver daemon" -g cvsd -u 110 cvsd

Далее создайте корневой каталог репозитория и «песочницу» (подкаталог пустого каталога):

# mkdir /cvs
# cd /cvs
# cvsd-buildroot /cvs

Назначьте владельцем пользователя и группу cvsd и задайте соответствующие разрешения:

# chown -R cvsd:cvsd /cvs
# chmod 775 /cvs

Инициализируйте новый репозиторий cvsd:

# cvs -d /cvs/home init

Внесите изменения в файл /etc/cvsd/cvsd.conf:

Откройте анонимный доступ к репозиторию. Создайте с правами root каталог «песочницу» и выполните команду checkout для каталога CVSROOT:

# mkdir /sandbox
# cd /sandbox
# cvs -d /cvs/home checkout CVSROOT
# cd CVSROOT

Создайте файл CVSROOT/readers и добавьте пользователя guest (запишите его имя на отдельной строке). Убедитесь, что файл заканчивается парой пустых строк. Затем добавьте файл в репозиторий командами add и update:

# cvs -d /cvs/home update
# cvs -d /cvs/home add readers
# cd /sandbox
# cvs -d /cvs/home commit -m 'pserver guest access' CVSROOT/readers

Наконец, назначьте пользователю guest пустой пароль:

# cvsd-passwd /cvs/home guest

При запросе пароля просто нажимайте Enter, пока запрос не исчезнет. Теперь запустите cvsd и подключитесь как обычный пользователь:

# /etc/init.d/cvsd start
$ cvs -d:pserver:guest:@localhost:/home login
Logging in to :pserver:guest@localhost:2401/home

При использовании двоеточия после guest команда не будет запрашивать пустой пароль. Используйте /home вместо /cvs/home.

Комментарий

Для корректного назначения прав доступа очень важно выполнить все действия в указанном порядке. cvsd должна обладать правами на файловую систему внутри /cvs, но не на каталог CVSROOT.

Новый общедоступный репозиторий заполняется обычным способом. Включите в группу cvsd авторизованных пользователей, которым разрешено импортировать файлы локально или через SSH.

Не используйте CVS Pserver для других целей, кроме анонимного общего доступа, и не разрешайте заносить файлы через Pserver, поскольку аутентификация проводится в простом текстовом формате. Чтобы исключить запись через Pserver, создайте пустой файл CVSROOT/writers.

См. также

Файлы Readme и FAQ в архиве исходных текстов; [домашняя страница cvsd](http://tiefighter.et.tude.nl/~arthur/cvsd); [домашняя страница CVS](https://www.cvshome.org).