Portál AbcLinuxu, 10. května 2025 19:24
Přinášíme vám krátký návod, jak zpřístupnit CVS pro vzdálený přístup.
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á.
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
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.
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.
mohl bys tu popsat presny postup, jak na to ssh? docela by mne to zajimalo. diky
Prvni promenna je CVSROOT=:ext:server.domena:/adresar/na/serveru
A druha: CVS_RSH=ssh
Na serveru cvs nemusi bezet, jako pri pristupu pres pserver. Dale je pak rozdil, ze se nepouziva prikaz cvs login a cvs logout, ale heslo se zadava pri kazdem prikazu. Chci-li si usetrit zadavani hesla, musim pro ssh vygenerovat klice a spravne je nahrat do konfigurace ssh.
Klice se generuji pomoci prikazu: ssh-keygen -t rsa
Tento prikaz vygeneruje dva soubory: id_rsa - privatni klic, ten je ulozen na klientovi v adresari $HOME/.ssh
a id_rsa.pub - ten patri na server. Jeho obsah se prida do souboru $HOME/.ssh/authorized_keys
Pak by vse melo chodit bez otazky na heslo. Podobne se lze pripojit i na CVS server z Windowsu, ale to uz je trochu jine tema.
Pavel
Tady je posup jak rozchodit cvs pres ssh:
1) na cvs serveru rozjet ssh
2) na klientovi (v ~/.profile) nastavit:
export CVSROOT=cvs:/home/cvs
export CVS_RSH=ssh
3) na klientovi vytvorit ~/.ssh/config s obsahem:
Host cvs
Hostname 192.168.1.100
Port 22
Compression yes
User cdave
IdentityFile ~/.ssh/identity
4) vygenerovat klic na klientovi (klidne bez hesla): ssh-keygen
5) pridat prislusny radek z klient:~/.ssh/identity.pub do server:~/.ssh/authorized_keys
A uz by to melo svistet!
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.