Ich versuche, einen Upstart-Job einzurichten, der beim Systemstart ausgeführt wird. Dieser Job kann auch von Mitgliedern einer anderen Gruppe als gestartet / gestoppt werden sudo
. In einer früheren Version habe ich update-rc.d
Skripte verwendet und darin gespeichert /etc/init.d/
, um dies durch Hinzufügen %Group ALL = NOPASSWD: /etc/init.d/scriptname
zu meiner sudoers-Datei zum Laufen zu bringen, aber ich kann anscheinend kein Äquivalent für Upstart finden.
Ich habe versucht %Group ALL = NOPASSWD: /sbin/initctl start jobname
, der sudoers-Datei etwas hinzuzufügen, aber der Versuch, den Befehl auszuführen, start jobname
führt zu folgendem 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, handelt es sich um eine Beschwerde darüber, dass mein Benutzerkonto nicht in der Lage ist, Startnachrichten in der D-Bus-Konfigurationsdatei für Upstart zu senden. Ich konnte keine Informationen zum Bearbeiten dieser Datei finden, 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? Bleib ich besser bei der vorherigen Version?
Ich persönlich verwende die folgende Zeile in der Datei /etc/sudoers.d/jobname_myuser:
wie hier beschrieben: /server//a/390723/68608
quelle
Eine solche Option gibt es in sudo nicht.
Der Unterschied zwischen Sysv-Skripten und Upstart-Konfigurationsdateien besteht darin, dass: Sysv-Skripte Skripte sind, eigenständige ausführbare Dateien, und Sie können sudo anweisen, dass eine Gruppe sie ausführen darf. Auf der anderen Seite sind Upstart-Konfigurationsdateien lediglich Konfigurationsdateien, keine ausführbaren Dateien. Die Ausführung von
start
(Symlink zuinitctl
) ist also das, was sudo zulässt. Ihr Problem hierbei ist, dass Sie es den Leuteninitctl
erlauben,initctl
alles zuzulassen, damit Sie alles zulassen .Die Lösung ist jedoch einfach, wenn Sie sich nur um einen einzigen Job kümmern. Machen Sie ein Skript, sagen wir
/usr/bin/jobname.sh
mitchmod 755 /usr/bin/jobname.sh
Fügen Sie dann und schließlich diese ausführbare Datei zu Ihrer Sudoers-Datei hinzu:Auf diese Weise kann jeder diesen bestimmten Job anrufen
jobname.sh start
oderjobname.sh stop
steuern. Vielleicht möchten Sie einige Kontrollen hinzufügen nur zu erlauben ,start
undstop
Parameter usw.quelle
initctl
verweigert, sondern dass Upstart alle von Benutzern / Gruppen gesendeten Signale ablehnt, denen nicht explizit ein Richtlinieneintrag "Zulassen" in Upstart.conf zugewiesen wurde. Und es gibt keine Möglichkeit, mehr Granularität bereitzustellen als eine Einstellung für alle Jobs oder keine in der Konfigurationsdatei?com.ubuntu.Upstart0_6.<JOB>
Jobbasis (siehe Teil) in der Upstart.conf definieren. Abhängig von Ihren Anforderungen ist es möglicherweise einfacher, diese Art von Skript dafür zu erstellen, als dbus-Richtlinien zu schreiben und dbus usw. neu zu starten. Dbus-Richtlinien sind offensichtlich die "richtige" Vorgehensweise, aber je nach Fall kann ein einfaches Skript a langer Weg mit weniger Mühe.com.ubuntu.Upstart0_6.jobname
als verwendet werden sollsend_interface
, hat dieselbe Fehlermeldung wie zuvor erzeugt. Wenn ich zu Recht vermute, dass die Fehlerausgabe die Signalinformationen enthält, sieht es so aus, als ob die Schnittstelle oder das Ziel nicht den Upstart-Dienst widerspiegeln, auf den sich das Signal bezieht. Ich denke, dass die Dienstinformationen nur Argumente in der D-Bus-Methodenaufrufnachricht sind, und ich bin nicht sicher, ob ich die D-Bus-Richtlinie für Upstart bearbeiten kann, um Entscheidungen basierend auf Argumentwerten zu treffen.sudo jobname.sh start
, damit Upstart die Anfrage als vomroot
Benutzer stammend ansieht. Ich bemühe mich, dies zu versuchen Dies ist der "richtige" Weg (also in erster Linie die Abkehr von Sys-V-Skripten). Daher möchte ich, dass dies über eine D-Bus-Richtlinie oder eine andere Upstart-Konfigurationsoption funktioniert, aber wenn ich nicht kann Lass das funktionieren Ich werde diese Antwort akzeptieren."$1"
. Mit Ihrem[ "$1" = "start" -o "$1" = "stop" ]
Test glaube ich, dass es eine sichere, aber nicht zitierte$1
Erweiterung in einem Skript ist, das als Root ausgeführt wird. Dies ist nur eine ungesunde Angewohnheit (es sei denn, die Wortaufteilung ist absichtlich erwünscht) ...Wie oben erwähnt, verfügt der dbus-Daemon über eine Konfigurationsdatei, die ihn auf eine bestimmte Anwendung spezialisiert hat.
Die Konfigurationsdatei legt auch Ressourcenlimits, Sicherheitsparameter usw. fest.
Weitere Informationen finden Sie in der Manpage dbus-daemon-1 (1) - Linux
Fügen Sie /etc/dbus-1/system.d/Upstart.conf die folgenden Richtlinien hinzu, damit eine Gruppe Upstart-Jobs starten / stoppen kann
Sie sollten die Auswirkungen dieser Richtlinie auf die Sicherheit berücksichtigen, bevor Sie die Standardrichtlinie ändern. Mitglieder des YourGroupName können alle Upstart-Jobs starten / stoppen .
quelle
start: You do not have permission to modify job: jobname
beim Versuch, den Dienst zu starten, eine Meldung erhalten .