Previous Contents Next

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.
  1. 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.
  2. 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.
  3. 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}

Previous Contents Next