Comment attribuer un mot de passe initial / par défaut à un utilisateur sous Linux?

10

J'ai trouvé un guide qui explique comment définir le mot de passe d'un utilisateur . J'essaie de l'automatiser et d'envoyer un e-mail à l'utilisateur comme:

userid created with password XYZ.
request to change the initial password.

Selon le document ci-dessus, un mot de passe crypté doit être créé à l'aide de Python et alimenté à la usermodcommande comme ceci:

 usermod -p "<encrypted-password>" <username>

Existe-t-il d'autres moyens plus simples de procéder? Je ne veux télécharger aucun utilitaire spécial pour le faire; elle doit être généralisée autant que possible.


Edit : Même la méthode indiquée dans le lien ci-dessus ne semble pas fonctionner pour moi:

bash-3.00# python
Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt; print crypt.crypt("<password>","<salt>")
<sOMrcxm7pCPI
>>> ^D
bash-3.00# useradd -g other -p "sOMrcxm7pCPI" -G bin,sys -m -s /usr/bin/bash mukesh2
UX: useradd: ERROR: project sOMrcxm7pCPI does not exist.  Choose another.
UX: useradd: sOMrcxm7pCPI name should be all lower case or numeric.
munish
la source
voici un lien de plus que j'ai trouvé, mais il semble y avoir un problème de sécurité également avec l'utilisation de l'option -p usermodlorsque quelqu'un utilise pspour voir le processus répertoriant le mot de passe est visible
munish

Réponses:

13

Vous pouvez utiliser chpasswdpour le faire, comme ceci:

echo "username:newpassword" | chpasswd

Vous pouvez diriger à chpasswdpartir de programmes autres que echo, si cela vous convient, mais cela fera l'affaire.

Modifier: pour générer le mot de passe dans le script shell puis le définir, vous pouvez faire quelque chose comme ceci:

# Change username to the correct user:
USR=username
# This will generate a random, 8-character password:
PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c8`
# This will actually set the password:
echo "$USR:$PASS" | chpasswd

Pour plus d'informations sur chpasswd, voir http://linux.die.net/man/8/chpasswd

(La commande pour générer le mot de passe provenait de http://nixcraft.com/shell-scripting/13454-command-generate-random-password-string.html )

Dominick Pastore
la source
merci @Dominick hmm, chpasswd est peut-être sous AIX ... je ne l'ai pas utilisé. et chaque fois que je dois écrire un mot de passe ... ne peut-il pas être généré par le script comme dans le lien des questions ... malheureusement, même cela n'a pas fonctionné pour moi
munish
@munish Je ne sais pas trop ce que vous entendez par générer dans le script, mais j'ai mis à jour ma réponse pour, espérons-le, être plus utile.
Dominick Pastore
Ne marche pas. "Erreur de manipulation du jeton d'authentification"
Cerin
@Cerin Par hasard, faites-vous quelque chose comme ça sudo echo "username:newpass" | chpasswd? Étant donné que les autorisations élevées de sudone passent pas par le canal, chpasswdelles s'exécuteraient en tant qu'utilisateur normal. Il peut être corrigé en déplaçant le sudo, comme dans echo "username:newpass" | sudo chpasswd. Il existe également d'autres problèmes qui peuvent provoquer ce message d'erreur, mais les erreurs d'autorisation comme celle-ci sont probablement les plus courantes.
Dominick Pastore
1
Les mots de passe sur la ligne de commande peuvent être visibles par d'autres utilisateurs connectés sur la même machine à l'aide de w, ps ou d'autres commandes qui affichent des informations sur d'autres processus. Les mots de passe définis de cette manière doivent être modifiés par l'utilisateur dès que possible.
Mnebuerquo
3

Vous pouvez utiliser OpenSSL pour générer le mot de passe aléatoire (16 caractères, dans ce cas):

# 1000 bytes should be enough to give us 16 alphanumeric ones
p=$(openssl rand 1000 | strings | grep -io [[:alnum:]] | head -n 16 | tr -d '\n')

Donnez ensuite le mot de passe haché à useraddouusermod

# omit the "-1" if you want traditional crypt()
usermod -p $(openssl passwd -1 "$p") <username>

Crédit à échéance: la génération du mot de passe est adaptée à partir d'une méthode similaire qui utilise à la /dev/urandomplace de openssl.

James Sneeringer
la source
2

useradd devrait fonctionner (je l'ai fait sur Ubuntu). Vérifiez peut-être que chacun de vos arguments est correct (vous avez des groupes, le chemin est juste pour bash). Vous pouvez exécuter la commande avec juste un mot de passe et un utilisateur, puis utiliser userdel pour supprimer puis réessayer avec plus de paramètres, pour voir ce que l'on cause le problème (approche par force brute).

Il y a aussi de nouveaux utilisateurs (voir la page de manuel), au moins sous Ubuntu, où vous lui donnez un fichier avec un fichier passwd comme info, y compris des mots de passe en texte brut et il créera ces utilisateurs. Belle façon de faire de nombreux utilisateurs à la fois.

pcm
la source
+1 pour avoir mentionné la newuserscommande pour Ubuntu
Levon
1

moyen le plus simple que j'ai trouvé:


PASSWD="mySeCr3t-default-pa55" 
echo ${PASSWD} | passwd --stdin username_here
MelBurslan
la source
Avez-vous même testé cela? passwd: unrecognized option '--stdin'
Cerin
Oui, je l'ai utilisé plusieurs fois mais, comme avec presque toutes les autres commandes, ce n'est pas la solution de facto au problème en question. Certaines variantes du binaire passwd ne prennent pas en charge le commutateur --stdin.
MelBurslan