{{tag>sysadmin linux group}}
====== Exécution d'un processus en spécifiant le groupe ======
Sur les systèmes Unix les droits associés à un fichier se déclinent pour l'utilisateur propriétaire, les membres du groupe propriétaire et les autres utilisateurs. Un notes plus détaillée aborde [[sysadmin:linux:gestion-droits-access|les droits d'accès au fichiers]].
$ ls -l /usr/bin/tail
-rwxr-xr-x 1 root root 72088 sept. 5 2019 /usr/bin/tail
Dans cet exemple le fichier tail appartient à l'utilisateur ''root'' et au groupe ''root''.
Lorsque le fichier est exécutable le processus engendré n'a pas les droits associés au fichier initial, le processus appartient à l'utilisateur qui le crée:
# lance la commande tail en arrière plan
$ /usr/bin/tail -f /var/log/ufw.log &
[1] 17435
# affiche les attributs du processus
$ ps -eo "pid,user,group,args" | grep 17435
17435 yoann yoann /usr/bin/tail -f /var/log/ufw.log
Les flags [[sysadmin:linux:gestion-droits-access#les_suid_sgid_bits|suid/sgid]] permettent de modifier se comportement par défaut. Avec ces bits positionnés, le processus s'exécutant conserve les droits associés au fichier.
===== Changer le groupe primaire avec sg =====
Au moment de la création d'un processus un groupe différent du groupe principal (ou primaire) de l'utilisateur peut être spécifié, pour cela on peut utiliser la commande **sg**. Cela permet de disposer des droits spécifique de ce groupe à l'exécution.
# affiche l' id utilisateur du groupe principal et la liste de ses groupes d'appartenance
$ id
uid=1000(yoann) gid=1000(yoann) groupes=1000(yoann),4(adm),20(dialout),...,120(lpadmin),131(lxd),132(sambashare),135(docker)
# relancer la commande en spécifiant le groupe dialout
sg dialout "/usr/bin/tail -f /var/log/ufw.log &"
# afficher les processus contenant tail
$ ps -eo "pid,user,group,args" | grep tail
...
17435 yoann yoann /usr/bin/tail -f /var/log/ufw.log
24207 yoann dialout /usr/bin/tail -f /var/log/ufw.log
On peut associer un mot de passe à un groupe. Le mot de passe du groupe permet à l'utilisateur (après authentification) de temporairement bénéficier des permissions supplémentaires associées au groupe:
# définir le mot de passe du groupe
$ sudo gpasswd discordnetpol
# après authentification le processus bénéficiera des droits associés au groupe discordnetpol
$ sg discordnetpol "/usr/bin/tail -f /var/log/ufw.log &"
# afficher les processus
$ ps -eo "pid,user,group,args" | grep tail
17435 yoann yoann /usr/bin/tail -f /var/log/ufw.log
24207 yoann dialout /usr/bin/tail -f /var/log/ufw.log
26112 yoann discord+ /usr/bin/tail -f /var/log/ufw.log
===== Utiliser sg sans saisir de mot de passe =====
Pour déqactiver l'authentification par **sg**, deux conditions:
- Ajouter l'utilisateur dans le groupe;
- Retirer le mot de passe et restreindre l'accès aux seuls membres.
# Déclare l'utilisateur 'username' membre du groupe 'mongroup'
$ sudo gpasswd -M username mongroup
# Retire le mot de passe pour les membres du groupe
$ sudo gpasswd -r mongroup
$ sudo gpasswd -R mongroup
==== Avec la commande sudo ====
Si l'utilisateur est membre du groupe ''sudo'', il peut utiliser la commande sudo pour spécifier le groupe principal à l'exécution via l'argument **-g**
$ sudo -g discordnetpol /usr/bin/tail -f /var/log/ufw.log &
# La commande sudo s'execute en root et génère un processus fils avec le groupe primaire voulu
$ ps -eo "pid,user,group,args" | grep tail
41536 root discord+ sudo -g discordnetpol /usr/bin/tail -f /var/log/ufw.log
41537 yoann discord+ /usr/bin/tail -f /var/log/ufw.log
===== Références =====
* https://unix.stackexchange.com/questions/112225/how-to-run-a-process-with-a-specific-group
* https://www.linuxquestions.org/questions/linux-newbie-8/how-to-set-and-use-group-password-681133/