Ghid pentru Keychain în Gentoo Linux
1.
Context
Problema de rezolvat
Aveţi, deci, toate aceste maşini Gentoo minunate ce rulează sshd, dar este
puţin cam incomod pentru dvs. să tot tastaţi toate acele parole de
autentificare, nu? Sau poate aveţi un script sau o intrare cron ce necesită o
modalitate convenabilă pentru utilizarea unei conexiuni ssh. Oricare ar fi
situaţia, există o soluţie pentru această problemă, şi începe cu autentificarea
bazată pe cheie publică.
Cum funcţionează autentificarea cu cheie publică?
Prespupunem că avem un client ce doreşte să se conecteze la sshd pe un server.
Mai întâi, clientul generează o pereche de chei şi îi pasează cheia publică
server-ului. După aceastaa, de fiecare dată când clientul se conectează,
server-ul trimite un şir de caractere de recunoaştere, criptat cu cheia
publică. Doar deţinătorul cheii private corespondente (clientul) poate să o
decripteze, şi după cum aţi ghicit, răspunsul corect induce la o autentificare
cu succes.
2.
Cum să utilizăm autentificarea cu cheie publică
Generarea perechii de chei
Primul pas este crearea perechii dvs. de chei. Pentru aceasta, vom utiliza
comanda ssh-keygen, după cum urmează:
Cod 2.1: Generarea perechii de chei |
$ ssh-keygen -t dsa
|
Atenţie:
Asiguraţi-vă că alegeţi o frază de autentificare puternică, în special în cazul
în care cheia este utilizată pentru autentificări la root!
|
Ar trebui, acum, să aveţi o cheie privată în ~/.ssh/id_dsa şi o
cheie publică în ~/.ssh/id_dsa.pub. Suntem gata de a copia cheia
publică pe sistemul gazdă la distanţă.
Pregătirea aplicaţiei server
Vom copia fişierul ~/.ssh/id_dsa.pub pe server-ul ce rulează sshd.
Vom adăuga, de asemenea, în fişierul ~/.ssh/authorized_keys ce
corespunde utilizatorului ce se conectează pe acel server. Iată un exemplu
despre modalitatea de efectua aceste operaţii dacă aveţi deja acces ssh pe acel
server.
Cod 2.2: Copierea cheii publice pe server |
$ scp ~/.ssh/id_dsa.pub server_user@server:~/myhost.pub
$ ssh server_user@server "cat ~/myhost.pub >> ~/.ssh/authorized_keys"
$ ssh server_user@server "cat ~/.ssh/authorized_keys"
|
Informaţia rezultată de la ultima comandă ar trebui să vă arate conţinutul
fişierului ~/.ssh/authorized_keys. Asiguraţi-vă că aceasta este
corectă.
Testarea setărilor
Teoretic, dacă totul a funcţionat corect şi aplicaţia daemon ssh de pe server
permite acest lucru, ar trebui să putem să avem acces ssh fără parolă, pe
server. Va trebui în continuare să decriptăm cheia privată pe aplicaţia client
cu fraza de autentificare utilizată anterior, dar aceasta nu ar trebui să fie
confundată cu fraza de autentificare corespondentă contului utilizator de pe
server.
Cod 2.3: Testarea cheilor |
$ ssh server_user@server
|
Sperăm că vi s-a cerut să introduceţi fraza de autentificare pentru id_dsa şi
aţi putut să obţineţi acces ssh ca server_user pe server. Dacă nu,
autentificaţi-vă ca server_user şi verificaţi conţinutul fişierului
~/.ssh/authorized_keys pentru a vă asigura că fiecare intrare este
pe câte o singură linie. Aţi mai putea să verificaţi configuraţia sshd pentru a
vă asigura că acesta preferă utilizarea autorizării pe bază de cheie publică,
dacă aceasta este disponibilă.
La acest pas, probabil că vă gândiţi "Care este rostul, tocmai am înlocuit o
parolă cu alta?!". Relaxaţi-vă, următoarea secţiune vă va arăta exact cum putem
să utilizăm aceste setări pentru a salva timp preţios.
3.
Utilizarea autentificării cu cheie publică mai convenabil
Administrarea tipică a cheilor cu ssh-agent
Dacă aţi urmărit până aici, probabil că vă gândiţi că ar fi bine dacă aţi putea
cumva să decriptaţi cheile noastre publice doar o singură dată şi să obţinem
funcţionalitatea aplicaţiei ssh fără a mai utiliza parole. Sunteţi norocoşi,
pentru că aceasta este exact menirea aplicaţiei ssh-agent.
Aplicaţia ssh-agent este, de obicei, pornită la începutul sesiunii dvs.
X, sau dintr-un script de pornire al aplicaţiei shell, cum ar fi
~/.bash_profile. Funcţionează prin crearea unei componente socket
de tip unix şi înregistrarea variabilelor de mediu corespunzătoare pentru ca
toate aplicaţiile ulterioare să facă uz de avantajul serviciilor acestuia prin
conectarea la acea componentă socket. În mod clar, aceasta are sens doar în
cazul în care îl porniţi în procesul părinte al sesiunii dvs. X, dacă doriţi să
utilizaţi setul de chei private decriptate în toate aplicaţiile X ulterioare.
Cod 3.1: Pregătirea ssh-agent |
$ ssh-agent
|
Notă:
Acest ssh-agent va reţine cheile decriptate, până când veţi opri rularea
ssh-agent. Dacă doriţi să setaţi o valoare pentru timpul cât vor fi reţinute
cheile, utilizaţi argumentul -t descris în pagina de manual man
ssh-agent.
|
Când rulaţi ssh-agent, ar trebui să vă afişeze numărul PID al acestuia şi să
seteze unele variabile de mediu respectiv SSH_AUTH_SOCK şi
SSH_AGENT_PID. Ar trebui, de asemenea, să adauge
~/.ssh/id_dsa în colecţia acestuia şi să vă indice introducerea
frazei de autentificare corespondente. Dacă aveţi alte chei private pe care
doriţi să le adăugaţi aplicaţiei ssh-agent, puteţi utiliza comanda
ssh-add, după cum urmează:
Cod 3.2: Adăugarea altor chei în ssh-agent |
$ ssh-add somekeyfile
|
Acum, magia. Deoarece ar trebui să aveţi, acum, cheia privată pregătită, ar
trebui să puteţi efectua ssh la server fără a introduce nici o parolă.
Cod 3.3: Ssh fără parole |
$ ssh server
|
Ar fi bine de ştiut cum să opriţi ssh-agent, dacă este necesar, nu?
Cod 3.4: Oprirea ssh-agent |
$ ssh-agent -k
|
Notă:
Dacă aveţi probleme cu rularea ssh-agent, este posibil ca acesta să mai ruleze,
încă. Îl puteţi opri ca pe oricare al proces, prin rularea killall
ssh-agent.
|
Dacă doriţi ca ssh-agent să fie şi mai convenabil, continuaţi cu următoarea
secţiune despre utilizarea keychain. Asiguraţi-vă că opriţi aplicaţia ssh-agent
din exemplul anterior, dacă decideţi acest lucru.
Profitarea de toate posibilităţile aplicaţiei ssh-agent
Keychain vă va permite să reutilizaţi o sesiune ssh-agent între două
autentificări şi, opţional, să vă ceară frazele de autentificare de fiecare
dată când utilizatorul efectuează login. Înainte de toate, haideţi să-l
instalăm.
Cod 3.5: Instalarea keychain |
# emerge keychain
|
Presupunând că s-a încheiat cu succes, putem, acum, să utilizăm keychain în
voie. Adăugaţi următorul cod în fişierul dvs. ~/.bash_profile
pentru a-l activa:
Cod 3.6: Activarea keychain în .bash_profile |
keychain ~/.ssh/id_dsa
. ~/.keychain/$HOSTNAME-sh
|
Notă:
Puteţi adăuga mai multe chei private în linia de comandă, dacă doriţi. De
asemenea, dacă doriţi să vi se ceară fraza de autentificare de fiecare dată
când rulaţi un process shell, adăugaţi opţiunea --clear.
|
Notă:
Dacă nu utilizaţi bash, verificaţi secţiunea EXAMPLES din man
keychain pentru exemple de utilizare în alte aplicaţii shell. Ideea este ca
aceste comenzi să fie rulate de fiecare dată când utilizaţi o sesiune shell.
|
Haideţi să-l testăm. Mai întâi, asiguraţi-vă că aţi oprit aplicaţia ssh-agent
din secţiunea anterioară, apoi porniţi o sesiune shell nouă, de obicei doar
prin efectuarea de login sau prin rularea unui nou terminal. Ar trebui să vă
ceară parola pentru fiecare cheie specificată în linia de comandă. Toate
sesiunile shell deschise ulterior ar trebui să reutilizeze sesiunea ssh-agent,
permiţându-vă să efectuaţi alte conexiuni ssh fără parolă.
Utilizarea keychain cu KDE
Dacă sunteţi un utilizator KDE, în loc sa utilizaţi
~/.bash_profile, puteţi lăsa KDE să vă administreze
ssh-agent pentru dvs. Pentru aceasta, va trebui să editaţi
/usr/kde/${ERSIUNE_KDE}/env/agent-startup.sh, ce este citit în
timpul pornirii KDE şi
/usr/kde/${ERSIUNE_KDE}/shutdown/agent-shutdown.sh, ce este
executat în timpul opririi KDE, unde ${VERSIUNE_KDE} corespunde primelor
două componente ale versiunii instalării dvs. de KDE. Spre ex., dacă
utilizaţi KDE 3.5.1, iată cum aţi putea să editaţi acele fişiere:
Cod 3.7: Editarea /usr/kde/3.5/env/agent-startup.sh |
if [ -x /usr/bin/ssh-agent ]; then
eval "$(/usr/bin/ssh-agent -s)"
fi
|
Cod 3.8: Editarea /usr/kde/3.5/shutdown/agent-shutdown.sh |
if [ -n "${SSH_AGENT_PID}" ]; then
eval "$(ssh-agent -k)"
fi
|
Acum, tot ce mai trebuie să faceţi este să lansaţi un terminal la
alegere, cum ar fi Konosole, şi să încărcaţi cheile pe care doriţi
să le utilizaţi. Spre exemplu:
Cod 3.9: Încărcarea cheii ssh |
keychain ~/.ssh/id_dsa
|
Cheile dvs. vor fi reţinute până când vă veţi opri sesiunea dvs. KDE
sau când veţi opri ssh-agent manual.
4.
Remarci concludente
Consideraţii de securitate
Bineînţeles, utilizarea ssh-agent adăugă puţină insecuritate sistemului dvs.
Dacă un al utilizator v-ar utiliza mediul shell în timp ce sunteţi la baie,
acesta ar putea să se autentifice pe toate server-ele dvs., fără parolă. Ca
rezultat, este un risc pentru server-ele la care vă conectaţi şi ar trebui să
consultaţi politica de secutitate locală. Dacă utilizaţi această variantă,
asiguraţi-vă că luaţi măsurile corespunzătoare pentru a vă asigura securitatea
sesiunilor dvs.
Probleme
Majoritatea acestor paşi ar trebui să funcţioneze fără probleme, dar dacă le
întâlniţi, va trebui să ştiţi, cu siguranţă, anumite lucruri utile.
-
Dacă nu puteţi să vă conectaţi fără ssh-agent, luaţi în considerare
utilizarea ssh cu argumentele -vvv pentru a afla ce se întâmplă. Uneori
server-ul nu este configurat pentru utilizarea autentificării cu cheie
publică, uneori este configurat să ceară oricum parola locală! Dacă acesta
este cazul dvs., aţi putea să utilizaţi opţiunea -o cu ssh, sau să
modificaţi fişierul sshd_config al server-ului.
-
Dacă aveţi probleme cu ssh-agent sau keychain, poate fi din cauza faptului
că nu utilizaţi o aplicaţie shell care să poată interpreta comenzile
utilizate de acestea. Consultaţi paginile de manual pentru ssh-agent şi
keychain pentru detalii despre funcţionarea acestora în alte medii shell.
Conţinutul acestui document este publicat sub licenţa Creative Commons -
Attribution / Share Alike.
|