web-dev-qa-db-fra.com

Autoriser un groupe non-Sudo à contrôler le travail en cours

J'essaie de configurer un travail Upstart à exécuter au démarrage du système. Ce dernier peut également être démarré/arrêté par les membres d'un groupe autre que Sudo. Avec une version précédente, j’utilisais update-rc.d et les scripts stockés dans /etc/init.d/ pour que cela fonctionne en ajoutant %Group ALL = NOPASSWD: /etc/init.d/scriptname à mon fichier sudoers, mais il me semble impossible d’obtenir un fonctionnement équivalent pour Upstart.

J'ai essayé d'ajouter %Group ALL = NOPASSWD: /sbin/initctl start jobname au fichier sudoers, mais essayer d'exécuter la commande start jobname produit cette erreur:

start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

Autant que je sache, il s'agit d'une plainte concernant le fait que mon compte d'utilisateur ne dispose pas du pouvoir d'envoyer des messages "Démarrer" dans le fichier de configuration D-Bus pour Upstart. Je n'ai pas été en mesure de trouver la moindre information sur la manière de modifier ce fichier pour donner à un groupe la permission d'accéder à un service spécifique. Une telle option existe-t-elle? Existe-t-il un moyen de modifier le fichier Sudoers pour pouvoir exécuter le travail sans modifier le fichier de configuration? Est-ce que je ferais mieux de m'en tenir à la version précédente?

11
Angle O'Saxon

Personnellement, j'utilise la ligne suivante dans le fichier /etc/sudoers.d/jobname_myuser:

myuser ALL = (root) NOPASSWD: /sbin/start jobname, /sbin/stop jobname, /sbin/restart jobname, /sbin/status jobname

comme décrit ici: https://serverfault.com/a/390723/68608

7
Szymon Jeż

Vous pouvez commencer par rechercher où la configuration de D-Bus spécifique à Upstart est conservée. Voir que destination="com.ubuntu.Upstart" extrait du message d'erreur? Maintenant, essayez de le grep dans le dossier avec les fichiers de configuration D-Bus:

vhost07:~ $ grep -r "com.ubuntu.Upstart" /etc/dbus-1
/etc/dbus-1/system.d/Upstart.conf:    <allow own="com.ubuntu.Upstart" />
[...skipped...]

Ce fichier Upstart.conf contient des exemples de règles. J'imagine que vous pourriez essayer de déterminer le format d'une politique d'eux. Essayez ensuite d’autoriser votre utilisateur spécifique uniquement aux actions dont il a besoin. Par exemple, comme dans:

<policy user="pope_benedict">
  <allow send_destination="com.ubuntu.Upstart"
         send_interface="com.ubuntu.Upstart0_6.Job"
         send_member="Start"/>
</policy>

Cela devrait permettre à l'utilisateur pope_benedict de démarrer ce travail.

Notez que les valeurs des attributs de stratégie "autoriser" sont répertoriées dans votre message d'erreur d'origine.

7
Iuliu Pascaru

Une telle option n'existe pas dans Sudo.

La différence entre les scripts Sysv et les fichiers de configuration Upstart est la suivante: les scripts Sysv sont des scripts, des exécutables à part entière et vous pouvez dire à Sudo d'autoriser un groupe à les exécuter. D'autre part, les fichiers de configuration Upstart sont simplement des fichiers de configuration, et non des exécutables, de sorte que l'exécution de start (lien symbolique vers initctl) est autorisée par Sudo. Votre problème ici est que si vous autorisez les utilisateurs à exécuter initctl, vous leur permettez de initctl tout.

La solution est simple si vous ne vous occupez que d’un seul emploi. Faites un script, dites /usr/bin/jobname.sh avec

#!/bin/sh
initctl $1 jobname

puis chmod 755 /usr/bin/jobname.sh et ajoutez enfin cet exécutable à votre fichier sudoers:

%Group ALL = NOPASSWD: /usr/bin/jobname.sh

Ainsi, tout le monde peut appeler jobname.sh start ou jobname.sh stop pour contrôler ce travail spécifique. Vous voudrez peut-être ajouter une vérification pour autoriser uniquement les paramètres start et stop, etc.

2
Tuminoid

Comme indiqué ci-dessus, le démon dbus a un fichier de configuration qui le spécialise pour une application particulière.

ls /etc/dbus-1/system.d/
avahi-dbus.conf
bluetooth.conf
...
Upstart.conf
wpa_supplicant.con

Le fichier de configuration établit également les limites de ressources, les paramètres de sécurité, etc.

Pour plus de détails, voir dbus-daemon-1 (1) - page de manuel Linux

Pour permettre à un groupe de démarrer/arrêter des travaux Upstart, ajoutez la stratégie suivante à /etc/dbus-1/system.d/Upstart.conf.

  <policy group="YourGroupName">
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Start" />
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Stop" />
  </policy>

Vous devez prendre en compte les implications de cette stratégie sur la sécurité avant de modifier la stratégie par défaut. Les membres du YourGroupName pourront démarrer/arrêter tous les travaux en amont.

0
Goran Miskovic