Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
script bash
Envoyé par: techafi

bonjour,

voila j'ai un script pour créer des utilisateurs avec un fichier rempli
mais cela ne fonctionne pas.
je voulais savoir si la syntaxe est bonne?
si il faut créer l'utilisateur avec useradd puis changer le mot de passe?

le fichier comptes.txt est fait comme ceci
login mdp groupe

les variables sont les suivantes :
$1 login
$2 pour le mot de passe
$3 pour le groupe


cat comptes.txt | while true ; do
read ligne
set -- $ligne
useradd $1 -d /home/$3 -s /bin/false
$2|passwd --stdin $1
done

Poste le Thursday 6 March 2008 17:33:07
Répondre     Citer    
Re: script bash
Envoyé par: MrHarry

Salut, winking smiley
Exemple :

#!/bin/bash

cat comptes.txt |
{
  while read ligne; do
    set "${ligne}";
    echo "login:${1}  mot de passe:${2}  groupe:${3}";
  done;
} 
exit 0

Bye

Poste le Saturday 8 March 2008 17:59:50
Répondre     Citer    
Re: script bash
Envoyé par: MrHarry

Hello,
[correctif] :-))
Exemples :
#!/bin/bash
echo -e "Exemple 1 :\n";

IFS=$' ';
cat comptes.txt |
{
	while read ligne; do
		set ${ligne};
		echo "login:${1}  mot de passe:${2}  groupe:${3}";
	done;
} 

echo -e "\nExemple 2 :\n";

IFS=$'\n';
for ligne in $(cat comptes.txt); do
		set ${ligne};
		echo "login:${1}  mot de passe:${2}  groupe:${3}";
done;

echo -e "\nExemple 3 :\n";

IFS=$' ';
while read ligne; do 
		set ${ligne};
		echo "login:${1}  mot de passe:${2}  groupe:${3}";
done < comptes.txt

exit 0

Bye ;-p

Poste le Saturday 8 March 2008 18:49:50
Répondre     Citer    
Re: script bash
Envoyé par: techafi

en fait si j'ai compris les exemples le script va lire le fichier .txt et recupérer les valeurs pour en faire des variables?

ce que je veux faire avec le script c'est lire le fichier comptes .txt qui contient dans cet ordre les valeurs : nom d'utilisateur, mot de passe, groupe.

le script une fois avoir lu ces valeurs, les récupère en variables et créer les comptes utilisateurs avec les mot de passe et ajoute l'utilisateur au groupe.

je suis débutant, j'ai peut etre pas saisi le fonctionnement des exemples

Poste le Monday 10 March 2008 08:55:26
Répondre     Citer    
Re: script bash
Envoyé par: techafi

personne ne peut m'aider?

je recherche une solution

Poste le Wednesday 12 March 2008 11:50:16
Répondre     Citer    
Re: script bash
Envoyé par: techafi

Un grand merci a MrHarry pour tous les exemples de scripts
le seul problème désormais est de pouvoir passer la variable $2, le mot de passe a la commande useradd

