it-swarm.com.de

Zulassen, dass Nicht-Sudo-Gruppen den Upstart-Job steuern

Ich versuche, einen Upstart-Job einzurichten, der beim Systemstart ausgeführt wird. Dieser kann auch von Mitgliedern einer anderen Gruppe als Sudo gestartet/gestoppt werden. In einer früheren Version habe ich update-rc.d und in /etc/init.d/ gespeicherte Skripte verwendet, um dies zu erreichen, indem ich %Group ALL = NOPASSWD: /etc/init.d/scriptname zu meiner sudoers-Datei hinzufügte, aber ich kann anscheinend keine Entsprechung für Upstart finden.

Ich habe versucht, %Group ALL = NOPASSWD: /sbin/initctl start jobname zur sudoers-Datei hinzuzufügen, aber der Versuch, den Befehl start jobname auszuführen, erzeugt diesen Fehler:

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")

Soweit ich das beurteilen kann, ist dies eine Beschwerde darüber, dass mein Benutzerkonto nicht die Berechtigung hat, Startmeldungen in der D-Bus-Konfigurationsdatei für Upstart zu senden. Ich konnte keine Informationen darüber finden, wie diese Datei bearbeitet werden kann, um einer Gruppe die Berechtigung zum Zugriff auf einen bestimmten Dienst zu erteilen. Gibt es eine solche Option? Gibt es eine Möglichkeit, die Sudoers-Datei zu bearbeiten, damit ich den Job ausführen kann, ohne die Konfigurationsdatei zu bearbeiten? Bleibe ich besser bei der Vorgängerversion?

11
Angle O'Saxon

Ich persönlich verwende die folgende Zeile in der Datei /etc/sudoers.d/jobname_myuser:

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

wie hier beschrieben: https://serverfault.com/a/390723/68608

7
Szymon Jeż

Sie können damit beginnen, herauszufinden, wo die für Upstart spezifische D-Bus-Konfiguration gespeichert ist. Sehen Sie, dass destination="com.ubuntu.Upstart" Schnipsel aus der Fehlermeldung? Versuchen Sie nun, es im Ordner mit den D-Bus-Konfigurationsdateien zu speichern:

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

Diese Upstart.conf -Datei enthält einige Beispiele für Richtlinien. Ich denke, Sie könnten versuchen, das Format einer Richtlinie von ihnen herauszufinden. Versuchen Sie dann, Ihrem bestimmten Benutzer nur die Aktionen zuzulassen, die er benötigt. Zum Beispiel wie in:

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

Dies sollte dem Benutzer pope_benedict erlauben, diesen Job zu starten.

Beachten Sie, dass die Werte für die Richtlinienattribute "Zulassen" in Ihrer ursprünglichen Fehlermeldung aufgeführt sind.

7
Iuliu Pascaru

Eine solche Option gibt es in Sudo nicht.

Der Unterschied zwischen Sysv-Skripten und Upstart-Konfigurationsdateien besteht lediglich darin, dass Sysv-Skripten Skripten und ausführbare Dateien sind und Sie Sudo anweisen können, sie von einer Gruppe ausführen zu lassen. Andererseits sind Upstart-Konfigurationsdateien nur Konfigurationsdateien, keine ausführbaren Dateien. Die Ausführung von start (Symlink zu initctl) ist also das, was Sudo zulässt. Ihr Problem hierbei ist, dass Sie es den Leuten erlauben, initctl auszuführen, und dass Sie ihnen erlauben, initctl alles auszuführen.

Die Lösung ist jedoch einfach, wenn Sie sich nur um einen Job kümmern. Machen Sie ein Skript, sagen Sie /usr/bin/jobname.sh mit

#!/bin/sh
initctl $1 jobname

dann chmod 755 /usr/bin/jobname.sh und schließlich die ausführbare Datei zu Ihrer sudoers-Datei hinzufügen:

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

Auf diese Weise kann jeder jobname.sh start oder jobname.sh stop aufrufen, um diesen bestimmten Job zu steuern. Möglicherweise möchten Sie einige Überprüfungen hinzufügen, um nur die Parameter start und stop usw. zuzulassen.

2
Tuminoid

Wie oben erwähnt, verfügt der dbus-Daemon über eine Konfigurationsdatei, die ihn auf eine bestimmte Anwendung spezialisiert.

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

Die Konfigurationsdatei legt auch Ressourcenlimits, Sicherheitsparameter usw. fest.

Weitere Informationen finden Sie unter dbus-daemon-1 (1) - Linux-Manpage

Fügen Sie die folgende Richtlinie zu /etc/dbus-1/system.d/Upstart.conf hinzu, damit eine Gruppe Upstart-Jobs starten/stoppen kann

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

Sie sollten die Auswirkungen einer solchen Richtlinie auf die Sicherheit berücksichtigen, bevor Sie die Standardrichtlinie ändern. Mitglieder von YourGroupName können alle Upstart-Jobs starten/stoppen.

0
Goran Miskovic