Diferențe

Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.

Link către această vizualizare comparativă

Urmatoarea versiune
Versiuni anterioare
autologin_tty [2026/05/23 21:53] – creat thinkrootautologin_tty [2026/05/23 22:16] (curent) thinkroot
Linia 1: Linia 1:
-====== Autologin în Debian TTY cu kmscon și getty ======+====== Autologin în TTY ======
  
-Configurarea autologinului pe un sistem Debian fără interfață grafică poate părea simplă la prima vederedar există câteva capcane care apar în funcție de ce programe rulează pe TTY. Acest articol documentează două scenarii: autologin prin **getty** (metoda standard) și autologin prin **kmscon** (când folosești kmscon ca terminal îmbunătățit).+Autologinul în TTY permite autentificarea automată a unui utilizator la pornirea sistemului, fără a introduce parola. Este util pe sisteme cu un singur utilizator, dispozitive dedicate unui singur scop (servere fără monitorkioscuri, dispozitive de scris), sau orice situație în care autentificarea manuală este inutilă.
  
-===== Contextulkmscon și getty nu se înțeleg întotdeauna =====+**Atenție:** autologinul elimină protecția prin parolă la accesul fizic la mașină. Pe sisteme cu date sensibile, folosește-l doar împreună cu criptarea completă a discului.
  
-Pe un sistem Debian minimal care rulează direct în TTY, terminalul poate fi gestionat fie de getty (implicit), fie de kmscon (dacă îl instalezi pentru fonturi mai frumoase și culori suplimentare). Problema apare când ambele sunt active simultan sau când configurezi autologinul pentru unul dar terminalul e controlat de celălalt.+===== Concepte de bază =====
  
-Un simptom clar al acestei confuzii: dacă rulezi ''tty'' în terminal și vezi ''/dev/pts/0'' în loc de ''/dev/tty1'', înseamnă că kmscon gestionează terminalul, nu getty.+La pornire, systemd pornește un serviciu getty pe fiecare TTY activ. Getty afișează promptul de autentificare și gestionează sesiunea. Există mai multe metode de autologin, în funcție de ce gestionează TTY-ul:
  
-===== Varianta 1: Autologin prin getty (fără kmscon) =====+  * **agetty** - implementarea standard, parte din pachetul ''util-linux'', prezentă pe toate distribuțiile majore 
 +  * **kmscon** - un emulator de terminal modern bazat pe KMS/DRM, cu suport pentru fonturi scalabile și Unicode complet 
 +  * **pam_autologin** - un modul PAM care salvează parola și o folosește în procesul normal de autentificare
  
-Aceasta este metoda standard pentru un sistem Debian minimal fără kmscon instalat.+Un detaliu important: tipul terminalului creat diferă în funcție de ce gestionează TTY-ul. agetty creează terminale de tip ''/dev/tty1'', ''/dev/tty2'' etc., în timp ce kmscon creează terminale de tip ''/dev/pts/0'', ''/dev/pts/1'' etc. Această diferență contează când configurezi programe să pornească automat după autentificare prin ''~/.bashrc''.
  
-Creează directorul de override pentru serviciul getty:+Poți verifica oricând ce tip de terminal folosești cu: 
 + 
 +<code bash> 
 +tty 
 +</code> 
 + 
 +===== Metoda 1: Autologin prin agetty și systemd ===== 
 + 
 +Aceasta este metoda standard, care funcționează pe orice distribuție ce folosește systemd. Configurarea se bazează pe fișiere drop-in systemd care suprascriu parametrii impliciți ai agetty. 
 + 
 +==== Consolă virtuală ==== 
 + 
 +Creează un fișier drop-in pentru serviciul getty de pe TTY1:
  
 <code bash> <code bash>
Linia 25: Linia 39:
 [Service] [Service]
 ExecStart= ExecStart=
