PROFDINFO.COM

Votre enseignant d'informatique en ligne

Solution du labo 1

Retour à la page du cours

Voici des solutions possibles pour les 4 scripts du laboratoire 1:

CreerGroupe

#!/bin/bash  

# creation du groupe
/usr/sbin/groupadd $1  

# creation du répertoire "racine" de ce groupe 
mkdir /home/$1  

# don du répertoire "racine" du groupe au groupe 
chgrp $1 /home/$1  

# changement des droits sur le répertoire "racine" 
chmod 750 /home/$1       

Ce script est le même que celui montré en exemple à la section 1, donc pas trop compliqué à faire...

RenommerGroupe

#!/bin/bash
# $1 = ancien nom, $2 = nouveau nom

/usr/sbin/groupmod -n $2 $1
mv /home/$1 /home/$2

À ne pas oublier:

DetruireGroupe

#!/bin/bash

/usr/sbin/groupdel $1
rm -Rf /home/$1

Rien de bien compliqué ici... On utilise rm -R plutôt que rmdir car rmdir ne fonctionne que sur un dossier vide, ce qui n'est peut-être pas le cas. La switch -f force la suppression sans demander de confirmation.

CreerUsager

#!/bin/bash

# $1 = nom du groupe, $2 = nom de l'usager

./CreerGroupe $1

/usr/sbin/useradd -g $1 -d /home/$1/$2 -m -s /bin/bash $2

passwd $2

La dernière ligne lance passwd, ce qui permet de définir le mot de passe de l'usager. Il faudra entrer un mot de passe deux fois.

Ça pourrait être intéressant d'automatiser complètement l'application et de passer le mot de passe en paramètre plutôt que de répondre à des questions, un peu comme ceci:

CreerUsager reseaux ginette 1212patate

Une possibilité à ce moment-là, sur les versions récentes d'Ubuntu, est d'utiliser /usr/bin/chpasswd. La commande chpasswd lit sur son entrée standard, une ligne à la fois, des informations sous la forme usager:password et modifie les mots de passe en conséquence. Elle est faite pour fonctionner en lot et modifier tout un tas de mots de passe d'un seul coup à partir d'informations prises dans un fichier, comme ceci:

cat fichier | chpasswd

Le fichier est constitué de lignes usager:password une en dessous de l'autre. La commande cat affiche normalement le contenu du fichier à l'écran, mais grâce au pipe, elle l'enverra plutôt à l'entrée standard de chpasswd, qui fera son travail.

Dans notre cas, bien que l'on puisse passer par un fichier temporaire pour faire le travail, puisqu'on change uniquement un seul mot de passe, on pourrait faire tout simplement:

echo "$2:$3" > chpasswd

Du coup, on passe à l'entrée standard de chpasswd une seule ligne formatée comme il s'y attend. Le nom de l'usager est le deuxième paramètre, et on demanderait le mot de passe comme troisième.

Notre script deviendrait donc:

#!/bin/bash  
# $1 = nom du groupe, $2 = nom de l'usager, $3 = mot de passe  
./CreerGroupe $1  
/usr/sbin/useradd -g $1 -d /home/$1/$2 -m -s /bin/bash $2  
echo "$2:$3" | /usr/sbin/chpasswd

Dans les anciennes distributions d'Ubuntu, ou dans d'autres distributions, passwd peut accepter un mot de passe sur son entrée standard grâce à la switch --stdin. Si on n'utilisait pas cette distribution, on pourrait donc aussi remplacer la dernière ligne par:

echo $3 | passwd --stdin $2 

Le principe est le suivant: passwd accepte de lire le mot de passe directement de l'entrée standard plutôt que de le demander (2 fois) grâce à la switch --stdin. La commande passwd --stdin $2 signifie donc: modifie le mot de passe de l'usager $2 en le prenant sur l'entrée standard.

L'echo $3 afficherait normalement le mot de passe (le troisième paramètre) à l'écran, mais comme on a fait un "pipe" entre echo et passwd, la sortie d'echo sera redirigée à l'entrée de passwd. echo fournit donc le mot de passe à passwd au lieu de l'afficher!

Notez que malheureusement, cette façon de faire ne fonctionne plus sur la dernière version d'Ubuntu... Mais vous la connaîtrez au cas où vous travaillez avec autre chose plus tard.

Retour à la page du cours