Curs Linux Advanced

De la Wiki Linux Advanced
Sari la navigare Sari la căutare

Acces SSH

Despre

Secure Shell (SSH) este un protocol de rețea criptografic ce permite ca datele să fie transferate folosind un canal securizat intre dispozitive de rețea. Cele două mari versiuni ale protocolului sunt SSH1 sau SSH-1 și SSH2 sau SSH-2. Folosit cu precădere în sistemele de operare multiutilizator bazate pe unix, SSH a fost dezvoltat ca un înlocuitor al Telnet-ului și al altor protocoale nesigure de acces de la distanță, care trimit informatia, în special parola, în clar, făcând posibilă descoperirea ei prin analiza traficului. Criptarea folosită de SSH intenționează să asigure confidențialitatea și integritatea datelor transmise printr-o rețea nesigură cum este Internetul.

SSH utilizeaza o arhitectura client-server pentru comunicarea securizata prin retea, prin conectarea unui client ssh cu serverul ssh. In mod implicit, serverul SSHh ruleaza pe portul TCP standard 22.

SSH foloseste o tehnica de criptografie cu cheie publica pentru autentificare intre client si server. In plus, protocolul foloseste criptare simetrica puternica si algoritmi de hashing pentru schimbul de mesaje intre client si server, pentru a asigura confidentialitatea si integritatea datelor.

Majoritatea sesiunilor SSH vor avea doar urmatoarele doua operatii:

1. Autentificare

2. Executarea comenzii

Serverele SSH pot autentifica clientii folosind o varietate de metode; cele doua moduri de autentificare frecvent utilizate sunt:

1. Pe baza parolei (metoda implicita utilizata pentru clientii OpenSSH, cea mai simpla autentificare dar nu cea mai sigura)

2. Pe baza de cheie (imbunatateste securitatea sistemului prin generarea de perechi de chei SSH, o alternativa mai sigura)

Dupa ce serverul autentifica clientul cu succes, se stabileste o conexiune sigura intre ei.

O data deschisa conexiunea, prin SSH se deschide TTY-ul standard de login care il intampina pe utilizator.

SSH este folosit in principal pentru text (terminal) dar poate fi folosit si pentru accesul unor programe de interfata de la distanta (X11 Forwarding/ssh -X) sau pentru transfer de fisiere (sftp)


Setup

SSH-ul are nevoie de un server. Cel mai comun si folosit in acest curs este openssh-server

$ sudo apt install openssh-server -y

Când instalarea openssh-server este finalizată, vom folosi comanda systemctl pentru a-i verifica starea:

$ sudo systemctl status ssh

Serviciul SSH este în stare de rulare, se va configura partea de firewall:

# ufw allow ssh
sau
# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

Regula pentru a permite doar unui anumit IP sa acceseze server-ul:

# iptables -A INPUT -p tcp -s YourIP --dport 22 -j ACCEPT

Regula pentru a inregistra IP-urile ce se conecteaza la server:

# iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh –rsource


Utilizarea cheilor publice/private pentru autentificare

Autentificarea cu chei publice/private este cu siguranță mai sigură și o soluție mult mai bună decât autentificarea prin parolă. Fiecare cheie este un număr mare cu proprietăți matematice diferite. Cheia privată este stocată pe computerul de pe care vă autentificați, în timp ce cheia publică este stocată în fișierul .ssh/authorized_keys de pe fiecare computer la care doriți să vă conectați.

Acest lucru este deosebit de important dacă computerul este vizibil pe Internet. Utilizarea cheilor criptate pentru autentificare este utilă, deoarece nu va mai trebui să introduceți o parolă. Odată ce autentificarea perechii de chei publice/private a fost configurată pe server, puteți dezactiva complet autentificarea prin parolă; aceasta înseamnă că nimeni fără o cheie autorizată nu va putea avea acces. Chiar și cei mai inventivi hackeri nu vor putea interveni sau se strecoară într-o sesiune și nu vor mai putea încerca să spargă parola.

Iată cum să creați o pereche de chei publice/private și să le instalați pentru a le utiliza pe serverul dvs. SSH:

Începeți prin a genera perechea de chei, o cheie publică și o cheie privată. Cheia publică va fi plasată pe server și vă veți autentifica cu cheia privată (aceasta trebuie efectuată pe fiecare computer client de la care vă conectați):

$ ssh-keygen -t rsa

Acest lucru va crea două fișiere în directorul dvs. (ascuns) ~/.ssh numite: id_rsa și id_rsa.pub Primul: id_rsa este cheia dumneavoastră privată și celălalt: id_rsa.pub este cheia dumneavoastră publică.

Vi se va cere apoi o frază de acces, care este parola dvs. pentru a debloca o anumită cheie publică de fiecare dată când vă conectați. Este alegerea dvs. să adăugați o criptare de protecție a unei fraze de acces la cheia dvs. atunci când o creați. Dacă preferați să nu utilizați unul, pur și simplu apăsați Enter când vi se cere expresia de acces atunci când vă creați perechea de chei. Rețineți că, dacă nu vă protejați cheia cu expresia de acces, oricine obține acces la mașina dvs. locală va avea automat acces SSH la serverul de la distanță.

Copiați cheia publică (id_rsa.pub) pe server (utilizatorul la distanță nu ar trebui să fie niciodată root; selectați utilizatorul implicit non-root ca utilizator la distanță):

scp –p id_rsa.pub remoteuser@remotehost

Apoi conectați-vă cu SSH și copiați cheia publică în locul potrivit:

ssh remoteuser@remotehost mkdir ~/.ssh chmod 700 ~/.ssh cat id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys mv id_rsa.pub ~/.ssh logout

Apoi ștergeți cheia publică de pe server, altfel clientul SSH nu vă va permite să vă conectați la server:

rm id_rsa.pub

Și, în sfârșit, setați permisiunile pentru fișiere pe server:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

Când vă conectați la server, vi se va solicita expresia de acces cheie (în funcție de configurația dvs.).

2. Configurați intervalul de expirare inactiv

Pentru a evita o sesiune SSH nesupravegheată, puteți seta un interval de timeout inactiv. Deschideți fișierul /etc/ssh/sshd_config și adăugați următoarea linie:

ClientAliveInterval 360

ClientAliveCountMax 0

Intervalul de timeout pe care îl setați este în secunde (360 secunde = 6 minute). Odată ce intervalul a trecut, utilizatorul inactiv va fi deconectat automat.

Dezactivați parolele goale

Trebuie să împiedicați autentificarea de la distanță de la conturi cu parole goale pentru o securitate sporită. Deschideți fișierul /etc/ssh/sshd_config și actualizați următoarea linie:

PermitEmptyPasswords nr

Limitați accesul SSH al utilizatorilor

Pentru a oferi un alt nivel de securitate, ar trebui să vă limitați conexiunile SSH doar la anumiți utilizatori care au nevoie de acces de la distanță. În acest fel, veți minimiza impactul de a avea un utilizator cu o parolă slabă.

Deschideți fișierul /etc/ssh/sshd_config pentru a adăuga o linie „AllowUsers”, urmată de lista de nume de utilizator și separați-le cu un spațiu:

AllowUsers utilizator1 utilizator2

Apoi reporniți serviciul SSH.

Dezactivați autentificarea ca root

Una dintre cele mai periculoase găuri de securitate pe care le puteți avea în sistemul dvs. este să permiteți conectarea directă la root prin SSH. Procedând astfel, orice hacker care încearcă să folosească forța brută asupra parolei dvs. de root ar putea accesa ipotetic sistemul dvs.; și dacă vă gândiți bine, root poate provoca mult mai multe daune pe o mașină decât poate face un utilizator standard.

Găsiți secțiunea din fișierul care conține #PermitRootLogin.

Pentru a dezactiva conectarea prin SSH ca root, schimbați linia în aceasta:

PermitRootLogin no

Simbolul # (comentar) îi spune serverului să ignore orice după el pe aceeași linie. Eliminați # pentru ca modificările să aibă efect.

Acces VNC

1. Prezentare generală

De multe ori, avem nevoie să accesăm de la distanță un server Linux. Dacă avem nevoie în mod special de acces la GUI Linux, atunci putem configura un server VNC pe Linux-ul nostru, pentru a ne permite să controlăm GUI.

În acest tutorial, vom instala serverul TightVNC pe Ubuntu 22.04 și îl vom accesa prin Windows, MacOS și o mașină Linux.

Vom presupune un mediu de rețea securizat în care serverul nostru nu este accesibil lumii exterioare, iar parola este o protecție suficient de puternică. Cu toate acestea, vom acoperi și utilizarea tunelului SSH pentru cazurile în care este necesară securitate suplimentară. 2. Introducere în VNC

VNC (Virtual Network Computing) este un sistem grafic popular de partajare a desktopului. Permite utilizatorilor să-și controleze sistemele folosind protocolul RFB (Remote Frame Buffer) fără a avea acces fizic.

VNC permite utilizatorilor să citească și să partajeze fără probleme fișiere, să modifice setările și să execute comenzi pe server utilizând evenimentul de tastatură și mouse al computerului client.

Pentru stabilirea unei conexiuni la distanță, avem nevoie atât de un server, cât și de un client. Există multe soluții VNC din care puteți alege, cum ar fi Vino, RealVNC, TightVNC și TigerVNC. 3. Instalarea serverului VNC

Vom instala serverul TightVNC deoarece este open-source, întreținut activ și ușor. În plus, oferă numeroase funcții, cum ar fi protecția cu parolă, criptarea și scalarea.

Înainte de a instala serverul TightVNC, ar trebui să ne asigurăm că managerul nostru de pachete este actualizat:

$ sudo apt update && sudo apt upgrade -y
Hit:1 http://pk.archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://security.ubuntu.com/ubuntu jammy-security InRelease
…

În continuare, vom instala un mediu desktop pe serverul nostru Ubuntu, deoarece nu vine cu el în mod implicit. În acest scop, să instalăm mediul desktop XFCE:

$ sudo apt install xfce4 xfce4-goodies
Citirea listelor de pachete... Gata
Construirea arborelui de dependențe... Gata
…
Astfel, mediul nostru desktop este instalat cu succes.

Apoi, să instalăm serverul TightVNC:

$ sudo apt install tightvncserver -y

În cele din urmă, serverul nostru TightVNC este instalat cu succes. 4. Configurarea serverului VNC

Acum, să configuram serverul nostru VNC pentru a-l accesa de pe mașinile client.

În primul rând, vom seta o parolă pentru serverul nostru VNC. Pentru a face acest lucru, rulăm comanda vncpasswd și setăm o parolă sigură de șase până la opt caractere:

$ vncpasswd
Folosind fișierul de parole /home/baeldung/.vnc/passwd
Parolă:
Verifica:
Doriți să introduceți o parolă numai pentru vizualizare (da/n)? N

Mergând mai departe, vom întâlni o solicitare care ne întreabă dacă dorim să setăm o parolă numai pentru vizualizare pentru accesarea serverului. Setarea acestei parole depinde de nevoile noastre.

În cazul nostru, dorim să oferim acces complet la server, așa că vom introduce N.

Apoi, să rulăm comanda vncserver pentru a porni serverul TightVNC și a crea fișierele sale de configurare inițială:

Nota: Cu x0vncserver se poate porni un server vnc direct peste sesiunea curenta de desktop X11, este mai simplu insa inadecvat pentru servere.

$ vncserver
Noul desktop „X” este baeldung-linux:1
Pornirea aplicațiilor specificate în /home/baeldung/.vnc/xstartup
Fișierul jurnal este /home/baeldung/.vnc/baeldung-linux:1.log

În ieșire, putem observa că după numele gazdei, există un număr (:1), care este cunoscut sub numele de portul de afișare. Acest port de afișare indică portul pe care rulează instanța serverului. În mod implicit, serverul VNC ascultă pe portul TCP 5900, deci acest port de afișare :1 înseamnă că instanța serverului rulează pe portul 5901 (5900 + 1).

VNC ne permite să creăm mai multe instanțe de server VNC pe diferite porturi de afișare, rulând aceeași comandă.

Deocamdată, să omorâm această instanță de server pentru a efectua unele configurații de server:

$ vncserver -kill :1 -force
Uciderea procesului Xtightvnc ID 6111

Putem folosi această comandă pentru a termina orice instanță de server care rulează pe un anumit port de afișare atunci când nu este necesar, modificând numărul portului de afișare în consecință.

În continuare, dorim ca serverul nostru VNC să folosească mediul desktop XFCE de fiecare dată când rulează. În acest scop, vom adăuga startxfce4 și linia în fișierul ~/.vnc/xstartup. După modificarea fișierului, putem verifica conținutul acestuia folosind comanda cat:

$ echo "startxfce4 &" >> ~/.vnc/xstartup
$ cat ~/.vnc/xstartup
#!/bin/sh
xrdb „$HOME/.Xresources”
xsetroot -gri solid
#x-terminal-emulator -geometry 80x24+10+10 -ls -title „$VNCDESKTOP Desktop” &
#x-window-manager &
# Remediați pentru ca GNOME să funcționeze
exportați XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession
startxfce4 &

