Autologin în TTY

Autologin în TTY

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ă monitor, kioscuri, dispozitive de scris), sau orice situație în care autentificarea manuală este inutilă.

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.

Concepte de bază

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:

  • 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

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.

Poți verifica oricând ce tip de terminal folosești cu:

tty

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:

sudo mkdir -p /etc/systemd/system/getty@tty1.service.d/
sudo nano /etc/systemd/system/getty@tty1.service.d/autologin.conf

Conținutul fișierului:

[Service]
ExecStart=
ExecStart=-/sbin/agetty --noreset --noclear --autologin USERUL_TAU - ${TERM}

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:

sudo systemctl daemon-reload
sudo reboot
Notă: Opțiunea Type=idle din getty@.service implicit întârzie pornirea serviciului până când toate unitățile systemd sunt pornite, pentru a 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):

[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --noreset --noclear --autologin USERUL_TAU --keep-baud 115200,57600,38400,9600 - ${TERM}

Consolă nspawn

Pentru containere systemd-nspawn, suprascrie console-getty.service:

sudo mkdir -p /etc/systemd/system/console-getty.service.d/
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --noreset --noclear --autologin USERUL_TAU --keep-baud 115200,57600,38400,9600 - ${TERM}

Doar parola, fără username

Dacă vrei să sari peste introducerea username-ului dar să ceri în continuare parola:

[Service]
ExecStart=
ExecStart=-/usr/bin/agetty -o '-- USERUL_TAU' --skip-login --noreset --noclear - ${TERM}

Note pentru distribuții

Calea către agetty poate varia în funcție de versiune. Verifică cu which agetty - poate fi /sbin/agetty sau /usr/sbin/agetty.

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:

sudo systemctl edit getty@tty1.service

Metoda funcționează identic. Dacă autologinul nu funcționează, verifică jurnalul și eventualele refuzuri SELinux:

journalctl -u getty@tty1 -b
ausearch -m avc -ts recent

Metoda systemd standard funcționează fără modificări suplimentare.

Metoda 2: Autologin prin 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

sudo pacman -S kmscon

Pe Debian Trixie (13), kmscon este disponibil din backports:

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

kmscon nu este disponibil în depozitele oficiale. Trebuie compilat din sursă de pe GitHub.

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:

sudo systemctl disable getty@tty1.service
sudo systemctl enable kmsconvt@tty1.service

Pentru a înlocui agetty pe toate terminalele virtuale:

sudo systemctl disable getty@.service
sudo systemctl enable kmsconvt@.service
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:

# Autologin ca utilizatorul "username"
login=/usr/bin/login -p -f username

Autologin prin override de serviciu

Alternativ, prin fișier drop-in systemd:

sudo mkdir -p /etc/systemd/system/kmsconvt@tty1.service.d/
sudo nano /etc/systemd/system/kmsconvt@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=/usr/bin/kmscon --login -- /bin/login -f USERUL_TAU
sudo systemctl daemon-reload
sudo reboot

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

pam_autologin este un modul PAM care, spre deosebire de celelalte metode, salvează parola și o folosește în procesul normal de autentificare. Aceasta î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

yay -S pam-autologin

pam_autologin nu este disponibil în depozitele oficiale. Trebuie compilat din sursă.

Configurare

Editează /etc/pam.d/login:

#%PAM-1.0
auth    required pam_autologin.so
auth    include  system-local-login
account include  system-local-login
session include  system-local-login

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:

[Service]
ExecStart=
ExecStart=-/sbin/agetty --skip-login --noreset --noclear - ${TERM}

Salvează primul login creând fișierul de configurare:

sudo touch /etc/security/autologin.conf

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ă:

auth required pam_autologin.so always

Pentru a opri autologinul, șterge fișierul de configurare cu shred (nu cu rm) deoarece fișierul conține credențiale obfuscate:

sudo shred -u /etc/security/autologin.conf

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:

tty

Adaugă în ~/.bashrc:

if [ -z "${TMUX}" ] && [ "$(tty)" == "/dev/tty1" ]; then
    exec tmux new-session -d 'nvim' \; attach
fi

if [ -z "${TMUX}" ] && [ "$(tty)" == "/dev/pts/0" ]; then
    exec tmux new-session -d 'nvim' \; attach
fi

Condiția [ -z „${TMUX}“ ] previne pornirea recursivă a tmux în interiorul unei sesiuni tmux existente.

Depanare

Autologinul nu funcționează după configurare:

sudo systemctl status getty@tty1.service
journalctl -u getty@tty1.service -b

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:

sudo systemctl list-units | grep -E 'getty|kmscon'

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:

Verifică dacă pam_securetty este activ în /etc/pam.d/login. Dacă da, dezactivează-l comentând linia corespunzătoare.

Referințe