**Ceci est une ancienne révision du document !**
----
==== 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.
Il existe 3 types d'utilisateurs sous unix: Root, user, group
2. Dans quel fichier sont renseignés les groupes secondaires d'un compte utilisateur ?
Ils sont renseigné de le fichier /etc/passwd
3. Comment ajouter le compte utilisateur nicolas sur le système sachant que le groupe formateur existant doit être son groupe principal ?
c:useradd -G formateur nicolas
4. Que fait la commande ? find / -user 502
c: elle retourne le nom de l'utilisateur ayant l'UID égal à 502.
5. Quel droit signifie qu'un programme doit être lancé avec l'identifiant du propriétaire du fichier ?
b: SUID
Exercice 1 : Utilisateurs et groupes
1. Se connecter en tant que root sur une console texte.
rabiven2@tssi:~$ su
Mot de passe :
root@tssi:/home/rabiven2#
2. Lister les comptes utilisateurs et les groupes existants sur le système.
root@tssi:/home/rabiven2# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:103::/var/run/dbus:/bin/false
Debian-exim:x:102:104::/var/spool/exim4:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
avahi:x:104:107:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
Debian-gdm:x:106:114:Gnome Display Manager:/var/lib/gdm3:/bin/false
sshd:x:107:65534::/var/run/sshd:/usr/sbin/nologin
saned:x:108:116::/home/saned:/bin/false
hplip:x:109:7:HPLIP system user,,,:/var/run/hplip:/bin/false
rabiven2:x:1000:1000:rabiven2,,,:/home/rabiven2:/bin/bash
haldaemon:x:110:117:Hardware abstraction layer,,,:/var/run/hald:/bin/false
toor:x:0:1005::/root:/bin/sh
tux:x:1001:1003:,,,:/home/tux:/bin/bash
tux2:x:1002:1004:,,,:/home/tux2:/bin/bash
root@tssi:/home/rabiven2# ^C
root@tssi:/home/rabiven2#
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@tssi:/home/rabiven2# groupadd grp1
root@tssi:/home/rabiven2# groupadd grp2
root@tssi:/home/rabiven2# 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@tssi:/home/rabiven2# useradd -g grp1 util1
root@tssi:/home/rabiven2# useradd -g grp2 -G grp1,grp3 util2
root@tssi:/home/rabiven2# useradd -g grp3 util3
7. Noter les UID et GID des comptes utilisateurs et ds groupes créés précédement.
root@tssi:/home/rabiven2# id util1
uid=1003(util1) gid=1006(grp1) groupes=1006(grp1)
root@tssi:/home/rabiven2# id util2
uid=1004(util2) gid=1007(grp2) groupes=1007(grp2),1006(grp1),823(grp3)
root@tssi:/home/rabiven2# id util3
uid=1005(util3) gid=823(grp3) groupes=823(grp3)
8. Supprimer le groupe grp3. Cela est-il possible ? Pourquoi ?
root@tssi:/home/rabiven2# 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@tssi:/home/rabiven2# userdel util3
root@tssi:/home/rabiven2# 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@tssi:/home# usermod -g grp1 util1
root@tssi:/home# id util1
uid=1003(util1) gid=1006(grp1) groupes=1006(grp1)
root@tssi:/home# mkdir /tmp/rep1
root@tssi:/home# cd /tmp
root@tssi:/tmp# ls
entree_secret gnome-system-monitor.rabiven2.2311133919 lienficb plans tux vmware-rabiven2
f id orbit-Debian-gdm rep1 virtual-rabiven2.K8pTWo vmware-root
f2 lienfica orbit-rabiven2 ssh-CEtPNz2678 VMwareDnD vmware-root-3671762689
root@tssi:/tmp# cd rep1
root@tssi:/tmp/rep1# touch fic1
root@tssi:/tmp/rep1# ls -l
total 0
-rw-r--r-- 1 root root 0 9 oct. 16:45 fic1
root@tssi:/tmp/rep1#
2. Modifier la valeur de umask de util1 à 007.
root@tssi:/tmp/rep1# umask
0022
root@tssi:/tmp/rep1# umask 007
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 ?
root@tssi:/tmp/rep1# cd ..
root@tssi:/tmp# mkdir rep2
root@tssi:/tmp# cd rep2
root@tssi:/tmp/rep2# touch fic2
root@tssi:/tmp/rep2# ls -l
total 0
-rw-rw---- 1 root root 0 9 oct. 16:52 fic2
4. Changer les droits du fichiers fic2 afin que personne ne puisse le modifier.
root@tssi:/tmp/rep2# chmod 555 fic2
root@tssi:/tmp/rep2# ls -l
total 0
-r-xr-xr-x 1 root root 0 9 oct. 16:52 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 ?
rabiven2@tssi:~$ su util2
Mot de passe :
util2@tssi:/home/rabiven2$ rm /tmp/rep2/fic2
rm: impossible de supprimer « /tmp/rep2/fic2 »: Permission non accordée
7. Entant que root, créer le programme C /tmp/droits.c suivant :
#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);
}
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@tssi:/tmp# vim droits.c
root@tssi:/tmp# gcc droits.c -o droits.exe
root@tssi:/tmp# ./droits.exe
UID réel: 0
UID effectif: 0
GID réel: 0
GID effectif: 0
root@tssi:/tmp# su util1
util1@tssi:/tmp$ ./droits.exe
UID réel: 1003
UID effectif: 1003
GID réel: 1006
GID effectif: 1006
util1@tssi:/tmp$
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@tssi:/tmp# chmod 4000 droits.exe
root@tssi:/tmp# ./droits.exe
bash: ./droits.exe: Permission non accordée
root@tssi:/tmp# su util1
util1@tssi:/tmp$ ./droits.exe
bash: ./droits.exe: Permission non accordée
util1@tssi:/tmp$ ^C
util1@tssi:/tmp$
11. Changer le propriétaire et le groupe du fichier /tmp/droits.exe en util2 et grp2.
root@tssi:/tmp# chown util2 /tmp/droits.exe
root@tssi:/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@tssi:/tmp# chmod 6110 droits.exe
root@tssi:/tmp# ./droits.exe
UID réel: 0
UID effectif: 1004
GID réel: 0
GID effectif: 1007
root@tssi:/tmp# su util1
util1@tssi:/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@tssi:/tmp# chown root droits.exe
root@tssi:/tmp# chgrp root droits.exe
14. Positionner les droits d'accès à 0755 sur le fichier /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é ?
root@tssi:/tmp# visudo
root@tssi:/tmp# ./droits.exe
UID réel: 0
UID effectif: 0
GID réel: 0
GID effectif: 0
root@tssi:/tmp# su util1
util1@tssi:/tmp$ ./droits.exe
UID réel: 1003
UID effectif: 1003
GID réel: 1006
GID effectif: 1006
util1@tssi:/tmp$ su util2
Mot de passe :
util2@tssi:/tmp$ ./droits.exe
UID réel: 1004
UID effectif: 1004
GID réel: 1007
GID effectif: 1007
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.
util2@tssi:/tmp$ mkdir repgrp1
util2@tssi:/tmp$ chgrp grp1 repgrp1
util2@tssi:/tmp$ chmod 2010 repgrp1
TAG
Supprimer un utilisateur
userdel
deluser –remove-home utilisateur