Secure CVS Pserver Mini-HOWTO
Автор (C): Morgon Kanter
Переводчик (С): Иван Песин
Редактор (С): Александр Куприн
История редакций | ||
---|---|---|
Пересмотр 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".
Протокол CVS Pserver является по определению небезопасным. Среди прочего, пароли в нём передаются открытым текстом, обеспечивая нежелательность его использования во многих случаях. Однако, при этом CVS Pserver очень хорош для организации анонимного доступа к репозиторию CVS.
В этом документе мы познакомимся с настройкой репозитория CVS (не пересекаясь при этом с документом CVS HOWTO) и настройкой "jail-окружения" для Pserver. Кроме того, мы поговорим об использовании SSH для доступа разработчиков к репозиторию.
Для настройки безопасного сервера Pserver вам понадобятся следующие пакеты:
Конечно, вам будет нужен CVS для того, чтобы с ним работать. Его можно скачать здесь.
cvsd -- это программа, выполняющая CVS Pserver в "jail-окружении". Ее можно загрузить отсюда.
Если вы хотите обеспечить безопасный доступ к репозиторию для разработчиков, вам будет необходимо иметь запущенный SSH-сервер. Однако, настройка такого сервера не входит в рамки данного документа. За информацией обратитесь к документу CVS-RCS howto.
Если вы собираетесь компилировать утилиты, следуйте нижеприведенным инструкциям. Если же вы загрузили готовые программы, переходите сразу к разделу 3..
После загрузки исходных кодов пакета CVS, их нужно разархивировать и перейти
в созданный каталог. Префикс каталогов по умолчанию при сборке равен /usr/local; в примере мы изменили его на /usr. Возможно, вы захотите изменить значение
параметра mandir и разместить страницы руководства там,
где вам удобно (по умолчанию, этот параметр равен PREFIX/man).
(Прим.ред. Например, /usr/share/man)
$ ./configure --prefix=/usr $ make # make install |
При сборке этой программы есть несколько ключей, на которые следует обратить внимание. Префикс по умолчанию использует значение /usr/local, которое в этом документе мы меняем на /usr. Кроме того, стоит изменить значение ключа sysconfdir на /etc. Это место, где обычно хранятся конфигурационные файлы системы. Если необходимо, можно изменить и параметр mandir так, как вам удобно.
$ ./configure --prefix=/usr --sysconfdir=/etc $ make # make install |
Давайте перейдем к настройке этих замечательных утилит.
Теперь, когда мы собрали CVS и cvsd, давайте их настроим.
Перед тем, как мы начнем, я очень рекомендую вам прочесть руководство по 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.
Теперь, когда у нас настроен CVSROOT, нам нужно скопировать соответствующие библиотеки и файлы для cvsd, который будет запускать Pserver в "jail-окружении".
! |
Если вы установили cvsd из пакетов, например RPM, всё нижеописанное, возможно, уже выполнено для вас. В этом случае переходите к следующему шагу. Иначе... |
$ cvsd-buildroot /cvs $ mkdir -p var/lock $ adduser cvsd $ addgroup cvsd |
К счастью, cvsd поставляется со скриптом cvsd-buildroot, так что нам не нужно копировать все вручную. Однако, следует отредактировать файл /cvs/etc/passwd и удалить из него ненужные записи, в частности, пользователя "root".
Настройка по умолчанию, указанная в файле /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 |
Вернемся к настройке 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!
Есть небольшая деталь, явно не попадающая в рамки этого документа, однако стоящая упоминания. Это возможность изменять каталог, в котором 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 |
Вот и всё!
Pserver не самый хороший способ обеспечения доступа к репозитроию для разработчиков. Лучше применять метод ext с утилитой ssh. Просто добавьте разработчиков в список пользователей и файл WRITERS, после чего они могут выполнить следующее:
$ export CVS_RSH='/usr/bin/ssh' $ cvs -d :ext:username@server.hostname:/cvs/root login |
Это намного более безопасный способ доступа для разработчиков к репозиторию.
Есть и другой способ организации анонимного доступа к CVS. Если у вас есть http сервер с установленным языком Python, можно использовать набор CGI-скриптов, под названием viewcvs. Они позволяют получить доступ к репозиторию CVS по веб и могут генерировать "тарболы" для загрузки пользователями.
Существует набор скриптов на Perl, также носящих имя cvsweb, но Viewcvs более продуман и предпочтителен (по крайней мере, для меня).
CVSGrab -- это пользовательская утилита для загрузки CVS-репозитория через интерфейс ViewCVS. Это очень удобно, когда вы находитесь за корпоративным брандмауэром, блокирующим Pserver, поскольку вы можете получить репозиторий по стандартному протоколу HTTP. Единственная проблема возникает тогда, когда репозиторий не имеет интерфейса ViewCVS. Но сейчас большинство репозиториев свободного программного обеспечения имеют веб-странички, и те немногие, которые ещё используют cvsweb начинают мигрировать на ViewCVS.
CVSGrab написан на Java, что может отбивать охоту работать с ним у некоторых людей (например у меня). Но, похоже, что он неплохо компилируется GCJ, Java интерфейсом к GCC.
CVSGrab -- утилита идущая рука об руку с ViewCVS. Она является пользовательской утилитой, то есть не стоит ожидать, что системный администратор или администратор репозитория будет её устанавливать или настраивать.
Данный документ написан Морганом Кантером (Morgon Kanter), с которым можно связаться по адресу <morgon AT surgo DOT net>, публичный ключ находится по адресу 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