Outils pour utilisateurs

Outils du site


sysadmin:linux:executer_processus_avec_groupe_specifique

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 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 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:

  1. Ajouter l'utilisateur dans le groupe;
  2. 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

sysadmin/linux/executer_processus_avec_groupe_specifique.txt · Dernière modification : 2021/06/25 12:52 de 92.154.112.189