Changer de GID pour l’execution de commandes

L’utilisateur Linux est définit par un login auquel est associé, pour le système, un UID (User IDentifier) et un GID (Groupe IDentifier). En outre, l’utilisateur peut appartenir à d’autre groupes lui permettant d’accéder à diverses ressources ou d’échanger des données avec d’autres utilisateurs.

La commande « id » retourne le détail des UID/GID et autres groupes associés à un utilisateur :

mafalda ~ # id
uid=0(root) gid=0(root) groups=0(root), 1(bin), ..., 27(video)
mafalda ~ # id fhh
uid=1000(fhh) gid=100(users) groups=100(users), ..., 81(apache)

Lors de l’execution de certaines commandes, il peut être avantageux de changer son GID afin de s’affranchir d’un chown pas toujours très heureux par la suite. La commande « newgrp » permet de faire cela.

fhh@mafalda ~ $ id
uid=1000(fhh) gid=100(users) groups=100(users), ..., 81(apache)
fhh@mafalda ~ $ touch ~/tmp/file.test
fhh@mafalda ~ $ ls -l ~/tmp/
total 0
-rw-r--r-- 1 fhh users 0 2009-09-04 15:20 file.test
fhh@mafalda ~ $ newgrp - apache
fhh@mafalda ~ $ id
uid=1000(fhh) gid=81(apache) groups=100(users), ..., 81(apache)
fhh@mafalda ~ $ touch ~/tmp/file.newgrp
fhh@mafalda ~ $ ls -l ~/tmp/
total 0
-rw-r--r-- 1 fhh apache 0 2009-09-04 15:21 file.newgrp
-rw-r--r-- 1 fhh users  0 2009-09-04 15:20 file.test
fhh@mafalda ~ $ exit
exit

Le retour à la normale s’effectue par la combinaison de touche « Ctrl+d » ou la saisie de la commande « exit ».

Le tiret « – » passé en argument à « newgrp » est facultatif. Comme avec la commande « su », il ré initialise les variables d’environnement de l’utilisateur avec les nouveaux paramètres.

Il est possible de prendre le GID d’un groupe quelconque si celui-ci est protégé par un mot de passe comme le montre l’exemple suivant :

fhh@mafalda ~ $ id
uid=1000(fhh) gid=81(apache) groups=100(users), ..., 81(apache)
fhh@mafalda ~ $ ls -l /tmp/
...
drwxrwx--- 2 root test  4096 2009-09-04 19:09 test
fhh@mafalda ~ $ cd /tmp/test/
bash: cd: /tmp/test/: Permission non accordée
fhh@mafalda ~ $ newgrp test
Password:
fhh@mafalda ~ $ id
uid=1000(fhh) gid=444(test) groups=100(users), ..., 81(apache)
fhh@mafalda ~ $ touch /tmp/test/fhh.file
fhh@mafalda ~ $ ls -l /tmp/test/
total 0
-rw-r--r-- 1 fhh test 0 2009-09-04 19:18 fhh.file

Si le changement de groupe ne concerne qu’une commande, il est préférable d’utiliser la commande « sg » :

fhh@mafalda ~ $ sg
Usage: sg group [[-c] command]
fhh@mafalda ~ $ sg - apache -c "touch ~/tmp/file.sg"
fhh@mafalda ~ $ ls -l ~/tmp/
total 0
-rw-r--r-- 1 fhh apache 0 2009-09-04 15:21 file.newgrp
-rw-r--r-- 1 fhh apache 0 2009-09-04 18:55 file.sg
-rw-r--r-- 1 fhh users  0 2009-09-04 15:20 file.test

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *