14 Corrigé du DS du 24 novembre 2004
Examen d'une durée de deux heures avec tous les documents autorisés
(y compris ordinateurs).
14.0.41 Comparatif
Veuillez comparer (en quelques lignes) l'implantation
des mécanismes systèmes décrits ci-dessous dans les systèmes d'exploitation
Linux et Windows XP Pro. L'important est de parler des fonctionnalités et
de l'interface homme/machine.
-
Comparaison du mécanisme de création d'utilisateur sous Linux
(commande adduser ou interface web par webmin) par rapport au
mécanisme de création d'utilisateur sous Windows XP Pro.
Pas de différence notable : adduser est une interface
en ligne de commande dont dispose aussi Windows XP. L'interface
native de Windows XP est graphique tout comme l'interface de
webmin. Dans les deux cas le nombre d'utilisateurs
manipulable par les interfaces graphiques est limité (sous
peine de souris elbow). Dans les deux cas il faut recourir à
des scripts attaquant directement les fichiers de configuration
ou le registre pour obtenir une méthode capable de gérer
automatiquement et rapidement un grand nombre d'utilisateurs.
- Comparaison du mécanisme de création de disques logiciels RAID sous
Linux par rapport au mécanisme de création de disques logiciels RAID sous
Windows XP Pro.
Windows offre une interface graphique agréable au néophyte pour créer
les disques RAID. Le problème est que sous Windows XP Pro, seuls les
disques
RAID-1 (miroir) sont supportés. Il faut acquérir Windows Server 2003
pour profiter des disques RAID-5 disponibles d'entrée de jeu sous Linux.
Dans les deux cas la présence de commandes en ligne permet une
administration à distance confortable.
- Comparaison du mécanisme de création de partitions dynamiques
sous Linux (LVM) par rapport au mécanisme de création de partitions dynamiques
sous Windows XP Pro.
Windows offre une interface graphique agréable au néophyte pour créer
les
partitions dynamiques et leur ajouter des partitions physiques au vol.
Le problème est que la migration des données d'une partition physique
à l'autre n'est pas possible (et donc impossible aussi la suppression
de partition physique). Le système LVM supporte sans problème l'ajout
de Physical Volume, la migration de données d'un PV vers un autre et la
suppression de PV vide.
Dans les deux cas la présence de commandes en ligne permet une
administration à distance confortable.
14.0.42 Création d'utilisateurs
Le but est de créer automatiquement des utilisateurs à partir d'un fichier
central de description de ces utilisateurs. Voici un exemple d'un tel fichier :
xredon:Xavier Redon:adminsys:grossecret
jbon:Jean-Louis Bon:admin:chutttt
jsix:Jean-Paul Six:admin:mdp0
Le premier champ contient l'identifiant de l'utilisateur, le second son nom
complet, le troisième le groupe de l'utilisateur et enfin le quatrième son
mot de passe en clair.
Rappels de programmation Shell
Dans cet exercice il vous est demandé d'écrire des scripts en Bourne Shell.
Pour vous faciliter la vie quelques rappels sont donnés ci-après :
-
Lecture de fichier :
- Il est possible de lire un fichier, ligne
par ligne, en Shell. L'exemple ci-dessous lit les lignes d'un fichier
et les affiche précédées du numéro de ligne :
FICHIER=...
no=0
while read ligne ; do
i=`expr $i + 1`
echo "$i: $ligne"
done < $FICHIER
- Récupération de la valeur d'un champ:
- La commande cut est
utile pour récupérer la valeur d'un champ dans les fichiers du type
/etc/passwd où chaque ligne contient des valeurs séparées par
un caractère précis (ici le caractère ':'). L'exemple ci-dessous
affiche les noms des utilisateurs :
UTILS=/etc/passwd
while read ligne ; do
nom=`echo $ligne | cut -f5 -d:`
echo $nom
done < $UTILS
- Récupération d'une ligne précise :
- La commande grep est
indispensable pour trouver des lignes bien précises dans un fichier texte.
Voyez l'exemple ci-dessous qui donne le nom d'un utilisateur repéré par son
identifiant (login) :
grep "^rex:" /etc/passwd | cut -f5 -d:
Création d'utilisateurs sous Windows XP
Écrivez un script Shell générant un fichier .BAT permettant de créer
des utilisateurs locaux sur une machine Windows XP en fonction du fichier
central de description des utilisateurs.
Voici un exemple de script (non testé) :
#!/bin/sh
MAIN_USERS=/etc/users
RESULT=users.bat
while read line ; do
login=`echo ${line} | cut -f1 -d:`
name=`echo ${line} | cut -f2 -d:`
group=`echo ${line} | cut -f3 -d:`
passwd=`echo ${line} | cut -f4 -d:`
echo -n "net user ${login} ${passwd} /add"
echo " /fullname:\"${name}\""
echo "net group ${group} ${login} /add"
done < ${MAIN_USERS} > ${RESULT}
Il suffit ensuite d'exécuter users.bat sur la machine Windows XP.
Création d'utilisateurs sous Linux
Écrivez un script Shell effectuant toutes les opérations nécessaires à
la création d'un utilisateur Unix (ajouts dans les fichiers passwd,
shadow, création de répertoire, etc.). Il est rappelé que la commande
mkpasswd, disponible sur certains Unix, permet de crypter un mot de
passe "à la mode Unix". Vous devez générer les uid des utilisateurs
à partir de la valeur 1000. Enfin vous trouverez le gid des utilisateurs
dans le fichier /etc/group.
Le script suit la même structure que celui de la question précédente :
#!/bin/sh
MAIN_USERS=/etc/users
PASSWD_FILE=/etc/passwd
GROUP_FILE=/etc/group
SHADOW_FILE=/etc/shadow
HOME_DIR=/home
DEFAULT_SHELL=/bin/bash
uid=1000
while read line ; do
login=`echo ${line} | cut -f1 -d:`
name=`echo ${line} | cut -f2 -d:`
group=`echo ${line} | cut -f3 -d:`
passwd=`echo ${line} | cut -f4 -d:`
path=${HOME_dir}/${group}/${login}
mkdir -p ${path}
passwd=`mkpasswd ${passwd}`
gid=`grep "^${group}:" ${GROUP} | cut -f3 -d:`
echo "${login}:x:${uid}:${gid}:${name}:${path}:${DEFAULT_SHELL} \
>> ${PASSWD_FILE}
echo "${login}:${passwd}:::::::" >> ${SHADOW_FILE}
uid=`expr ${uid} + 1`
done < ${MAIN_USERS}
Création d'utilisateurs sous OpenLDAP
Écrivez un script Shell permettant d'ajouter un objet par utilisateur
dans une base OpenLDAP (sous le suffixe ou=people,dc=polytech-lille.fr).
Les uidNumber sont toujours numérotés à partir de 1000 mais cette fois
les gidNumber sont à recupérer dans l'Organizational Unit
ou=group, dc=polytech-lille.fr
Voici un exemple de réalisation (non testé) :
#!/bin/sh
MAIN_USERS=/etc/users
LDAP_SERVER=ldap.polytech-lille.fr
OU_PEOPLE="ou=people,dc=polytech-lille.fr"
OU_GROUP="ou=group,dc=polytech-lille.fr"
HOME_DIR=/home
DEFAULT_SHELL=/bin/bash
ROOT_PASSWORD=jesaispasmoi
uid=1000
while read line ; do
login=`echo ${line} | cut -f1 -d:`
name=`echo ${line} | cut -f2 -d:`
group=`echo ${line} | cut -f3 -d:`
passwd=`echo ${line} | cut -f4 -d:`
path=${HOME_dir}/${group}/${login}
passwd=`mkpasswd ${passwd}`
gid=`ldapsearch -x -h ${LDAP_SERVER} \
-b "cn=${group},${OU_GROUP}" gidNumber | \
grep "^gidNumber:" ${GROUP} | cut -f2 -d:`
givenname=`echo ${name} | cut -d\ -f1`
surname=`echo ${name} | cut -d\ -f2`
echo "dn: cn=${login},${OU_PEOPLE}"
echo -e "objectclass: top\nobjectclass: person"
echo -e "objectclass: posixAccount\nobjectclass: shadowAccount"
echo "cn: ${login}"
echo "sn: ${surname}"
echo "gn: ${givenname}"
echo "uid: ${login}"
echo "uidNumber: ${uid}"
echo "gidNumber: ${gid}"
echo "loginShell: ${DEFAULT_SHELL}"
echo "homeDirectory: ${path}"
echo "userPassword: {crypt}${passwd}"
uid=`expr ${uid} + 1`
done < ${MAIN_USERS} | \
ldapadd -x -h ${LDAP_SERVER} -D "cn=root,${OU_PEOPLE}" \
-w ${ROOT_PASSWORD}