voici le script
#!/bin/bash
IFS=$' ';
cat comptes.txt |
{
while read ligne; do
set ${ligne};
echo "login:${1} mot de passe:${2} groupe:${3}";
useradd ${1} -d /var/home/${3} -s /bin/false -p ${2}
done;

Poste le Wednesday 12 March 2008 16:04:39
Répondre     Citer    
Re: script bash
Envoyé par: techafi

le script fonctionne enfin!

il créer les utilisateurs les mots de passe mais impossible de se connecter avec le login et le mot de passe


#!/bin/bash
IFS=$' ';
cat comptes.txt |
{
while read ligne; do
set ${ligne};
echo "login:${1} mot de passe:${2} groupe:${3}";
useradd ${1} -d /var/home/${3} -s /bin/false
echo ${2} | passwd --stdin ${1}
done;
}

Poste le Wednesday 12 March 2008 16:21:50
Répondre     Citer    
Re: script bash

Pourquoi /bin/false comme shell des users créés?

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Wednesday 12 March 2008 16:22:41
Répondre     Citer    
Re: script bash
Envoyé par: techafi

a la base ce sont des utilisateurs ftp donc pas besoin de shell.
mais même sans leur affecter de shell impossible de se logger

Poste le Wednesday 12 March 2008 16:30:05
Répondre     Citer    
Re: script bash
Envoyé par: techafi

en fait les autres utilisateurs que j'ai créer manuellement avec bin/false fonctionne
donc je cherche pourquoi ceux créer avec le script ne fonctionne pas

Poste le Wednesday 12 March 2008 16:35:54
Répondre     Citer    
Re: script bash

On peut créer un utilisateur avec /bin/false comme login shell, mais dans ce cas il ne peut pas se loguer.

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Wednesday 12 March 2008 21:50:01
Répondre     Citer    
Re: script bash
Envoyé par: techafi

d'accord mais j'ai plusieurs utilisateurs créer manuellement avec bin/false et il se logue sans problème.
j'ai testé la creation avec le script ou sans, c'est la même chose.
je ne vois pas pourquoi ça ne fonctionne pas

Poste le Thursday 13 March 2008 09:01:09
Répondre     Citer    
Re: script bash
Envoyé par: techafi

exact

après quelques tests, effectivement tous les utilisateurs avec bin/false ne peuvent pas ouvrir une session shell.
ce qui est normal.
le problème est autre, les utilisateurs ne peuvent pas accéder au ftp.
comme s'il n'étaient pas reconnu(login incorrect)

Poste le Thursday 13 March 2008 09:13:03
Répondre     Citer    
Re: script bash
Envoyé par: oudoubah

Selon ta configuration ftp et le serveur que tu utilises, il peut y avoir une distinction entre les utilisateurs du système (ceux de /etc/passwd) et les utilisateurs ftp (voir le fichier de conf). Ajouter des utilisateurs au système ne rajoute pas dans ce cas des utilisateurs ftp.

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Thursday 13 March 2008 11:02:28
Répondre     Citer    
Re: script bash
Envoyé par: techafi

en fait le problème vient pas d'ici, le script fonctionne bien a un détail près

les dossiers du ftp possède des droits, qui sont attribués a des groupes.
dans le script j'avais omis de spécifier -g dans la commande useradd

#!/bin/bash
IFS=$' ';
cat comptes.txt |
{
while read ligne; do
set ${ligne};
echo "login:${1} mot de passe:${2} groupe:${3}";
useradd ${1} -d /var/home/${3} -s /bin/false -g ${3};
echo ${1}:${2} | chpasswd
done;
}

mais même avec ceci ça ne fonctionne pas.
en éditant /etc/group je vois bien mes groupes, mais les utilisateurs n'apparaissent pas après l'éxécution du script.
en les rajoutant manuellement cela fonctionne
j'ai testé usermod mais je récupère des messages d'erreurs.

si vous avez une piste sur les soulutions possibles

Poste le Thursday 13 March 2008 15:44:18
Répondre     Citer    
Re: script bash
Envoyé par: |/|BaH

Ah! des messages d'erreurs... donnes, donnes, donnes donc!





[v]finalement, c'est toi, qui nous donnera la solution[/v]

Poste le Friday 14 March 2008 00:07:42
Répondre     Citer    
Re: script bash
Envoyé par: techafi

après divers autre tests, tous fonctionne
le script s'éxécute sans messages d'erreurs
la ligne echo login... me permet de verifier que les variables sont exactes

les questions que je me pose :

les utilisateurs créer via le script sont récupérer dans un fichier texte avec deux nom pour tester

test1, test2 et deux groupes :groupe1,groupe2

test1 dans le groupe1, test2 dans le groupe2
les utilisateurs sont crées, il apparaissent dans /etc/passwd
quand je fais la commande "groups test1" je recois la reponse test1 : groupe1
et pour test2 groupe2. donc pas de soucis

mais si j'édite /etc/group je devrais avoir

groupe1:x:102:pascal,pierre,test1
groupe2:x:103:sylvain,alex,test2

mais les utilisateurs test1 et 2 ne se rajoute pas.

est ce normal?

pour l'instant cela fonctionne mais j'aimerais comprendre

voici le script

#!/bin/bash
IFS=$' ';
cat comptes.txt |
{
while read ligne; do
set ${ligne};
echo "login:${1} mot de passe:${2} groupe:${3}";
useradd ${1} -d /var/home/${3} -s /bin/false;
usermod -g ${3} ${1};
echo ${1}:${2} | chpasswd
done;
}


Poste le Friday 14 March 2008 11:18:58
Répondre     Citer    
Re: script bash
Envoyé par: bheadman

J'ai peut être une solution, je remarque que dans ta commande useradd tu ne définis pas de mot de passe avec l'option -p. J'ai pu constater a plusieurs reprises que l'omission de cette option crée un user dénué de mot de passe, attention ce n'est pas un passe à blanc mais bien un user "sans mot de passe". Certain shell interdise les comptes sans mot de passe, il en faut au moins 1 même si celui-ci est à blanc, afin d'éviter de se faire pirater son compte root par exemple (ceux qui savent de quoi je parle comprendrons).

Ceci ce vérifie avec un cat du fichier /etc/passwd, les 2 premiers champs sont le Nom du user suivit "du passe". Plus exactement suivit d'un "x" qui signifi qu'il possède un passe et que celui-ci se trouve dans /etc/shadow.
root:x:1:1:..... (je n'ai pas de linux sous la main pour mettre la ligne entière)

si tu as quelque choses comme :
test1::1000:1000:.....

ce n'est pas bon.


L'option -p est un peu "bête" car si on créé le user :

useradd -u usertest -g grouptest -p popo -s /bin/bash usertest

le fichier shadow ressemblera à ceci
usertest:popo:...
au lieu de contenir le hash md5 de popo, c'est pour cela qu'il faut faire un passwd "USER" après un useradd. Mais celle-ci est obligatoire car sans cela tu auras beau faire tous les passwd que tu veux le user ne possèdera toujours pas de mot de passe.

HS on
la commande adduser effectue un hash md5 du mot de passe lors de la création du user mais n'est pas "scriptable" (enfin je crois :-) ) car pas en ligne de commande et demande un intervention de l'admin pour fonctionner, mais est plus complet et simple d'utilisation que useradd
HS off


De plus es-tu sûr que lors du passage de la commande "passwd --stdin ${1}" dans le script le $1 est interprété comme une variable ou alors comme une "pass phrase", c'est à dire que passwd attribut la valeur de ${1} ou alors le mot de passe "${1}" au user ??


Voila j'espère avoir fait avancer le shmilblique.

Cordialement.
Bheamdan

Poste le Wednesday 26 March 2008 18:10:46
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
script bash
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons