==== Pré-requis ====
Pour valider les pré-requis nécessaires, avant d'aborder le TP, répondez aux questions ci-après :
1. Citer les différents type de comptes utilisateurs sous Unix.
compte administration : root
compte d'applications : bin, daemon, apache, ssh
compte utilisateur
2. Dans quel fichier sont renseignés les groupes secondaires d'un compte utilisateur ?
Ils sont renseigné de le fichier /etc/group
3. Comment ajouter le compte utilisateur nicolas sur le système sachant que le groupe formateur existant doit être son groupe principal ?
useradd -g formateur nicolas
4. Que fait la commande ? find / -user 502
Elle affiche le nom de tous les fichiers appartenant à l'utilisateur ayant l'UID égal à 502 dans l'arborescence du système.
5. Quel droit signifie qu'un programme doit être lancé avec l'identifiant du propriétaire du fichier ?
SUID permet d'allouer temporairement les droits du propriétaire à un utilisateur :
---s------ ou ---S------
Un fichier avec les droits
-rwxr-xr-x
auquel on ajoute le droit SUID aura donc la notation
-rwsr-xr-x
==== Exercice 1 : Utilisateurs et groupes ====
1. Se connecter en tant que root sur une console texte.
su
2. Lister les comptes utilisateurs et les groupes existants sur le système.
cat /etc/group
3. Quels sont l'UID et le GID du compte root ?
root:x:0:0:root:/root:/bin/bash
UID = 0 et GID = 0
5. Créer les groupes grp1, grp2 et grp3. Le GID du groupe grp3 doit être 823.
root@debian:/usr/share# groupadd grp1
root@debian:/usr/share# groupadd grp2
root@debian:/usr/share# groupadd -g 823 grp3
6. Créer les comptes utilisateurs util1, util2, et util3 ayant respectivement les groupes grp1,
grp2 et grp3 comme groupe principal. Le compte util2 doit aussi être membre des groupe grp1 et
grp3. Le pseudonyme tux1 de l'utilisateur util1 doit être renseigné dans la configuration.
root@debian:/usr/share# useradd -g grp1 util1
root@debian:/usr/share# useradd -g grp2 -G grp1,grp3 util2
root@debian:/usr/share# useradd -g grp3 util3
7. Noter les UID et GID des comptes utilisateurs et des groupes créés précédement.
root@debian:/usr/share# id util1
uid=1001(util1) gid=1001(grp1) groupes=1001(grp1)
root@debian:/usr/share# id util2
uid=1002(util2) gid=1002(grp2) groupes=1002(grp2),1001(grp1),823(grp3)
root@debian:/usr/share# id util3
uid=1003(util3) gid=823(grp3) groupes=823(grp3)
8. Supprimer le groupe grp3. Cela est-il possible ? Pourquoi ?
root@debian:/usr/share# delgroup grp3
/usr/sbin/delgroup: « util3 » possèdent toujours « grp3 » en tant que groupe primaire !
9. Supprimer le compte utilisateur util3 sans supprimer son répertoire personnel et supprimer le groupe grp3.
root@debian:/usr/share# userdel util3
root@debian:/usr/share# delgroup grp3
Suppression du groupe « grp3 »...
Fait.
==== Exercice 2 : Droits d'accès ====
1. En tant que util1, créer le répertoire rep1 dans /tmp puis créer le fichier vide fic1 dans ce répertoire. Quels sont les droits associés à ces nouveaux fichiers ?
root@debian:/usr/share# su util1
$ mkdir /tmp/rep1
$ exit
root@debian:/usr/share# ls -ail /tmp/rep1
total 8
798448 drwxr-xr-x 2 util1 grp1 4096 nov. 7 16:12 .
783371 drwxrwxrwt 13 root root 4096 nov. 7 16:12 ..
2. Modifier la valeur de umask de util1 à 007.
root@debian:/usr/share# su util1
$ umask
0022
$ umask 007
$ umask
0007
3. Créer un nouveau répertoire rep2 contenant le fichier vide fic2 dans /tmp, et regarder les droits associés à ces nouveaux fichiers. Cela a-t-il changé les droits des fichiers déjà existant ?
$ mkdir /tmp/rep2
$ touch /tmp/rep2/fic2
$ ls -ail /tmp/rep2/fic2
800155 -rw-rw---- 1 util1 grp1 0 nov. 7 16:18 /tmp/rep2/fic2
4. Changer les droits du fichiers fic2 afin que personne ne puisse le modifier.
$ chmod 550 /tmp/rep2/fic2
$ ls -ail /tmp/rep2/fic2
800155 -r-xr-x--- 1 util1 grp1 0 nov. 7 16:18 /tmp/rep2/fic2
5. Se connecter en tant que util2 sur une console texte libre.
6. Essayer de supprimer le fichier /tmp/rep2/fic2. Est-ce possible ? Pourquoi ?
util2@debian:/usr/share$ rm /tmp/rep2/fic2
rm : supprimer fichier (protégé en écriture) « /tmp/rep2/fic2 » ?
Permission non accordée
util2@debian:/usr/share$ cat /tmp/rep
rep1/ rep2/
util2@debian:/usr/share$ cat /tmp/rep2/fic2
toto
utils2 n'a pas les droits d'écriture
:TMP
7. Entant que root, créer le programme C /tmp/droits.c suivant :
<code=c>
#include < stdio.h>
#include < stdlib.h>
#include < unistd.h>
main()
{
int uid = getuid();
int euid = geteuid();
int gid = getgid();
int egid = getegid();
printf("UID réel : %u\n", uid);
printf("UID effectif : %u\n", euid);
printf("GID réel : %u\n", gid);
printf("GID effectif : %u\n", egid);
}
</code>
8. Compiler le code source précédent avec la commande :
gcc droits.c -o droits.exe
9. Exécuter successivement le programme droits.exe en tant que root et util1. Quel est le résultat affiché ? Qu'en déduire ?
root@debian:/tmp# ./droits.exe
UID réel : 0
UID effectif : 0
GID réel : 0
GID effectif : 0
root@debian:/tmp# su util1
$ ./droits.exe
UID réel : 1001
UID effectif : 1001
GID réel : 1001
GID effectif : 1001
10. Positionner le droit SUID sur ce fichier et exécuter de nouveau ce programme en tant que root et util1. Quelle est la différence ?
root@debian:/tmp# chmod 4000 droits.exe
root@debian:/tmp# ./droits.exe
bash: ./droits.exe: Permission non accordée
root@debian:/tmp# su util1
$ bash
util1@debian:/tmp$ ./droits.exe
bash: ./droits.exe: Permission non accordée
11. Changer le propriétaire et le groupe du fichier /tmp/droits.exe en util2 et grp2.
root@debian:/tmp# chown util2 /tmp/droits.exe
root@debian:/tmp# chgrp grp2 /tmp/droits.exe
12. Positionner le droit SGID sur ce fichier et exécuter de nouveau ce programme en tant que root et util1.
root@debian:/tmp# chmod 6110 droits.exe
root@debian:/tmp# ./droits.exe
UID réel : 0
UID effectif : 1002
GID réel : 0
GID effectif : 1002
root@debian:/tmp# ls -ail
total 68
783371 drwxrwxrwt 12 root root 4096 nov. 8 09:29 .
2 drwxr-xr-x 25 root root 4096 nov. 7 17:01 ..
800133 -rw-r--r-- 1 root root 297 nov. 8 09:29 droits.c
800151 ---s--s--- 1 util2 grp2 7436 nov. 8 09:29 droits.exe
798957 drwxrwxrwt 2 root root 4096 nov. 8 09:23 .ICE-unix
798962 drwx------ 2 Debian-gdm Debian-gdm 4096 nov. 8 09:23 pulse-BtBEnh3eMTDt
798973 drwx------ 2 romain romain 4096 nov. 8 09:23 pulse-JtkyoEsgQCKO
798955 drwx------ 2 root root 4096 nov. 8 09:22 pulse-PKdhtXMmr18n
798961 drwx------ 2 romain romain 4096 nov. 8 09:23 ssh-ckU3A6WqzCkd
800126 drwxr-xr-x 2 romain romain 4096 nov. 8 09:23 tracker-romain
783494 drwxrwxrwt 2 root root 4096 nov. 8 09:22 VMwareDnD
798974 drwx------ 2 romain romain 4096 nov. 8 09:23 vmware-romain
783800 drwx------ 2 root root 4096 nov. 8 09:22 vmware-root
798958 -r--r--r-- 1 root root 11 nov. 8 09:22 .X0-lock
783808 drwxrwxrwt 2 root root 4096 nov. 8 09:22 .X11-unix
798966 -rw------- 1 romain romain 11 nov. 8 09:23 xdg-screensaver-romain--0
root@debian:/tmp# su util1
$ bash
util1@debian:/tmp$ ./droits.exe
bash: ./droits.exe: Permission non accordée
13. Modifier de nouveau le propriétaire et le groupe du fichier /tmp/droits.exe en root et root.
root@debian:/tmp# chown root droits.exe
root@debian:/tmp# chgrp root droits.exe
14. Positionner les droits d'accès à 0755 sur le fichier /tmp/droits.exe.
root@debian:/tmp# chmod 0755 /tmp/droits.exe
15 Ajouter la ligne suivante au fichier /etc/sudoers :
Ne pas éditer le fichier, mais utiliser la commande visudo
util1 ALL=(root) /tmp/droits.exe
16. Exécuter la commande :
sudo /tmp/droits.exe
successivement en tant que util1 et util2. Est-ce possible ? Si oui, sous quelle identité ?
$ sudo /tmp/droits.exe
[sudo] password for util1:
UID réel : 0
UID effectif : 0
GID réel : 0
GID effectif : 0
==== Exercice 3 : Pour aller plus loin ====
1. Mettre en place un répertoire de travail commun pour les membres du grp1 ; tout nouveau fichier créé à l'intérieur de celui-ci devra appartenir à ce groupe.
root@debian:/tmp# chmod 2070 commungrp1/