CVS через SSH

Материал из Belgorod Linux User Group - Белгород

Перейти к: навигация, поиск

CVS через SSH

Настройка системы для работы с CVS по защищенному протоколу SSH.

Итак, у вас есть сервер и необходима работа пользователей через SSH, причем у пользователей должно быть как можно меньше прав в системе (отсутствие пароля, отсутствие шелла).

Проще всего это реализовать SSH авторизацией по ключу (RSA, DSA), и сделать враппер на шелл, чтобы не давать пользователям bash.

Приступим.

Содержание

Авторизация по SSH

Создаем пару ключей, как описано тут: SSH авторизация по ключу и не забываем добавить публичный ключ на CVS сервер в файл authorized_keys домашней директории пользователя:

cat ./cvsuser.pub >> /home/cvsuser/.ssh/authorized_keys
chown -R cvsuser /home/cvsuser/.ssh
chmod 700 /home/cvsuser/.ssh/
chmod 600 /home/cvsuser/.ssh/authorized_keys

Убераем пароль

Если пара ключей уже работоспособна - можно смело убирать у пользователя пароль, для этого в файле /etc/shadow достаточно заменить хеш пользовательского пароля на символ *. Пример (cat /etc/shadow) :

cvsuser:*:13783:0:99999:7:::

Враппер на shell

Чтобы пользователям не давать шелл, можно воспользоваться такой оберткой:

#! /bin/sh
# $Id: cvsshell,v 1.1 2001/02/28 13:12:54 an Exp $
# a wrapper for cvs, to allow users only to run cvs
# set this up as the users shell

arg2=`echo $@ | awk '{print $2}'`

if [ -z "$SSH_CLIENT" ]
then
      echo "This shell is only usable with ssh."
      exit 1
fi

case $arg2 in
cvs)
      cat | /bin/sh -c "cvs server"
      ;;
*)
      echo "Sorry. You only have permission to use CVS."
      exit 1
      ;;
esac

Этот код необходимо сохранить на нашем CVS сервере допустим в файл /usr/local/bin/cvsshell, дать ему права на запуск группе cvs-пользователей, а для их аккаунтов прописать этот скрипт как шелл. Пример (cat /etc/passwd):

cvsuser:x:599:1001:CVS user:/home/cvsuser/:/usr/local/bin/cvsshell

Теперь можно проверить, что шелла у этого пользователя нет:

ssh cvsuser@cvs.host.my

должно выдать:

Sorry. You only have permission to use CVS.

Настройка клиентов

Итак, у клиентов мы имеем приватный ключ и клиентскую cvs программу. Настраиваем последнюю.

WinCVS (Windows)

Рекомендуем версию WinCVS не моложе 2.0

Remoute -> Checkout 

нажимаем на кнопку "..." и там выбираем тип соединения: ssh В строке адреса пишем что-то на подобие:

cvsuser@cvs.host.my:/cvsroot

В параметре Private key указываем путь к приватному ключу.

Внимание! Рекомендуется хранить приватный ключ в надежном месте (на внешнем носителе USB, на зашифрованном томе и т.п.).

LinCVS (Linux)

Config -> Profiles -> Add

В нем

User: cvsuser
Server: cvs.host.my
Repository: /cvsroot
Acesss : Remote Shell
SSH Client Presets: use ssh

Далее можно проверить:

Project -> Checkout ...

и выбрать созданный профиль

CVS консольный (Linux)

Тут наш приватный ключ находится в ~/.ssh/id_rsa (id_dsa), по этому сразу пишем наш CVSROOT:

export CVSROOT=:ext:cvsuser@cvs.host.my:/cvsroot

и смело проверяем:

cvs co module_name

Если выдает что-то типа:

connect to address 111.222.333.444: Connection refused
Trying krb4 rsh...
connect to address 111.222.333.444: Connection refused
trying normal rsh (/usr/bin/rsh)

необходимо сделать:

sudo su -
rm -f /usr/kerberos/rsh
ln -s /usr/bin/ssh /usr/kerberos/rsh
rm -f /usr/bin/rsh
ln -s /usr/bin/ssh /usr/bin/rsk
Личные инструменты