With upstart v1.4, setuid and setgid are supported natively in config file.
Ausführen von Upstart-Jobs als nicht privilegierte Benutzer
Wie kann man kanonisch einen Upstart-Job dazu veranlassen, seine Benutzer-ID zu ändern und das Skript als nicht privilegierter Benutzer auszuführen?
Natürlich kann man su
oder verwenden sudo
, aber das scheint hackig zu sein (und kann unnötige Protokollzeilen erzeugen).
8 Antworten auf die Frage
- Beliebte
- Neu
- Mit Kommentaren
- Aktiv
Auf dem #upstart-Kanal von freenode wird die offizielle Frage gestellt:
Eine zukünftige Version von Upstart wird dafür native Unterstützung bieten, aber für den Moment können Sie Folgendes verwenden:
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]
Wie wäre es mit dem start-stop-daemon?
exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd
Vom Upstart-Kochbuch :
Die empfohlene Methode für Debian- und Ubuntu-Systeme ist die Verwendung des Hilfsprogramms
start-stop-daemon
. […]start-stop-daemon
Schreibt keine Grenzen für den Start von PAM ("Pluggable Authentication Module").
Hinweis: start-stop-daemon
wird in RHEL nicht unterstützt.
Es gibt mehrere Möglichkeiten, dies zu tun, alle mit etwas unterschiedlicher Semantik, insbesondere in Bezug auf die Gruppenzugehörigkeit:
setuidgid
bringt Sie in die von Ihnen angegebene Gruppe.- Mit den Original-Daemontools
setuidgid
werden Sie nur in diese Gruppe aufgenommen, sodass Sie nicht auf Dateien zugreifen können, die zu anderen Gruppen gehören, deren Mitglied Sie sind. - Die
setuidgid
from daemontools-encore und dassetuidgid
from the nosh-Toolset verfügen beide über eine Option-s
(aka--supplementary
), mit der Sie in diese Gruppe aufgenommen werden. Außerdem werden Sie in alle zusätzlichen Gruppen für den von Ihnen angegebenen Benutzer aufgenommen.
- Mit den Original-Daemontools
Wenn
newgrp
Sie den weniger privilegierten Benutzer verwenden, wird eine Gruppe zu Ihrer Gruppe hinzugefügt, aber auch eine neue Subshell erstellt, was die Verwendung innerhalb von Skripts schwierig macht.start-stop-daemon
bewahrt Ihre Gruppenmitgliedschaft und tut viel mehr als nur setuid / setgid.chpst -u username:group1:group2:group3... commandname
Sie können genau festlegen, welche Gruppenzugehörigkeiten Sie annehmen sollen, aber (in Ubuntu ) wird nur dasrunit
Paket mitgeliefert, was eine Alternative zu istupstart
.su -c commandname username
Nimmt alle Gruppenmitgliedschaften von username auf, wassudo -u username commandname
wahrscheinlich der Weg zum geringsten Erstaunen ist.
Verwenden Sie setuidgid
aus dem Paket daemontools
.
Dokumentation hier: http://cr.yp.to/daemontools/setuidgid.html
Bei einer Ubuntu 10.10-Instanz auf Amazon EC2 hatte ich mit dem start-stop-daemon
Befehl mehr Glück .
Ich hatte auch Probleme mit einigen anderen aufstrebenden Strophen . Ich rufe eine Python-Anwendung mit bestimmten virtualenv
und einigen Parametern zu meinem ausgeführten Programm auf.
Folgendes hat bei mir funktioniert.
script export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/ exec start-stop-daemon --start --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 & end script
Sie PYTHONPATH
erhalten einige Pakete, die von der Quelle in den PYTHON-Modulpfad installiert werden, wenn dieser Upstart-Job ausgeführt wird. Ich musste alles auf absoluten Wegen machen, weil die chdir
Strophe nicht zu funktionieren schien.
Ich habe CentOS 6 verwendet, und ich konnte weder den empfohlenen Hack (für Upstart 0.6.5) für mich verwenden, noch den 'su'-Trick, weil die Anzahl der beteiligten Gabeln (4, glaube ich,) nicht von' erwartet Fork 'verfolgt wurde 'oder' Daemon erwarten '.
Ich habe es eben getan
chown user:group executable chmod +s executable
(dh das Setuid-Bit setzen und den Eigentümer ändern).
Dies ist möglicherweise nicht die sicherste Methode, aber für ein internes Forschungs- und Entwicklungsprojekt war es in unserem Fall nicht wichtig.
Es gibt eine dritte Möglichkeit, je nachdem, was Sie erreichen wollen. Möglicherweise können Sie die Zugriffskontrollen der betreffenden Dateien / Geräte lockern . Dies kann einem unberechtigten Benutzer ermöglichen, Elemente bereitzustellen oder auf Elemente zuzugreifen, für die er normalerweise nicht berechtigt ist. Stellen Sie nur sicher, dass Sie dabei nicht die Schlüssel für das Königreich preisgeben.
Sie können auch das Timeout des Sudo-Kennwortcaches ändern . Ich empfehle es jedoch nicht, es sei denn, Ihr Computer ist physisch sicher (dh Sie glauben, dass es unwahrscheinlich ist, dass ein Passant versucht, Sudo-Zugriff zu erhalten).
Es gibt einen guten Grund, dass es nur sehr wenige Möglichkeiten sind privilegiert, Aktionen auszuführen, und dass sie durchführen unnötig notwendig Protokollierung. Lockere Einschränkungen wären ein Sicherheitsrisiko für Ihr System, und mangelnde Protokollierung bedeutet, dass Sie nicht wissen können, was passiert ist, wenn Sie gefährdet wurden.
Wenn die Größe Ihrer Protokolldateien ein Problem ist, ist wahrscheinlich etwas falsch. Sudo erzeugt unter normalen Bedingungen nur eine Leitung pro Verwendung.
Verwandte Probleme
-
4
Gutes freies Ubuntu Server-VMWare-Image benötigt
-
8
Laptop Standby unter Linux / Ubuntu
-
1
Wie kann ich von Ubuntu aus über das Netzwerk auf Windows Vista-Drucker zugreifen?
-
3
Kann ich Microsoft Office 2007 unter Ubuntu ausführen?
-
6
Virtualbox, VMware, KVM oder andere für Ubuntu-Virtualisierung?
-
4
Windows 7 "Aero Snap" -Funktion für Ubuntu GNOME
-
5
iPod-Verwaltungssoftware für Linux
-
1
Rückkehr von Dual-Boot zu Windows
-
2
Firefox zum Drucken von PDF-Schriftarten
-
5
Wie bekomme ich die maximale Auflösung unter Ubuntu in Microsoft Virtual PC?