-ExecStart=-/sbin/agetty --autologin USERUL_TAU --noclear %I $TERM+ExecStart=-/sbin/agetty --noreset --noclear --autologin USERUL_TAU - ${TERM}
 </code> </code>
 +
 +Prima linie ''ExecStart='' goală este obligatorie - ea resetează valoarea implicită înainte de a seta una nouă. Fără ea, systemd adaugă a doua comandă la cea existentă în loc să o înlocuiască.
  
 Aplică modificările: Aplică modificările:
Linia 35: Linia 51:
 </code> </code>
  
-După reboot, terminalul va fi ''/dev/tty1'' și autologinul va funcționa. În ''~/.bashrc'' poți adăuga pornirea automată a tmux sau a oricărui alt program:+> **Notă:** Opțiunea ''Type=idle'' din ''getty@.service'' implicit întârzie pornirea serviciului până când toate unitățile systemd sunt pornite, pentru evita amestecarea mesajelor de boot cu promptul de autentificare. Dacă vrei să pornești getty imediat, adaugă ''Type=simple'' în fișierul drop-in. 
 + 
 +==== Consolă serială ==== 
 + 
 +Pentru terminale seriale (de exemplu ''ttyS0''): 
 + 
 +<code> 
 +[Service] 
 +ExecStart= 
 +ExecStart=-/usr/bin/agetty --noreset --noclear --autologin USERUL_TAU --keep-baud 115200,57600,38400,9600 - ${TERM} 
 +</code> 
 + 
 +==== Consolă nspawn ==== 
 + 
 +Pentru containere systemd-nspawn, suprascrie ''console-getty.service'':
  
 <code bash> <code bash>
-if [ -z "${TMUX}" ] && [ $(tty) == "/dev/tty1" ]; then +sudo mkdir -/etc/systemd/system/console-getty.service.d/
-    exec tmux new-session -d 'nvim' \; attach +
-fi+
 </code> </code>
  
-===== Varianta 2: Autologin prin kmscon =====+<code> 
 +[Service] 
 +ExecStart= 
 +ExecStart=-/usr/bin/agetty --noreset --noclear --autologin USERUL_TAU --keep-baud 115200,57600,38400,9600 - ${TERM} 
 +</code>
  
-Dacă ai instalat kmscon și vrei să folosești autologinul prin eltrebuie să configurezi serviciul ''kmsconvt@tty1.service''. kmscon înlocuiește getty pe TTY și creează un terminal virtual de tip ''pts/0''.+==== Doar parolafără username ====
  
