Debo admitir que me gustan los servidores sin contraseñas en algunos casos. Un servidor típico es vulnerable a cualquiera que tenga acceso físico a él. Entonces, en algunos casos es práctico bloquearlo físicamente y desde entonces confiar en cualquier acceso físico.
Conceptos básicos
En teoría, cuando llegue físicamente a dicho servidor, debería poder realizar tareas de administración sin contraseña simplemente escribiendo root
como inicio de sesión y no se me debe pedir una contraseña. Lo mismo puede aplicarse a las cuentas de usuario, pero en realidad no se accedería físicamente a ellas. Por lo tanto, no se necesitan contraseñas del sistema para el acceso local (ocasional).
Al acceder al servidor de forma remota, ya sea para la administración o para la cuenta de usuario, espero usar siempre una clave privada SSH. Es muy fácil configurar una clave SSH para una cuenta recién creada y, por lo tanto, no se necesitan contraseñas del sistema para el acceso remoto (regular).
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
La conclusión es que, en teoría, no necesitaríamos ninguna contraseña del sistema para casos de uso como ese. Entonces, la pregunta es, ¿cómo configuramos el sistema y las cuentas de usuario para que suceda de una manera consistente y segura?
Detalles de acceso local
¿Cómo nos aseguramos de que se pueda acceder localmente a la cuenta raíz sin una contraseña? No creo que podamos usarlo, passwd -d
ya que esto hará que el acceso a la raíz sea demasiado permisivo y un usuario sin privilegios podría cambiar a la raíz de forma gratuita, lo cual está mal. No podemos usarlo passwd -l
ya que nos impide iniciar sesión.
Tenga en cuenta que el acceso local se trata exclusivamente del acceso mediante el teclado local. Por lo tanto, una solución válida no debe permitir ningún cambio de usuario (ya sea usando su
o sudo
).
Detalles de acceso remoto
Hasta hace poco, la solución anterior funcionaría, pero ahora SSH comenzó a buscar cuentas de usuario bloqueadas. Probablemente no podamos usarlo passwd -d
por las mismas razones. No podemos usarlo, passwd -u
ya que solo se queja de que conduciría a lo que passwd -d
hace.
Hay una solución alternativa con contraseña ficticia para esta parte.
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
También podría ser posible desactivar por completo la cuenta bloqueada en SSH, pero sería mejor retener el soporte de cuentas bloqueadas y simplemente poder desbloquearlas.
Notas finales
Lo que me interesa es una solución que le permita iniciar sesión en la cuenta raíz localmente y en todas las cuentas, incluida la raíz de forma remota, sin ninguna contraseña. Por otro lado, una solución no debe afectar la seguridad, excepto en formas explícitamente descritas, especialmente no permitiendo que los usuarios remotos tengan acceso a la cuenta raíz u otra cuenta de usuario. La solución debe ser lo suficientemente robusta para que no cause problemas de seguridad indirectamente.
Una respuesta aceptada y premiada puede o no describir la configuración detallada de herramientas individuales, pero debe contener los puntos clave para alcanzar los objetivos establecidos. Tenga en cuenta que esto probablemente no puede ser resuelto a través del uso convencional de herramientas como passwd
, ssh
, su
, sudo
y similares.
Más ideas después de leer las primeras respuestas.
Solo una idea: el acceso raíz local podría lograrse iniciando shells raíz en lugar de procesos de inicio de sesión. Pero todavía existe la necesidad de bloquear solo la autenticación de contraseña, no la autenticación de clave pública.