6 votes

Modifier les mots de passe de tous les utilisateurs d'un serveur Linux

J'ai 10 serveurs Linux que je dois verrouiller en réinitialisant les mots de passe de chaque utilisateur en une seule fois. L'histoire est longue, mais l'idée générale est que cela doit se faire très rapidement et à un moment précis. Je vais utiliser un seul mot de passe difficile pour tous les comptes utilisateurs (juste au début), donc cela n'a pas besoin de lire un fichier de mots de passe ou quoi que ce soit de ce genre.

J'ai donc besoin de la meilleure façon de script cela afin que je puisse réinitialiser tous les mots de passe en une seule fois. Je peux extraire une liste des comptes utilisateurs avec la commande cat /etc/passwd | cut -f1 -d: mais cela finit par inclure tous les comptes, y compris les comptes système avec lesquels je suppose qu'il ne faut pas jouer.

Quelle est donc ma meilleure option ?

REMARQUE ! Lors de la réinitialisation des mots de passe, vous devez également vous assurer d'effacer tout élément supplémentaire de la base de données. ~/.ssh/authorized_keys dossier. Je ne m'en suis souvenu qu'après - heureusement, j'avais bien verrouillé les serveurs et il n'y avait rien dans authorized_keys à part des trucs entre serveurs.

5voto

Howiecamp Points 171

Vous pouvez sélectionner les UID >= 500 pour vous assurer que vous n'obtenez que des utilisateurs réels et non des comptes système, puis utiliser l'option --stdin de passwd pour modifier le mot de passe.

Une solution de ce type devrait fonctionner :

 while IFS=: read u x nn rest; do  if [ $nn -ge 500 ]; then echo "YOURSTRONGPASSWORD" |passwd --stdin $u; fi  done < /etc/passwd

4voto

ewwhite Points 193555

Vous pouvez utiliser quelque chose comme la commande "newusers" pour mettre à jour les mots de passe des utilisateurs en mode batch. Créez un fichier contenant les combinaisons utilisateur:mot de passe et chargez-le via newusers... Le mot de passe est saisi en clair, mais il sera crypté au cours du processus.

newusers userpass.txt

userpass.txt ressemblerait au fichier /etc/passwd. Même format.

Je copierais /etc/passwd dans un nouveau fichier, supprimerais les lignes relatives aux comptes système et remplacerais le deuxième champ, "x", par le mot de passe générique que vous souhaitez utiliser, puis réimporterais en utilisant la commande newusers.

2voto

Phil P Points 3020

Modifiez la base de données des ombres avec :

vipw -s

ce qui verrouillera également le fichier contre les mises à jour, puis utilisez votre éditeur de texte pour remplacer le deuxième champ de chaque ligne comportant un champ pw.

Par exemple, utiliser :

$ openssl rand -base64 12
gw9H5sqr8YioMdwd
$ openssl passwd -1
Password: 
Verifying - Password: 
$1$Nx/XBIYy$JGPhkX8DC9uJqggEFuKxP0

puis, en tant que root, utilisez vipw -s ; en supposant que votre texte $EDITOR/$VISUAL soit vi(m), vipw vous y plongera et vous pourrez le faire :

:g/^[^:]*:[^*!:][^:]*:/s,:[^:]*,:$1$Nx/XBIYy$JGPhkX8DC9uJqggEFuKxP0:,

qui est une recherche de motif de base, et sur les lignes correspondant à ce motif, effectue une substitution (une seule fois par ligne). La recherche par motif exclut les lignes dont le champ mot de passe est '!' ou '*', et ne définit donc les mots de passe que pour les utilisateurs dont le mot de passe est déjà défini, quel que soit l'uid ; cela vous protégera contre les cas où un système d'empaquetage a créé un compte "système" avec un uid élevé ou toute autre absurdité produite par un empaqueteur.

Notez que cette opération réinitialisera également le mot de passe root. Si vous voulez exclure cela, et que root est sur la première ligne, remplacez le :g initial par :2,$g

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X