Secure CVS Pserver Mini-HOWTO

Этот документ поможет вам настроить безопасный CVS Pserver для анонимного доступа к репозиторию CVS.

[Морган Кантер (morgon@surgo.net). Перевод Иван Песин (ipesin@post.Lviv.UA)]

Secure CVS Pserver Mini-HOWTO

Морган Кантер

Февраль 2003

Перевод на русский © 2003: Иван Песин (ipesin at post.Lviv.UA)

История редакций
Пересмотр 1.1 2003-03-21 Пересмотрено: mk
Исправлена неверная ссылка и добавлен раздел о CVSGrab
Пересмотр 1.0 2003-02-01 Пересмотрено: mk
Начальная редакция, проверена LDP.

Этот документ поможет вам настроить безопасный CVS Pserver для анонимного доступа к репозиторию CVS.

Разрешается копировать, распространять и/или изменять этот документ, как оговорено в GNU Free Documentation License, версии 1.2 или более поздней, опубликованной фондом свободного ПО (Free Software Foundation); без неизменяемых, начальных и конечных разделов. Копия лицензии приведена в разделе 6, озаглавленном "GNU Free Documentation License".


1. Введение

Протокол CVS Pserver является по определению небезопасным. Среди прочего, пароли в нём передаются открытым текстом, обеспечивая нежелательность его использования во многих случаях. Однако, при этом CVS Pserver очень хорош для организации анонимного доступа к репозиторию CVS.

В этом документе мы познакомимся с настройкой репозитория CVS (не пересекаясь при этом с документом CVS HOWTO) и настройкой "jail-окружения" для Pserver. Кроме того, мы поговорим об использовании SSH для доступа разработчиков к репозиторию.


2. Получение утилит

2.1. Что вам нужно

Для настройки безопасного сервера Pserver вам понадобятся следующие пакеты:

CVS

Конечно, вам будет нужен CVS для того, чтобы с ним работать. Его можно скачать здесь.

cvsd

cvsd -- это программа, выполняющая CVS Pserver в "jail-окружении". Ее можно загрузить отсюда.

SSHd

Если вы хотите обеспечить безопасный доступ к репозиторию для разработчиков, вам будет необходимо иметь запущенный SSH-сервер. Однако, настройка такого сервера не входит в рамки данного документа. За информацией обратитесь к документу CVS-RCS howto.


2.2. Компиляция утилит

Если вы собираетесь компилировать утилиты, следуйте нижеприведенным инструкциям. Если же вы загрузили готовые программы, переходите сразу к разделу 3..


2.2.1. Компиляция CVS

После загрузки исходных кодов пакета CVS, их нужно разархивировать и перейти в созданный каталог. Префикс каталогов по умолчанию при сборке равен /usr/local; в примере мы изменили его на /usr. Возможно, вы захотите изменить значение параметра mandir и разместить страницы руководства там, где вам удобно (по умолчанию, этот параметр равен PREFIX/man).
(Прим.ред. Например, /usr/share/man)

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

2.2.2. Компиляция cvsd

При сборке этой программы есть несколько ключей, на которые следует обратить внимание. Префикс по умолчанию использует значение /usr/local, которое в этом документе мы меняем на /usr. Кроме того, стоит изменить значение ключа sysconfdir на /etc. Это место, где обычно хранятся конфигурационные файлы системы. Если необходимо, можно изменить и параметр mandir так, как вам удобно.

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

Давайте перейдем к настройке этих замечательных утилит.


3. Настройка утилит

Теперь, когда мы собрали CVS и cvsd, давайте их настроим.


3.1. Создание репозитория CVS

Перед тем, как мы начнем, я очень рекомендую вам прочесть руководство по CVS, которое входит в пакет. Если у вас установлена программа просмотра info-файлов или пакет texinfo, руководство можно посмотреть командой info cvs.

В первую очередь, определитесь, где у вас будет размещен репозиторий. У дистрибутива Debian по умолчанию это каталог /var/lib/cvs. Мой же репозиторий размещен на небольшом отдельном разделе в каталоге /cvs/root. Как сделаеет вы, зависит от вас и ваших нужд.

Важно

