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?
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
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.
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.
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.