it-swarm.com.de

Wie führe ich einen Befehl als bestimmter Benutzer in einem Init-Skript aus?

Ich schreibe ein Init-Skript, das einen einzelnen Befehl als ein Benutzer anders als root ausführen soll. So mache ich es gerade:
Sudo -u username command

Dies funktioniert im Allgemeinen wie erwartet unter Ubuntu/Debian, aber unter RHEL hängt das Skript, das als command ausgeführt wird.
Gibt es eine andere Möglichkeit, den Befehl als anderer Benutzer auszuführen?
(Beachten Sie, dass ich die lsb init-Funktionen nicht verwenden kann, da sie unter RHEL/Centos 5.x nicht verfügbar sind.)

33
ddario

Auf RHEL-Systemen ist der /etc/rc.d/init.d/functions script soll ähnlich liefern, was Sie wollen. Wenn Sie das oben in Ihrem Init-Skript angeben, werden alle Funktionen verfügbar.

Die dafür vorgesehene spezielle Funktion ist daemon. Wenn Sie beabsichtigen, damit ein dämonähnliches Programm zu starten, wäre eine einfache Verwendung:

daemon --user=username command

Wenn Ihnen das zu schwerfällt, gibt es runuser (siehe man runuser für vollständige Informationen; Einige Versionen benötigen möglicherweise -u vor dem Benutzernamen):

/sbin/runuser username -s /bin/bash -c "command(s) to run as user username"
24
lagweezle

Versuchen Sie es anstelle von Sudo

su - username command

Meiner Erfahrung nach ist Sudo auf RHEL-Systemen nicht immer verfügbar, aber s, weil s Teil des coreutils-Pakets ist, während Sudo ist im Sudo-Paket enthalten.

12
Jeff N

Wenn Sie einen Start-Stop-Daemon haben

start-stop-daemon --start --quiet -u username -g usergroup --exec command ...
12
crafter

Für Init-Skripte im Systemstil ist das ganz einfach. Fügen Sie einfach einen Benutzer = im Abschnitt [Service] hinzu.

Hier ist ein Init-Skript, das ich für qbittorrent-nox unter CentOS 7 verwende:

[Unit]
Description=qbittorrent torrent server

[Service]
User=<username>
ExecStart=/usr/bin/qbittorrent-nox
Restart=on-abort

[Install]
WantedBy=multi-user.target
12
LOAS

Ich mache es normalerweise so, wie Sie es tun (d. H. Sudo -u Benutzername Befehl). Es gibt aber auch die 'djb'-Methode, um einen Daemon mit den Rechten eines anderen Benutzers auszuführen. Siehe: http://thedjbway.b0llix.net/daemontools/uidgid.html

2
mti2935