Убедитесь, что репозиторий будет распологаться в отдельном пустом (по началу) каталоге! Например, если вы будете работать с каталогом /var/lib/cvs, поместите репозиторий в каталог /var/lib/cvs/root (измените имя последнего каталога на то, что вам по душе). Это нужно, т.к. мы будем использовать "jail-окружение" для Pserver!


После того, как вы определитесь с расположением своего репозитория и создадите, если нужно, соответствующий раздел, выполните команду (мы полагаем, что репозиторий помещен в каталог /cvs/root):

$ cvs -d /cvs/root init
  

Результатом выполнения данной команды будет инициализация репозитория и настройка необходимых файлов CVSROOT.


3.2. Настройка "jail-окружения"

Теперь, когда у нас настроен CVSROOT, нам нужно скопировать соответствующие библиотеки и файлы для cvsd, который будет запускать Pserver в "jail-окружении".


3.2.1. Перенос необходимых файлов

Примечание

Если вы установили cvsd из пакетов, например RPM, всё нижеописанное, возможно, уже выполнено для вас. В этом случае переходите к следующему шагу. Иначе...

Измените ваш текущий каталог на /cvs и введите команды:

$ cvsd-buildroot /cvs
$ mkdir -p var/lock
$ adduser cvsd
$ addgroup cvsd
   

К счастью, cvsd поставляется со скриптом cvsd-buildroot, так что нам не нужно копировать все вручную. Однако, следует отредактировать файл /cvs/etc/passwd и удалить из него ненужные записи, в частности, пользователя "root".


3.2.2. Настройка cvsd

Настройка по умолчанию, указанная в файле /etc/cvsd/cvsd.conf вполне работоспособна, но всё-таки её можно улучшить. Убедитесь, что значение RootJail соответствует действительному, а путь к репозиторию указан относительно "jail-окружения". Установите значение maxconnections на подходящее для вас и удостоверьтесь, что параметры Uid и Gid равны cvsd. Если у вас нет готового файла cvsd.conf, возьмите мой:

Пример 1. Мой cvsd.conf

Uid cvsd
Gid cvsd
PidFile /var/run/cvsd.pid
RootJail /cvs
MaxConnections 10
Nice 1
Listen * 2401
Repos /root
Limit coredumpsize 0
    

3.3. Добавление анонимного доступа

Вернемся к настройке CVS, но не волнуйтесь, мы уже почти всё сделали! Нужно отредактировать несколько файлов, чтобы разрешить анонимный доступ. Для начала, убедившись предварительно, что вы не находитесь в каталоге репозитория CVS, получите модуль CVSROOT командами:

# cvs -d /cvs/root checkout CVSROOT
# cd CVSROOT
  

Теперь отредактируйте файл READERS. Если его нет -- создайте его и добавьте в него строку "anonymous".

Важно

В конце файла ДОЛЖНА присутствовать пустая строка!

Файл READERS содержит список пользователей имеющих доступ к репозиторию CVS только на чтение. Пользователи с правом записи приведены в файле WRITERS. За детальной информацией обращайтесь к руководству по cvs[1] .

Зафиксируйте изменения. Мы полагаем, что текущий каталог -- это CVSROOT. Если это не так, не выполняйте команды cd.

# cd ../
# cvs -d /cvs/root commit
  

Вы должны получить сообщение, Re-building administrative files, означающее что всё в порядке.

Теперь последний шаг и всё готово! Выполните следующую команду, а в ответ на приглашение введите пароль, просто нажав ENTER:

# cvsd-passwd /cvs/root anonymous
  

Поздравляю! Вы настроили безопасный анонимный доступ к репозиторию CVS!


3.4. Ещё не всё! Изменение расположения файлов блокировок

Есть небольшая деталь, явно не попадающая в рамки этого документа, однако стоящая упоминания. Это возможность изменять каталог, в котором Pserver будет размещать файлы блокировок.

Обычно, Pserver создает файлы блокировок в тоже каталоге, над которым выполняется операция "check out". Но это может нарушить безопасность системы. Вернемся к шагу, где мы создавали "jail-окружение" для cvsd: мы также создали каталог var/lock. Тут-то мы и разместим файлы блокировок.

Возьмите за основу следующий пример, заменяя каталог /cvs на выбранный вами, а var на каталог, где будут размещаться файлы блокировок. У меня они помещаются в каталог var/lock, а поскольку кроме этого в каталоге var ничего нет, можно использовать команду chown -R. Ну и конечно, если нужно замените пользователя и группу cvsd на использующиеся у вас значения

