Je dois admettre que j'aime les serveurs sans mot de passe dans certains cas. Un serveur typique est vulnérable à quiconque y a un accès physique. Dans certains cas, il est donc pratique de le verrouiller physiquement et de faire confiance à tout accès physique depuis lors .
Concepts de base
En théorie, lorsque j'atteins physiquement un tel serveur, je devrais pouvoir effectuer des tâches d'administration sans mot de passe en tapant simplement le root
nom de connexion et on ne devrait pas me demander de mot de passe. La même chose peut s'appliquer aux comptes d'utilisateurs, mais on n'y aurait pas vraiment accès physiquement. Par conséquent, aucun mot de passe système n'est nécessaire pour un accès local (occasionnel).
Lorsque j'accède au serveur à distance, soit pour l'administration, soit pour le compte utilisateur, je m'attends à toujours utiliser une clé privée SSH. Il est très facile de configurer une clé SSH pour un compte récemment créé et donc aucun mot de passe système n'est nécessaire pour un accès à distance (normal).
# user=...
#
# useradd -m "$user"
# sudo -i -u "$user"
$ keyurl=...
$
$ mkdir -p .ssh
$ curl -o .ssh/authorized_keys "$keyurl"
La conclusion est qu'en théorie, nous n'aurions pas besoin de mots de passe système pour des cas d'utilisation comme celui-ci. La question est donc de savoir comment configurer le système et les comptes d'utilisateurs pour que cela se produise de manière cohérente et sécurisée.
Détails d'accès local
Comment s'assurer que le compte root est accessible localement sans mot de passe? Je ne pense pas que nous puissions l'utiliser passwd -d
car cela rendra l'accès root trop permissif et un utilisateur non autorisé pourrait passer à root gratuitement, ce qui est faux. Nous ne pouvons pas l'utiliser passwd -l
car cela nous empêche de nous connecter.
Notez que l'accès local concerne exclusivement l'accès à l'aide du clavier local. Par conséquent, une solution valide ne doit autoriser aucun changement d'utilisateur (que ce soit avec su
ou sudo
).
Détails de l'accès à distance
Jusqu'à récemment, la solution ci-dessus fonctionnait, mais maintenant SSH a commencé à vérifier les comptes d'utilisateurs verrouillés. Nous ne pouvons probablement pas utiliser passwd -d
pour les mêmes raisons. Nous ne pouvons pas l'utiliser passwd -u
car il se plaint simplement que cela conduirait à ce qui se passwd -d
passe.
Il existe une solution de contournement avec un mot de passe factice pour cette partie.
user=...
echo -ne "$user:`pwgen 16`\n" | chpasswd
Il pourrait également être possible de désactiver entièrement la vérification des comptes verrouillés dans SSH, mais il serait plus agréable de conserver la prise en charge des comptes verrouillés et de pouvoir simplement les déverrouiller.
Notes finales
Ce qui m'intéresse, c'est une solution qui vous permettrait de vous connecter localement au compte root et à tous les comptes y compris root à distance, sans mot de passe. D'un autre côté, une solution ne doit pas avoir d'incidence sur la sécurité, sauf de manière explicitement décrite, en particulier en n'autorisant pas les utilisateurs distants à accéder au compte racine ou au compte d'autres utilisateurs. La solution doit être suffisamment robuste pour ne pas causer indirectement de problèmes de sécurité.
Une réponse acceptée et récompensée peut ou non décrire la configuration détaillée des outils individuels mais doit contenir les points clés pour atteindre les objectifs énoncés. Notez que ce ne peut probablement pas être résolu par l' utilisation d'outils classiques comme passwd
, ssh
, su
, sudo
et autres.
Plus d'idées après avoir lu les premières réponses
Juste une idée - l'accès root local pourrait être réalisé en démarrant des shells root au lieu de processus de connexion. Mais il reste nécessaire de verrouiller uniquement l'authentification par mot de passe, pas l'authentification par clé publique.