Devo ammettere che in alcuni casi mi piacciono i server senza password. Un server tipico è vulnerabile a chiunque abbia accesso fisico ad esso. Quindi in alcuni casi è pratico bloccarlo fisicamente e da allora fidarsi di qualsiasi accesso fisico.
Concetti basilari
In teoria, quando raggiungo fisicamente un server di questo tipo, dovrei essere in grado di eseguire attività di amministrazione senza password semplicemente digitando root
come login e non dovrei chiedermi una password. Lo stesso può valere per gli account utente ma non si accede realmente ad essi fisicamente. Pertanto non sono necessarie password di sistema per l'accesso locale (occasionale).
Quando accedo al server in remoto, per l'amministrazione o per l'account utente, mi aspetto di utilizzare sempre una chiave privata SSH. È molto semplice impostare una chiave SSH per un account appena creato e quindi non sono necessarie password di sistema per l'accesso remoto (regolare).
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
La conclusione è che, in teoria, non avremmo neeed eventuali password di sistema per i casi d'uso del genere. Quindi la domanda è: come possiamo configurare il sistema e gli account utente per farlo accadere in modo coerente e sicuro.
Dettagli di accesso locale
Come possiamo garantire che sia possibile accedere all'account root localmente senza password? Non penso che possiamo usarlo passwd -d
perché ciò renderebbe l'accesso alla radice troppo permissivo e un utente non privilegiato potrebbe passare a root gratuitamente, il che è sbagliato. Non possiamo utilizzarlo passwd -l
perché ci impedisce di accedere.
Si noti che l'accesso locale riguarda esclusivamente l'accesso mediante la tastiera locale. Pertanto, una soluzione valida non deve consentire la commutazione dell'utente (se si utilizza su
o sudo
).
Dettagli di accesso remoto
Fino a poco tempo fa la soluzione sopra avrebbe funzionato, ma ora SSH ha iniziato a verificare la presenza di account utente bloccati. Probabilmente non possiamo usare passwd -d
per gli stessi motivi. Non possiamo usare passwd -u
perché si lamenta solo che porterebbe a quello che passwd -d
fa.
C'è una soluzione alternativa con password fittizia per questa parte.
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
Potrebbe anche essere possibile disattivare completamente il controllo degli account bloccati in SSH, ma sarebbe meglio conservare il supporto degli account bloccati e riuscire a sbloccarli.
Note finali
Ciò che mi interessa è una soluzione che ti consenta di accedere all'account root localmente e a tutti gli account, incluso root da remoto, senza password. D'altra parte, una soluzione non deve influire sulla sicurezza se non in modi esplicitamente descritti, in particolare non consentendo agli utenti remoti di accedere all'account di root o all'account di altri utenti. La soluzione dovrebbe essere sufficientemente solida da non causare indirettamente problemi di sicurezza.
Una risposta accettata e premiata può o meno descrivere una configurazione dettagliata dei singoli strumenti, ma deve contenere i punti chiave per raggiungere gli obiettivi dichiarati. Si noti che questo probabilmente non può essere risolto con l'uso convenzionale di strumenti come passwd
, ssh
, su
, sudo
e simili.
Altre idee dopo aver letto le prime risposte
Solo un'idea: l'accesso root locale potrebbe essere ottenuto avviando shell root anziché processi di login. Ma c'è ancora la necessità di bloccare solo l'autenticazione con password, non l'autenticazione con chiave pubblica.