# cd /cvs
# chown -R cvsd:cvsd var
# chmod -R 775 var
# cd
# cvs -d /cvs/root checkout CVSROOT
# cd CVSROOT
  

Теперь нужно отредактировать файл config. Измените значение параметра каталога блокировок на нужное, в нашем случае -- это /var/lock.

Важно

Заметьте, что это относится как к Pserver из "jail-окружения", ТАК И К МЕТОДУ РАБОТЫ ЧЕРЕЗ SSH! Убедитесь, что этот каталог не только существует, но и доступен на запись, относительно корневого каталога. Вот почему я выбрал путь /var/lock -- он отвечает всем этим требованиям.

Теперь зафиксируйте изменения:

# cd ../
# cvs -d /cvs/root commit
  

Вот и всё!


4. Альтернативы Pserver

4.1. Доступ для разработчиков

Pserver не самый хороший способ обеспечения доступа к репозитроию для разработчиков. Лучше применять метод ext с утилитой ssh. Просто добавьте разработчиков в список пользователей и файл WRITERS, после чего они могут выполнить следующее:

$ export CVS_RSH='/usr/bin/ssh'
$ cvs -d :ext:username@server.hostname:/cvs/root login
  

Это намного более безопасный способ доступа для разработчиков к репозиторию.


4.2. Анонимный доступ к CVS по http

Есть и другой способ организации анонимного доступа к CVS. Если у вас есть http сервер с установленным языком Python, можно использовать набор CGI-скриптов, под названием viewcvs. Они позволяют получить доступ к репозиторию CVS по веб и могут генерировать "тарболы" для загрузки пользователями.

Существует набор скриптов на Perl, также носящих имя cvsweb, но Viewcvs более продуман и предпочтителен (по крайней мере, для меня).


4.3. CVSGrab

CVSGrab -- это пользовательская утилита для загрузки CVS-репозитория через интерфейс ViewCVS. Это очень удобно, когда вы находитесь за корпоративным брандмауэром, блокирующим Pserver, поскольку вы можете получить репозиторий по стандартному протоколу HTTP. Единственная проблема возникает тогда, когда репозиторий не имеет интерфейса ViewCVS. Но сейчас большинство репозиториев свободного программного обеспечения имеют веб-странички, и те немногие, которые ещё используют cvsweb начинают мигрировать на ViewCVS.

CVSGrab написан на Java, что может отбивать охоту работать с ним у некоторых людей (например у меня). Но, похоже, что он неплохо компилируется GCJ, Java интерфейсом к GCC.

CVSGrab -- утилита идущая рука об руку с ViewCVS. Она является пользовательской утилитой, то есть не стоит ожидать, что системный администратор или администратор репозитория будет её устанавливать или настраивать.


5. Благодарности

Данный документ написан Морганом Кантером (Morgon Kanter), с которым можно связаться по адресу , публичный ключ находится по адресу http://www.surgo.net/pubkey.asc. Присылайте замечания по данному документу, я обязательно всё исправлю при первой же возможности.

Я выражаю благодарность всем людям, отдававшим своё время проекту CVS на протяжении многих лет, создателям Viewcvs и вдохновившим их создателей cvsweb.

Хочу поблагодарить Табата Персада (Tabatha Persad) за пересмотр и помощь в редактировании этого монстра, равно как и за то, что он меня терпел. Спасибо!

Кроме того, благодарю всех принявших участие в обсуждении этого документа по электронной почте. Спасибо вам, Y Giridhar Appaji Nag и Pasi Hirvonen!


6. GNU Free Documentation License

GNU Free Documentation License

Примечания

[1]

info cvs, если у вас в системе установлена программа просмотра файлов info


Copyright (c) 2003, Morgon Kanter


Оригинал статьи можно найти по адресу: http://gazette.linux.ru.net/rus/articles/secure_cvs_pserver_mini-howto.html

[ опубликовано 15/02/2004 ]

Морган Кантер (morgon@surgo.net). Перевод Иван Песин (ipesin@post.Lviv.UA) - Secure CVS Pserver Mini-HOWTO   Версия для печати