Script d'ajout d'utilisateurs

Bonjour/bonsoir,

Je suis en train de faire un script pour ajouter des utilisateurs à partir d’un fichier avec les noms, mot de passe, shell de telles sortes :

charles,lovelinux,sh
julien,lovebash,bash
jesaispas,secret,sh

Mon script ressemble à :

# ! /bin/bash
while read ligne; do
user=`echo "$ligne" | cut -d , -f 1`
mdp=`echo "$ligne" | cut -d , -f 2`
shell=`echo "$ligne" | cut -d , -f 3`
useradd "$user" -m -s "/bin/$shell"
echo "$user:$mdp" | chpasswd
done < /root/verswindows/ah.txt

Le souci c’est qu’après plusieurs tests il devrait fonctionner logiquement mais ce n’est pas le cas sauf si j’édite le fichier passwd en ajoutant un caractère, puis je le supprime. Du coup on pourrait croire que le fichier a besoin d’être rafraîchi mais en redémarrant ça ne change rien.

Merci de m’aider !

Bonsoir Couscous

Je me suis permis de modifier l’apparence du contenu de ton script
en le faisant précéder et suivre d’une ligne ne contenant que 3 bacticks


Voir : 
https://www.debian-fr.org/t/tuto-en-ligne-presentation-de-ses-messages-sur-ce-forum/73065



----------
Pas besoin de calculer le hash des mots de passe,
car la commande **newusers** n'a besoin que du mot de passe en "clair"
et elle assignera aussi **UID** **GID** de l'utilisateur

---------
Alors en se basant sur le fichier que tu as donné,
si le contenu du fichier **/root/verswindows/ah.txt**
est le suivant :

charles,lovelinux,sh
julien,lovebash,bash
jesaispas,secret,sh


voilà le contenu de ton script légèrement modifié,
qu'il te faudra bien sûr, lancer avec les privilèges du compte **root**

#!/bin/bash

maregex="(.),(.),(.*)"

while read ligne; do
[[ “${ligne}” =~ ${maregex} ]] &&
echo “${BASH_REMATCH[1]}:${BASH_REMATCH[2]}::::/home/${BASH_REMATCH[1]}:/bin/${BASH_REMATCH[3]}” | newusers
done < /root/verswindows/ah.txt

salut,

rtfm newusers

Salut

J’ai bien lu la page man, et je suis ouvert à toute autre proposition de syntaxe qui pourrait fonctionner.

Mais je crois qu’un bon vieux bug dans cette commande n’a toujours pas été résolu,
car j’ai aussi et surtout testé en vain la commande (avec plusieurs comptes à créer dans le même fichier comme demandé) pour en arriver finalement à proposer quelque chose de fonctionnel, même si ça ne correspondait pas à la syntaxe proposée dans la page man de cette commande.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=756630
https://bugs.launchpad.net/linuxmint/+bug/1692882
https://lists.ubuntu.com/archives/foundations-bugs/2014-January/177624.html

oops, je n’avais pas lu ta réponse, et donc pas vu que tu proposais déjà newusers :frowning:
je m’adressais à couscous.

Ahh! OK, je pensais que tu ne t’étais pas aperçu de ce bug
et que donc tu avais fait comme moi qui n’avais au début seulement que proposé de lire la page man de cette commande, mais après quelques essais ratés…

Et finalement, c’est vrai que comme la commande newusers est “cachée”…
car elle est tout en bout de la ligne…

je ne vois pas de bug sur ArchLinux : les utilisateurs sont créés et je peux me connecter à leur compte.
et pas de Debian sous la main… :grimacing:

De mon côté, mes tests n’ont été faits qu’avec la version stable de debian
=> (paquetage passwd 1:4.2-3+deb8u4)

Peut-être qu’avec la version à venir le bug de newusers est corrigé,
mais je n’ai pas essayé.


EDIT : Après avoir testé depuis la version sid actuelle,
la commande newusers n’a toujours pas été débuggée,
mais le script ci-dessus fonctionne correctement sur la sid

peux-tu essayer de _pipe_r la boucle vers newusers ?
soit ça echoue, et alors le “bug” vient de la lecture de plusieurs comptes;
soit ça fonctionne, et c’est la lecture du fichier qui échoue…