-Creează fișierul de override:+Dacă vrei să sari peste introducerea username-ului dar să ceri în continuare parola: 
 + 
 +<code> 
 +[Service] 
 +ExecStart= 
 +ExecStart=-/usr/bin/agetty -o '-- USERUL_TAU' --skip-login --noreset --noclear - ${TERM} 
 +</code> 
 + 
 +==== Note pentru distribuții ==== 
 + 
 +<tab-group> 
 +  <tab title="Debian / Ubuntu"> 
 + 
 +Calea către agetty poate varia în funcție de versiune. Verifică cu ''which agetty'' - poate fi ''/sbin/agetty'' sau ''/usr/sbin/agetty''
 + 
 +  </tab> 
 +  <tab title="Arch Linux"> 
 + 
 +Pe Arch Linux, serviciul ''getty@tty1'' este activ implicit. Metoda de mai sus funcționează din prima. Alternativ, poți folosi ''systemctl edit'' care deschide editorul direct pe fișierul de override
 + 
 +<code bash> 
 +sudo systemctl edit getty@tty1.service 
 +</code> 
 + 
 +  </tab> 
 +  <tab title="Fedora / RHEL / CentOS"> 
 + 
 +Metoda funcționează identic. Dacă autologinul nu funcționează, verifică jurnalul și eventualele refuzuri SELinux: 
 + 
 +<code bash> 
 +journalctl -u getty@tty1 -b 
 +ausearch -m avc -ts recent 
 +</code> 
 + 
 +  </tab> 
 +  <tab title="openSUSE"> 
 + 
 +Metoda systemd standard funcționează fără modificări suplimentare. 
 + 
 +  </tab> 
 +</tab-group> 
 + 
 +===== Metoda 2: Autologin prin kmscon ===== 
 + 
 +[[https://wiki.archlinux.org/title/KMSCON|kmscon]] este un emulator de terminal bazat pe KMS/DRM care oferă fonturi scalabile cu suport TTF, Unicode complet (inclusiv caractere CJK), redare accelerată hardware și suport multi-seat. Poate funcționa ca înlocuitor pentru terminalul Linux din kernel. 
 + 
 +**Atenție:** kmscon și agetty nu pot gestiona același TTY simultan. Dacă ai kmscon activ pe TTY1 și configurezi autologinul prin agetty tot pe TTY1, autologinul nu va funcționa. Dacă kmscon nu poate porni din orice motiv, ''kmsconvt@.service'' pornește automat ''getty@.service'' ca rezervă. 
 + 
 +==== Instalare ==== 
 + 
 +<tab-group> 
 +  <tab title="Arch Linux"> 
 + 
 +<code bash> 
 +sudo pacman -S kmscon 
 +</code> 
 + 
 +  </tab> 
 +  <tab title="Debian"> 
 + 
 +Pe Debian Trixie (13), kmscon este disponibil din backports: 
 + 
 +<code bash> 
 +echo "deb http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware" | sudo tee -a /etc/apt/sources.list 
 +sudo apt update 
 +sudo apt install -t trixie-backports kmscon 
 +</code> 
 + 
 +  </tab> 
 +  <tab title="Ubuntu / Fedora / openSUSE"> 
 + 
 +kmscon nu este disponibil în depozitele oficiale. Trebuie compilat din sursă de pe [[https://github.com/kmscon/kmscon|GitHub]]. 
 + 
 +  </tab> 
 +</tab-group> 
 + 
 +==== Activare ==== 
 + 
 +Pe TTY1 există o configurație specială implicită pentru getty. Pentru a fi conservator, poți lăsa agetty pe TTY1 și rula kmscon doar pe celelalte terminale virtuale. Sau poți rula kmscon și pe TTY1. 
 + 
 +Pentru a activa kmscon pe un singur TTY, dezactivezi getty pe acel TTY și activezi kmsconvt: 
 + 
 +<code bash> 
 +sudo systemctl disable getty@tty1.service 
 +sudo systemctl enable kmsconvt@tty1.service 
 +</code> 
 + 
 +Pentru a înlocui agetty pe toate terminalele virtuale: 
 + 
 +<code bash> 
 +sudo systemctl disable getty@.service 
 +sudo systemctl enable kmsconvt@.service 
 +</code> 
 + 
 +> **Sfat:** Poți reactiva ''getty@tty1.service'' și dezactiva ''kmsconvt@tty1.service'' după ce ai activat kmscon pe toate terminalele - astfel poți porni o sesiune grafică de pe TTY1 în timp ce beneficiezi de kmscon pe celelalte terminale. 
 + 
 +==== Autologin prin fișierul de configurare kmscon ==== 
 + 
 +Metoda cea mai simplă este direct prin ''/etc/kmscon/kmscon.conf'': 
 + 
 +<code> 
 +# Autologin ca utilizatorul "username" 
 +login=/usr/bin/login -p -f username 
 +</code> 
 + 
 +==== Autologin prin override de serviciu ==== 
 + 
 +Alternativ, prin fișier drop-in systemd:
  
 <code bash> <code bash>
Linia 53: Linia 192:
 sudo nano /etc/systemd/system/kmsconvt@tty1.service.d/autologin.conf sudo nano /etc/systemd/system/kmsconvt@tty1.service.d/autologin.conf
 </code> </code>
- 
-Conținutul: 
  
 <code> <code>
Linia 67: Linia 204:
 </code> </code>
  
-Dacă autologinul prin kmscon funcționează, terminalul va fi ''/dev/pts/0''Condiția din ''~/.bashrc'' trebuie ajustată:+==== Schimbarea TTY-ului ==== 
 + 
 +Combinația obișnuită ''Alt+Fn'' nu funcționează când TTY-ul curent este gestionat de kmscon. Folosește ''Ctrl+Alt+Fn'' în schimb. 
 + 
 +===== Metoda 3: pam_autologin ===== 
 + 
 +[[https://wiki.archlinux.org/title/Pam_autologin|pam_autologin]] este un modul PAM care, spre deosebire de celelalte metode, salvează parola și o folosește în procesul normal de autentificareAceasta înseamnă că parola poate fi folosită de ''pam_mount'' pentru a monta un director home criptat, sau de GNOME Keyring pentru a debloca keyring-ul la autentificare. 
 + 
 +Autologinul prin PAM se produce o singură dată per TTY per sesiune de boot - la delogare apare promptul normal, permițând autentificarea cu un alt utilizator. 
 + 
 +==== Instalare ==== 
 + 
 +<tab-group> 
 +  <tab title="Arch Linux">
  
 <code bash> <code bash>
-if [ -z "${TMUX}" ] && [ $(tty) == "/dev/pts/0" ]; then+yay -S pam-autologin 
 +</code> 
 + 
 +  </tab> 
 +  <tab title="Debian / Ubuntu / Fedora / openSUSE"> 
 + 
 +pam_autologin nu este disponibil în depozitele oficiale. Trebuie compilat din sursă. 
 + 
 +  </tab> 
 +</tab-group> 
 + 
 +==== Configurare ==== 
 + 
 +Editează ''/etc/pam.d/login'': 
 + 
 +<code> 
 +#%PAM-1.0 
 +auth    required pam_autologin.so 
 +auth    include  system-local-login 
 +account include  system-local-login 
 +session include  system-local-login 
 +</code> 
 + 
 +Linia ''pam_autologin.so'' trebuie să fie prima din secțiunea auth. Dacă un alt modul vine primul și are nevoie de username, îl va cere. 
 + 
 +Deoarece agetty nu este o aplicație PAM, nu poate trimite username-ul direct către ''login''. Trebuie configurat să folosească direct ''login'' fără să ceară username, prin fișier drop-in: 
 + 
 +<code> 
 +[Service] 
 +ExecStart= 
 +ExecStart=-/sbin/agetty --skip-login --noreset --noclear - ${TERM} 
 +</code> 
 + 
 +Salvează primul login creând fișierul de configurare: 
 + 
 +<code bash> 
 +sudo touch /etc/security/autologin.conf 
 +</code> 
 + 
 +La primul reboot vei vedea un mesaj că următorul login va fi salvat. Autentifică-te normal. La al doilea reboot autologinul va funcționa. 
 + 
 +Pentru autologin la fiecare pornire, nu doar prima dată: 
 + 
 +<code> 
 +auth required pam_autologin.so always 
 +</code> 
 + 
 +Pentru a opri autologinul, șterge fișierul de configurare cu ''shred'' (nu cu ''rm'') deoarece fișierul conține credențiale obfuscate: 
 + 
 +<code bash> 
 +sudo shred -u /etc/security/autologin.conf 
 +</code> 
 + 
 +==== Notă de securitate ==== 
 + 
 +pam_autologin stochează credențialele obfuscat cu o cheie aleatoare, dar cheia este stocată în același fișier - deci protecția este minimă. Datele pot ajunge în zona nealocată a discului dacă fișierul este șters fără ''shred''. Folosește această metodă doar pe sisteme cu disc criptat integral. 
 + 
 +===== Pornirea automată a unui program după autologin ===== 
 + 
 +Verifică mai întâi ce tip de terminal ai după autologin: 
 + 
 +<code bash> 
 +tty 
 +</code> 
 + 
 +Adaugă în ''~/.bashrc'': 
 + 
 +<tab-group> 
 +  <tab title="agetty (tty1)"> 
 + 
 +<code bash> 
 +if [ -z "${TMUX}" ] && [ "$(tty)== "/dev/tty1" ]; then
     exec tmux new-session -d 'nvim' \; attach     exec tmux new-session -d 'nvim' \; attach
 fi fi
 </code> </code>
  
-===== Ce se poate întâmpla greșit =====+  </tab> 
 +  <tab title="kmscon (pts/0)"> 
 + 
 +<code bash> 
 +if [ -z "${TMUX}" ] && [ "$(tty)" == "/dev/pts/0" ]; then 
 +    exec tmux new-session -d 'nvim' \; attach 
 +fi 
 +</code> 
 + 
 +  </tab> 
 +</tab-group> 
 + 
 +Condiția ''[ -z "${TMUX}" ]'' previne pornirea recursivă a tmux în interiorul unei sesiuni tmux existente. 
 + 
 +===== Depanare ===== 
 + 
 +**Autologinul nu funcționează după configurare:** 
 + 
 +<code bash> 
 +sudo systemctl status getty@tty1.service 
 +journalctl -u getty@tty1.service -b 
 +</code> 
 + 
 +**Programul din .bashrc nu pornește:** 
 + 
 +Verifică ce terminal ai efectiv după autologin cu ''tty'' și asigură-te că condiția din ''.bashrc'' corespunde rezultatului. 
 + 
 +**kmscon și agetty active simultan pe același TTY:** 
 + 
 +<code bash> 
 +sudo systemctl list-units | grep -E 'getty|kmscon' 
 +</code> 
 + 
 +Dacă ambele apar active pe același TTY, dezactivează unul dintre ele. 
 + 
 +**Autologinul pornește în buclă după delogare:** 
 + 
 +Comportamentul implicit al agetty cu ''--autologin'' este să reautentifice utilizatorul la fiecare delogare. Dacă vrei autologin o singură dată per sesiune de boot, folosește pam_autologin fără opțiunea ''always''
 + 
 +**Root nu se poate autentifica cu kmscon:**
  
-**kmscon instalat dar autologin configurat prin getty:** getty nu va controla terminalul pentru că kmscon îl preia primulAutologinul prin getty nu va funcționaSoluția este fie să configurezi autologinul prin kmsconfie să dezinstalezi kmscon și să rămâi cu getty.+Verifică dacă ''pam_securetty'' este activ în ''/etc/pam.d/login''Dacă dadezactivează-l comentând linia corespunzătoare.
  
-**Condiția din .bashrc cu tty greșit:** dacă configurezi ''pts/0'' în ''.bashrc'' dar terminalul ''tty1'' (sau invers), tmux nu va porni automat. Verifică întotdeauna cu comanda ''tty'' ce terminal folosești efectiv.+===== Referințe =====
  
-===== Concluzie =====+  * [[https://wiki.archlinux.org/title/Getty|Arch Wiki - Getty]] 
 +  * [[https://wiki.archlinux.org/title/KMSCON|Arch Wiki - KMSCON]] 
 +  * [[https://wiki.archlinux.org/title/Pam_autologin|Arch Wiki - pam_autologin]] 
 +  * [[https://github.com/kmscon/kmscon|kmscon pe GitHub]]
  
-Metoda care funcționează depinde de ce rulează pe TTY. Dacă folosești kmscon, configurează autologinul prin kmscon și ajustează ''.bashrc'' pentru ''pts/0''. Dacă nu folosești kmscon sau autologinul prin el nu funcționează pe hardware-ul tău, dezinstalează-l și folosește getty cu ''tty1''. În ambele cazuri, verifică cu ''tty'' ce terminal ai efectiv înainte să configurezi ''.bashrc''.+{{tag>debian ubuntu arch fedora opensuse tty autologin getty kmscon systemd terminal}}