Portál AbcLinuxu, 9. května 2024 05:11

CVS na dálku

14. 6. 2002 | Leoš Literák
Články - CVS na dálku  

Přinášíme vám krátký návod, jak zpřístupnit CVS pro vzdálený přístup.

Úvod

Velká část Open Source projektů využívá jako software na správu verzí CVS. Existují sice lepší alternativy, ale CVS je v této oblasti téměř standardem. Nainstalovat CVS není velký problém, v době RPM či PKG to zvládne každý. O něco složitější je situace, kdy chcete k CVS přistupovat vzdáleně. A touto tématikou se zabývá tento článek.

Existuje více způsobů, jak přistupovat vzdáleně k CVS. Jsou to přístup přes rsh, autentifikace přes heslo (pserver), CSSAPI a Kerberos. Rsh má smysl leda na uzavřené síti (třeba za firewallem), kde si všichni uživatelé navzájem věří. O něco lepším řešením je autentifikace uživatelů přes Kerberos, CVS zvládá jeho verzi 4. S nástupem verze 5 autoři vytvořili obecné rozhraní CSSAPI. Pro mé účely se však nejvíce hodí pserver. Je snadný na instalaci a konfiguraci a zároveň umožňuje vytvořit si virtuální uživatele či vymyslet existujícím uživatelům hesla platná jen pro CVS. Takže pokud útočník bude odposlouchávat vaši relaci, s CVS heslem váš server nenabourá.

Systémová část

První část konfigurace pserveru musíte provést jako root. Je třeba přidat do síťových služeb CVS. Do souboru /etc/services vložte tuto řádku:

cvspserver 2401/tcp

a pokud používáte démon inetd, pak do souboru /etc/inetd.conf tuto:

cvspserver stream  tcp nowait  root /usr/bin/cvs cvs -f --allow-root=/home/literakl/CVSROOT pserver

Moderní distribuce preferují démon xinetd, takže budeme muset vytvořit soubor /etc/xinetd.d/cvspserver:

service cvspserver
{
 disable = no
 socket_type = stream
 protocol    = tcp
 wait	     = no
 user	     = root
 server      = /usr/bin/cvs
 server_args = -f --allow-root=/home/literakl/CVSROOT pserver
}

V obou případech parametr --allow-root ukazuje na CVSROOT, který bude takto zpřístupněn přes pserver. Pokud máte více repozitářů, můžete jej použít vícekrát.

V tuto chvíli je třeba ještě restartovat inetd, respektive xinetd. Pod RedHatem a spol. spusťte

$ /etc/init.d/inet reload

respektive

$ /etc/init.d/xinetd reload

Nastavení CVSROOT

Nyní je třeba zinicializovat CVSROOT. Přihlásíme se jako uživatel vlastnící adresář CVSROOT, v tomto případě literakl a spustíme

$ cvs -d /home/literakl/CVSROOT init

Tím se nám vytvořil adresář /home/literakl/CVSROOT/CVSROOT obsahující spoustu administrativních souborů. Mezi nimi nám však chybí soubor passwd, který je určen právě pro vzdálený přístup. Jeho obsah je nápadně podobný systémovému souboru /etc/passwd. Každý řádek obsahuje jedno až tři políčka oddělené dvojtečkou. První políčko určuje přístupové jméno pro CVS. Tímto jménem se budete logovat do CVS. Druhé políčko určuje heslo zašifrované pomocí funkce crypt. A konečně poslední políčko určuje skutečného uživatele na systému. CVS bude provádět všechny změny jeho jménem.

Rozeberme si pravidla na praktickém příkladě:

$ cat /home/literakl/CVSROOT/CVSROOT/passwd
pub::pubcvs
literakl:HTRphPBvKJtjA:literakl
oazanon:TXiF1923PHrtI:oazanon

První řádek určuje, že CVS uživatel pub nepotřebuje žádné heslo a je namapován jako systémový uživatel pubcvs. Takový uživatel většinou mívá přístup jen ke čtení. To snadno zajistíte, pokud vytvoříte skupinu cvsusers, do které přidáte uživatele pubcvs, literakl a oazanon a dáte této skupině právo čtení na celý CVSROOT.

$ groupadd cvsusers
$ vi /etc/group
cvsusers:x:503:pubcvs,literakl,oazanon

a v novém shellu

$ chmod -R g+r-w /home/literakl/CVSROOT
$ chgrp -R cvsusers /home/literakl/CVSROOT

Další řádky definují dva uživatele s heslem, kteří jsou namapováni na stejné uživatele, kteří již existují v systému. Takto jsme jim určili hesla pro CVS, která by měla být odlišná od systémových hesel.

Jenže jak ta hesla zašifrujeme? S Perlem je to hračka: (nejsem autorem)

$ vi cvspassword.pl

#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";

$ chmod +x cvspassword.pl
$ ./cvspassword.pl heslo

Tímto končí konfigurace na straně serveru.

Klient

Uživatelé přistupující z cizího serveru musí nastavit CVSROOT a zalogovat se. Je dobré uložit proměnnou CVSROOT do souboru ~/.profile:

export CVSROOT=:pserver:literakl@localhost/home/literakl/CVSROOT

Zalogujeme se pomocí příkazu cvs login:

$ cvs login
Logging in to :pserver:literakl@localhost:2401/home/literakl/CVSROOT
CVS password: heslo

Od této chvíle můžeme přistupovat k CVS vzdáleně přes pserver.

Pokud CVS neovládáte, mohu doporučit článek na Rootovi a v Linuxových novinách.

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.