D’après mes tests, et en me basant sur la page du manuel,
j’avais réussi à faire accepter à la commande newusers un fichier qui ne contenait qu’un user,
mais dès qu’il y en avait plusieurs, ça plantait.

depuis Jessie :

root@srvTest3:~# ls -l /home
total 4
drwxr-xr-x 8 michel michel 4096 mai   23 23:53 michel
root@srvTest3:~# 
root@srvTest3:~# cat NouveauxUtilisateurs.txt 
charles:lovelinux:::charles,,,:/home/charles:/bin/sh
julien:lovebash:::julien,,,:/home/julien:/bin/bash
jesaispas:secret:::jesaispas,,,:/home/jesaispas:/bin/sh
root@srvTest3:~# 
root@srvTest3:~# newusers NouveauxUtilisateurs.txt
*** Error in `newusers': free(): invalid next size (fast): 0x000055e942e10e10 ***
Abandon
root@srvTest3:~# 
root@srvTest3:~# ls -l /home
total 16
drwxr-xr-x 2   1001   1001 4096 mai   25 18:14 charles
drwxr-xr-x 2   1003   1003 4096 mai   25 18:14 jesaispas
drwxr-xr-x 2   1002   1002 4096 mai   25 18:14 julien
drwxr-xr-x 8 michel michel 4096 mai   23 23:53 michel
root@srvTest3:~# 

Il n’a que créé les répertoire personnels : on ne voit que les numéros d’UID GUI

=======
Mais ça fonctionne très bien pour un seul utilisateur dans la liste :

root@srvTest3:~# rm -fr /home/{jesaispas,charles,julien}/
root@srvTest3:~# 
root@srvTest3:~# cat nouvelUtilisateur.txt 
jesaispas:secret:::jesaispas,,,:/home/jesaispas:/bin/sh
root@srvTest3:~# 
root@srvTest3:~# newusers nouvelUtilisateur.txt 
root@srvTest3:~# 
root@srvTest3:~# ls -l /home
total 8
drwxr-xr-x 2 jesaispas jesaispas 4096 mai   25 18:17 jesaispas
drwxr-xr-x 8 michel    michel    4096 mai   23 23:53 michel
root@srvTest3:~# 

======
Sur sid :

root@debsid:~# cat NouveauxUtilisateurs.txt 
charles:lovelinux:::charles,,,:/home/charles:/bin/sh
julien:lovebash:::julien,,,:/home/julien:/bin/bash
jesaispas:secret:::jesaispas,,,:/home/jesaispas:/bin/sh
root@debsid:~# 
root@debsid:~# newusers NouveauxUtilisateurs.txt
*** Error in `newusers': double free or corruption (!prev): 0x000055fa56d6dfc0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x70bcb)[0x7f14977b1bcb]
/lib/x86_64-linux-gnu/libc.so.6(+0x76f96)[0x7f14977b7f96]
/lib/x86_64-linux-gnu/libc.so.6(+0x7778e)[0x7f14977b878e]
newusers(+0xacf7)[0x55fa55235cf7]
newusers(+0x8af5)[0x55fa55233af5]
newusers(+0x8cae)[0x55fa55233cae]
newusers(+0x6189)[0x55fa55231189]
newusers(+0x4153)[0x55fa5522f153]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x7f14977612b1]
newusers(+0x523a)[0x55fa5523023a]
======= Memory map: ========
55fa5522b000-55fa5523b000 r-xp 00000000 fe:01 2304                       /usr/sbin/newusers
55fa5543b000-55fa5543c000 r--p 00010000 fe:01 2304                       /usr/sbin/newusers
55fa5543c000-55fa5543f000 rw-p 00011000 fe:01 2304                       /usr/sbin/newusers
55fa56d52000-55fa56d9c000 rw-p 00000000 00:00 0                          [heap]
7f1490000000-7f1490021000 rw-p 00000000 00:00 0 
7f1490021000-7f1494000000 ---p 00000000 00:00 0 
7f149622a000-7f1496240000 r-xp 00000000 fe:01 132323                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f1496240000-7f149643f000 ---p 00016000 fe:01 132323                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f149643f000-7f1496440000 r--p 00015000 fe:01 132323                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f1496440000-7f1496441000 rw-p 00016000 fe:01 132323                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f1496441000-7f149644b000 r-xp 00000000 fe:01 138291                     /lib/x86_64-linux-gnu/libnss_files-2.24.so
7f149644b000-7f149664b000 ---p 0000a000 fe:01 138291                     /lib/x86_64-linux-gnu/libnss_files-2.24.so
7f149664b000-7f149664c000 r--p 0000a000 fe:01 138291                     /lib/x86_64-linux-gnu/libnss_files-2.24.so
7f149664c000-7f149664d000 rw-p 0000b000 fe:01 138291                     /lib/x86_64-linux-gnu/libnss_files-2.24.so
7f149664d000-7f1496653000 rw-p 00000000 00:00 0 
7f1496653000-7f149665e000 r-xp 00000000 fe:01 138297                     /lib/x86_64-linux-gnu/libnss_nis-2.24.so
7f149665e000-7f149685d000 ---p 0000b000 fe:01 138297                     /lib/x86_64-linux-gnu/libnss_nis-2.24.so
7f149685d000-7f149685e000 r--p 0000a000 fe:01 138297                     /lib/x86_64-linux-gnu/libnss_nis-2.24.so
7f149685e000-7f149685f000 rw-p 0000b000 fe:01 138297                     /lib/x86_64-linux-gnu/libnss_nis-2.24.so
7f149685f000-7f1496873000 r-xp 00000000 fe:01 138287                     /lib/x86_64-linux-gnu/libnsl-2.24.so
7f1496873000-7f1496a73000 ---p 00014000 fe:01 138287                     /lib/x86_64-linux-gnu/libnsl-2.24.so
7f1496a73000-7f1496a74000 r--p 00014000 fe:01 138287                     /lib/x86_64-linux-gnu/libnsl-2.24.so
7f1496a74000-7f1496a75000 rw-p 00015000 fe:01 138287                     /lib/x86_64-linux-gnu/libnsl-2.24.so
7f1496a75000-7f1496a77000 rw-p 00000000 00:00 0 
7f1496a77000-7f1496a7e000 r-xp 00000000 fe:01 138289                     /lib/x86_64-linux-gnu/libnss_compat-2.24.so
7f1496a7e000-7f1496c7d000 ---p 00007000 fe:01 138289                     /lib/x86_64-linux-gnu/libnss_compat-2.24.so
7f1496c7d000-7f1496c7e000 r--p 00006000 fe:01 138289                     /lib/x86_64-linux-gnu/libnss_compat-2.24.so
7f1496c7e000-7f1496c7f000 rw-p 00007000 fe:01 138289                     /lib/x86_64-linux-gnu/libnss_compat-2.24.so
7f1496c7f000-7f1496c97000 r-xp 00000000 fe:01 142816                     /lib/x86_64-linux-gnu/libpthread-2.24.so
7f1496c97000-7f1496e96000 ---p 00018000 fe:01 142816                     /lib/x86_64-linux-gnu/libpthread-2.24.so
7f1496e96000-7f1496e97000 r--p 00017000 fe:01 142816                     /lib/x86_64-linux-gnu/libpthread-2.24.so
7f1496e97000-7f1496e98000 rw-p 00018000 fe:01 142816                     /lib/x86_64-linux-gnu/libpthread-2.24.so
7f1496e98000-7f1496e9c000 rw-p 00000000 00:00 0 
7f1496e9c000-7f1496ea0000 r-xp 00000000 fe:01 131624                     /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7f1496ea0000-7f14970a0000 ---p 00004000 fe:01 131624                     /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7f14970a0000-7f14970a1000 r--p 00004000 fe:01 131624                     /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7f14970a1000-7f14970a2000 rw-p 00005000 fe:01 131624                     /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
7f14970a2000-7f1497114000 r-xp 00000000 fe:01 131693                     /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7f1497114000-7f1497313000 ---p 00072000 fe:01 131693                     /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7f1497313000-7f1497314000 r--p 00071000 fe:01 131693                     /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7f1497314000-7f1497315000 rw-p 00072000 fe:01 131693                     /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7f1497315000-7f1497318000 r-xp 00000000 fe:01 138281                     /lib/x86_64-linux-gnu/libdl-2.24.so
7f1497318000-7f1497517000 ---p 00003000 fe:01 138281                     /lib/x86_64-linux-gnu/libdl-2.24.so
7f1497517000-7f1497518000 r--p 00002000 fe:01 138281                     /lib/x86_64-linux-gnu/libdl-2.24.so
7f1497518000-7f1497519000 rw-p 00003000 fe:01 138281                     /lib/x86_64-linux-gnu/libdl-2.24.so
7f1497519000-7f1497536000 r-xp 00000000 fe:01 131677                     /lib/x86_64-linux-gnu/libaudit.so.1.0.0
7f1497536000-7f1497735000 ---p 0001d000 fe:01 131677                     /lib/x86_64-linux-gnu/libaudit.so.1.0.0
7f1497735000-7f1497736000 r--p 0001c000 fe:01 131677                     /lib/x86_64-linux-gnu/libaudit.so.1.0.0
7f1497736000-7f1497737000 rw-p 0001d000 fe:01 131677                     /lib/x86_64-linux-gnu/libaudit.so.1.0.0
7f1497737000-7f1497741000 rw-p 00000000 00:00 0 
7f1497741000-7f14978d6000 r-xp 00000000 fe:01 138276                     /lib/x86_64-linux-gnu/libc-2.24.so
7f14978d6000-7f1497ad5000 ---p 00195000 fe:01 138276                     /lib/x86_64-linux-gnu/libc-2.24.so
7f1497ad5000-7f1497ad9000 r--p 00194000 fe:01 138276                     /lib/x86_64-linux-gnu/libc-2.24.so
7f1497ad9000-7f1497adb000 rw-p 00198000 fe:01 138276                     /lib/x86_64-linux-gnu/libc-2.24.so
7f1497adb000-7f1497adf000 rw-p 00000000 00:00 0 
7f1497adf000-7f1497ae7000 r-xp 00000000 fe:01 138279                     /lib/x86_64-linux-gnu/libcrypt-2.24.so
7f1497ae7000-7f1497ce7000 ---p 00008000 fe:01 138279                     /lib/x86_64-linux-gnu/libcrypt-2.24.so
7f1497ce7000-7f1497ce8000 r--p 00008000 fe:01 138279                     /lib/x86_64-linux-gnu/libcrypt-2.24.so
7f1497ce8000-7f1497ce9000 rw-p 00009000 fe:01 138279                     /lib/x86_64-linux-gnu/libcrypt-2.24.so
7f1497ce9000-7f1497d17000 rw-p 00000000 00:00 0 
7f1497d17000-7f1497d3c000 r-xp 00000000 fe:01 138034                     /lib/x86_64-linux-gnu/libselinux.so.1
7f1497d3c000-7f1497f3b000 ---p 00025000 fe:01 138034                     /lib/x86_64-linux-gnu/libselinux.so.1
7f1497f3b000-7f1497f3c000 r--p 00024000 fe:01 138034                     /lib/x86_64-linux-gnu/libselinux.so.1
7f1497f3c000-7f1497f3d000 rw-p 00025000 fe:01 138034                     /lib/x86_64-linux-gnu/libselinux.so.1
7f1497f3d000-7f1497f3f000 rw-p 00000000 00:00 0 
7f1497f3f000-7f1497f42000 r-xp 00000000 fe:01 131698                     /lib/x86_64-linux-gnu/libpam_misc.so.0.82.0
7f1497f42000-7f1498141000 ---p 00003000 fe:01 131698                     /lib/x86_64-linux-gnu/libpam_misc.so.0.82.0
7f1498141000-7f1498142000 r--p 00002000 fe:01 131698                     /lib/x86_64-linux-gnu/libpam_misc.so.0.82.0
7f1498142000-7f1498143000 rw-p 00003000 fe:01 131698                     /lib/x86_64-linux-gnu/libpam_misc.so.0.82.0
7f1498143000-7f1498150000 r-xp 00000000 fe:01 131697                     /lib/x86_64-linux-gnu/libpam.so.0.83.1
7f1498150000-7f149834f000 ---p 0000d000 fe:01 131697                     /lib/x86_64-linux-gnu/libpam.so.0.83.1
7f149834f000-7f1498350000 r--p 0000c000 fe:01 131697                     /lib/x86_64-linux-gnu/libpam.so.0.83.1
7f1498350000-7f1498351000 rw-p 0000d000 fe:01 131697                     /lib/x86_64-linux-gnu/libpam.so.0.83.1
7f1498351000-7f1498374000 r-xp 00000000 fe:01 131920                     /lib/x86_64-linux-gnu/ld-2.24.so
7f14983bc000-7f1498557000 r--p 00000000 fe:01 33816                      /usr/lib/locale/locale-archive
7f1498557000-7f149855d000 rw-p 00000000 00:00 0 
7f1498570000-7f1498574000 rw-p 00000000 00:00 0 
7f1498574000-7f1498575000 r--p 00023000 fe:01 131920                     /lib/x86_64-linux-gnu/ld-2.24.so
7f1498575000-7f1498576000 rw-p 00024000 fe:01 131920                     /lib/x86_64-linux-gnu/ld-2.24.so
7f1498576000-7f1498577000 rw-p 00000000 00:00 0 
7ffc89ec4000-7ffc89ee5000 rw-p 00000000 00:00 0                          [stack]
7ffc89ff0000-7ffc89ff2000 r--p 00000000 00:00 0                          [vvar]
7ffc89ff2000-7ffc89ff4000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Abandon
root@debsid:~# 
root@debsid:~# ls -l /home/
total 12
drwxr-xr-x  2   1001   1001 4096 mai   25 18:22 charles
drwxr-xr-x  2   1002   1002 4096 mai   25 18:22 julien
drwxr-xr-x 21 michel michel 4096 mai   25 18:21 michel
root@debsid:~# 