Fișierul xstartup se execută automat când începe o sesiune VNC.

În plus, putem configura alte componente sau aplicații, cum ar fi un manager de fișiere, pentru a iniția cu serverul nostru VNC în acest fișier.

După modificarea fișierului xstartup, îi vom schimba permisiunea la executabil folosind comanda chmod:

$ chmod +x ~/.vnc/xstartup

În cele din urmă, să începem instanța serverului nostru TightVNC:

$ vncserver
Noul desktop „X” este baeldung-linux:1

Am instalat și configurat cu succes serverul VNC în Ubuntu. Pentru a verifica adresa IP a serverului nostru, putem folosi comanda hostname -I.

În plus, putem configura serverul nostru VNC să ruleze ca un serviciu systemd pentru confortul nostru.

5. Accesarea serverului VNC de pe mașina client

Odată ce serverul nostru VNC este în funcțiune, îl putem accesa de pe orice computer client folosind detaliile serverului nostru. Cu toate acestea, este important să rețineți că oricine are aceste informații poate accesa serverul. Prin urmare, presupunem că am setat o parolă VNC puternică și am configurat reguli de firewall pentru a restricționa accesul la anumite adrese sau intervale IP.

5.1. Din Windows

Să accesăm serverul nostru VNC din Windows. În acest scop, să descarcăm și să instalăm clientul TightVNC în sistemul nostru.

Acum, vom deschide TightVNC Viewer și vom introduce server_IP_address::display_port în câmpul Remote Host. Apoi, apăsați butonul Conectare:

5.2. Din Linux sau MacOS

Putem folosi orice client VNC pe mașina noastră MacOS sau Linux pentru a controla serverul nostru VNC. În clientul VNC, tastați <server_IP_address>::<display_port> pentru a accesa serverul.

De exemplu, pe computerul nostru Linux, putem deschide Remmina Remote Desktop Client și introducem IP-ul și portul de afișare al serverului nostru: conectați-vă la serverul VNC folosind remmina

Apoi, vom introduce parola serverului VNC pentru a-l accesa.

6. Securitate suplimentară (opțional)

Dacă avem nevoie de securitate suplimentară și dorim să ne asigurăm că numai clienții cu acces SSH anterior la serverul nostru se pot conecta la serverul VNC, putem restricționa serverul nostru VNC pentru a accepta numai conexiuni care provin de la acesta. Apoi, putem redirecționa toate conexiunile de la clienții noștri către server printr-un tunel SSH criptat.

În acest scop, vom porni serverul nostru folosind comanda vncserver cu indicatorul -localhost:

$ vncserver -localhost

Odată ce serverul nostru rulează, ne vom îndrepta către computerul nostru client pentru a ne accesa serverul.

Tunel SSH în Linux sau MacOS

$ ssh -L 5901:localhost:5901 -C -N -l baeldung-linux 192.168.10.119

Sintaxa pentru această comandă este dată mai jos:

$ ssh -L <sursă_port>:localhost:<display_port> -C -N -l <username> <server_ip>

Trebuie să înlocuim variabilele de comandă în funcție de informațiile și preferințele serverului nostru (port sursă). Odată ce sesiunea SSH este stabilită cu succes, vom minimiza terminalul. Apoi, vom deschide orice client VNC și vom tasta localhost::<display_port> pentru a accesa serverul VNC.

Tunelul SSH în Windows

În Windows, vom folosi PuTTY pentru a crea un tunel SSH.

În PuTTY, navigați la opțiunea Tunnels situată sub opțiunea SSH din bara laterală Category. Aici, specificați un port sursă (5901) pentru redirecționarea traficului SSH. Poate fi orice port neutilizat (de la 0 la 65535). În plus, vom introduce adresa IP și portul de afișare al serverului VNC în câmpul Destinație. Apoi, vom apăsa butonul Adaugă:

PuTTY SSH Tunneling

Apoi, să alegem categoria Sesiune și să introducem adresa IP a serverului în câmpul Nume gazdă. Apoi, apăsați butonul Deschidere:

Sesiune SSH PuTTY

Acum, vom introduce parola serverului pentru a stabili o sesiune SSH și a minimiza această fereastră:

Sesiune PuTTY SSH

Apoi, vom deschide TightVNC Viewer și vom tasta localhost::<display_port> în câmpul Remote Host.

În cele din urmă, să apăsăm butonul Conectare pentru a accesa serverul.

SAMBA file share

Următoarea pagină