Votre navigateur est obsolète. Téléchargez un navigateur moderne, par exemple FireFox.
Léa-Linux : Forum
Le forum de Léa abrite des discussions autour des Logiciels libres.
Syndication
  • RSS ForumForum complet
  • RSS Forum - DéveloppementForum - Développement
  • RSS Forum - Développement - 335104Cette discussion

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.

Important : quand vous posez une question, n'oubliez pas de nous donner les indications suffisantes pour que nous puissions répondre. En effet, la divination n'est pas le fort du Linuxien averti. Pour une meilleure compréhension, le bon usage de la grammaire et de l'orthographe est fortement encouragé. En particulier, le langage SMS est à éviter absolument. En cas d'abus, il pourra être censuré sans autre forme de procès.
Les messages dont le contenu est illégal (incitant à la haine - raciale ou autre, diffamant), ou dont le contenu est sans rapport avec le sujet du forum, ou qui sont parfaitement stupides ou hors sujet seront supprimés sans pitié. Il pourra même être fait appel au fournisseur d'accès du coupable pour faire cesser ses agissements.
» Index du forum » Développement » script bash
Aller à la discussion: PrécédentSuivante
Action: Nouveau sujetChercherS'authentifier
script bash
Auteur: techafi (IP enregistrée)
Date: le 6 mars 2008 à 17:33

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

Re: script bash
Auteur: MrHarry (IP enregistrée)
Date: le 8 mars 2008 à 17:59

Salut, ;)
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

Re: script bash
Auteur: MrHarry (IP enregistrée)
Date: le 8 mars 2008 à 18:49

Hello,
[correctif] image : tcontent
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 image : clinlangue

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 10 mars 2008 à 08:55

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

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 12 mars 2008 à 11:50

personne ne peut m'aider?

je recherche une solution

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 12 mars 2008 à 16:04

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;

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 12 mars 2008 à 16:21

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;
}

Re: script bash
Auteur: Basile STARYNKEVITCH (IP enregistrée)
Date: le 12 mars 2008 à 16:22

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

----

Basile STARYNKEVITCH où on trouve mon mél

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

N.B. N'hesitez pas à consulter aussi mes contributions antérieures.

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 12 mars 2008 à 16:30

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

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 12 mars 2008 à 16:35

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

Re: script bash
Auteur: Basile STARYNKEVITCH (IP enregistrée)
Date: le 12 mars 2008 à 21:50

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

----

Basile STARYNKEVITCH où on trouve mon mél

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

N.B. N'hesitez pas à consulter aussi mes contributions antérieures.

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 13 mars 2008 à 09:01

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

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 13 mars 2008 à 09:13

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)

Re: script bash
Avatar
Auteur: oudoubah (IP enregistrée)
Date: le 13 mars 2008 à 11:02

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"

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 13 mars 2008 à 15:44

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

Re: script bash
Auteur: |/|BaH (IP enregistrée)
Date: le 14 mars 2008 à 00:07

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





finalement, c'est toi, qui nous donnera la solution

Re: script bash
Auteur: techafi (IP enregistrée)
Date: le 14 mars 2008 à 11:18

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;
}


Re: script bash
Auteur: bheadman (IP enregistrée)
Date: le 26 mars 2008 à 18:10

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 image : content ) 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



Nom du forum : (antispam) - (en développement:saisir un texte pour le message, rempli cette zone automatiquement)
Votre nom: 
Votre email: 
Sujet: 

 
Ce forum est boosté par Phorum.