Tiens! ci-dessus, il n’a même pas tenu compte le dernier compte à créer de la liste (jesaispas)

root@debsid:~# rm -fr /home/{charles,julien}/
root@debsid:~# 
root@debsid:~# cat nouvelUtilisateur.txt 
jesaispas:secret:::jesaispas,,,:/home/jesaispas:/bin/sh
root@debsid:~# 
root@debsid:~# newusers nouvelUtilisateur.txt 
root@debsid:~# 
root@debsid:~# ls -l /home/
total 8
drwxr-xr-x  2 jesaispas jesaispas 4096 mai   25 18:26 jesaispas
drwxr-xr-x 21 michel    michel    4096 mai   25 18:21 michel
root@debsid:~# 

Bonjour,

Pour finir ça fonctionne depuis que j’ai ajouté une virgule à la fin de mon fichier texte :

bourgeois,ilovelinux,bash,
lenain,lpsselcelc,sh,
mejdoub,ahlala,bash,
zola,pasla,sh,
baleine,1234567,bash,

Et comme je comprenais pas la syntaxe utilisée plus haut donc j’ai continué avec mon script :

#!/bin/bash
while read ligne; do
user=`echo "$ligne" | cut -d , -f 1`
mdp=`echo "$ligne" | cut -d , -f 2`
shell=`echo "$ligne" | cut -d , -f 3`
echo "$user":"$mdp"::::/home/"$users":/bin/"$shell" | newusers
done < /root/verswindows/ah.txt

Désolé pour la syntaxe MicP et merci à vous !

A mon avis le bug est à cause du fichier texte car on prenait en même temps le caractère du saut à la ligne

Bonsoir Couscous

Je me suis permis de modifier l’apparence du contenu de ton script en le faisant précéder et suivre d’une ligne ne contenant que 3 bacticks



----------

 Voir : 
https://www.debian-fr.org/t/tuto-en-ligne-presentation-de-ses-messages-sur-ce-forum/73065

K.I.S.S.*
:

while IFS=',' read user mdp shell
do
   newusers <<<"$user:$mdp::::/home/$user:/bin/$shell"
   # si la ligne précédente ne fonctionne pas :
   # echo "$user:$mdp::::/home/$user:/bin/$shell" | newusers
done </root/verswindows/ah.txt

*Keep It Simple Stupid

Impec ! même pas besoin de la seconde ligne

C’est toujours un plaisir de voir comment on peut simplifier les choses :grinning:

mauvaise nouvelle : j’ai rebranché une Debian Jessie (passwd: 1:4.2-3+deb8u4) pour tester newusers,
et ça fonctionne sans problèmes.

désolé :smiley:

Je viens de re-éssayer, même après une mise à jour, et je retrouve le même retour :
Dès qu’il y a plus d’un compte utilisateur (<=> plusieurs lignes dans le fichier) ça plante comme dans le message que j’avais donné plus haut

mystère… :upside_down:

Je viens d’ouvrir un fil de discussion à ce sujet :