J'essaie de configurer un travail Upstart à exécuter au démarrage du système, et qui peut également être démarré / arrêté par des membres d'un groupe autre que sudo
. Avec une version précédente, j'ai utilisé update-rc.d
et des scripts stockés /etc/init.d/
pour que cela fonctionne en ajoutant %Group ALL = NOPASSWD: /etc/init.d/scriptname
à mon fichier sudoers, mais je n'arrive pas à obtenir un é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, c'est une plainte sur la façon dont mon compte d'utilisateur n'est pas autorisé à envoyer des messages de démarrage dans le fichier de configuration D-Bus pour Upstart. Je n'ai pas pu trouver réellement d'informations sur la façon de modifier ce fichier pour donner à un groupe l'autorisation d'accéder à un service spécifique - une telle option existe-t-elle? Existe-t-il un moyen de modifier le fichier Sudoers afin que je puisse exécuter le travail sans modifier le fichier de configuration? Suis-je mieux de rester avec la version précédente?
J'utilise personnellement la ligne suivante dans le fichier /etc/sudoers.d/jobname_myuser:
comme décrit ici: /server//a/390723/68608
la source
Une telle option n'existe pas dans sudo.
La différence entre les scripts Sysv et les fichiers de configuration Upstart est juste que: les scripts Sysv sont des scripts, des exécutables à part entière et vous pouvez dire à sudo d'autoriser un groupe à les exécuter. En revanche, les fichiers de configuration Upstart ne sont que de simples fichiers de configuration, pas exécutables, de sorte que l'exécution
start
(lien symboliqueinitctl
) est la chose permet sudo. Votre problème ici est que permettant aux gens de couririnitctl
vous leur permettre deinitctl
tout.La solution est si simple , si votre préoccupation qu'un seul emploi. Faire un script, par exemple
/usr/bin/jobname.sh
avecpuis
chmod 755 /usr/bin/jobname.sh
et enfin ajoutez cet exécutable à votre fichier sudoers:De cette façon, tout le monde peut appeler
jobname.sh start
oujobname.sh stop
contrôler ce travail spécifique. Vous pouvez ajouter quelques vérifications pour permettre uniquementstart
et lesstop
paramètres , etc.la source
initctl
, mais que Upstart refuse tous les signaux envoyés par des utilisateurs / groupes qui ne reçoivent pas explicitement une entrée de stratégie Allow dans Upstart.conf? Et il n'y a aucun moyen de fournir plus de granularité qu'un paramètre tous travaux ou aucun dans le fichier de configuration?com.ubuntu.Upstart0_6.<JOB>
partie) dans Upstart.conf. Selon vos besoins, il pourrait être plus simple de créer ce type de script au lieu d'écrire des politiques dbus et de redémarrer dbus, etc. La politique Dbus est évidemment la «bonne» chose à faire, mais selon le cas, un script simple peut aller long chemin avec moins de problèmes.com.ubuntu.Upstart0_6.jobname
commesend_interface
produit le même message d'erreur qu'auparavant. Si j'ai raison de penser que la sortie d'erreur contient les informations sur le signal, il semble que l'interface ou la destination ne reflète pas le service Upstart auquel le signal fait référence. Je pense que les informations de service ne sont que des arguments dans le message d'appel de la méthode D-Bus, et je ne suis pas sûr de pouvoir modifier la politique D-Bus pour que Upstart prenne des décisions en fonction des valeurs des arguments.sudo jobname.sh start
, de sorte que Upstart voit la demande comme venant de l'utilisateur.root
Je fais un effort pour essayer de le faire c'est la "bonne" façon (donc l'abandon des scripts Sys-V en premier lieu), donc j'aimerais que cela fonctionne via une politique D-Bus ou une autre option de configuration Upstart, mais si je ne peux pas pour que ça marche, j'accepte cette réponse."$1"
. Avec votre[ "$1" = "start" -o "$1" = "stop" ]
test, je crois que l'$1
expansion sûre mais non citée dans un script exécuté en tant que root est juste une habitude malsaine (à moins que le fractionnement de mots ne soit délibérément souhaité) ...Comme indiqué ci-dessus, le démon dbus possède un fichier de configuration qui le spécialise pour une application particulière.
Le fichier de configuration établit également des limites de ressources, des 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
Vous devez tenir compte des implications de sécurité d'une telle stratégie avant de modifier la stratégie par défaut. Les membres de YourGroupName pourront démarrer / arrêter toutes les tâches Upstart.
la source
start: You do not have permission to modify job: jobname
quand j'ai essayé de démarrer le service.