Führen Sie das Skript von rc.local als Benutzer anstelle von root aus

26

Ich möchte bei jedem Start meines Servers ein Skript ausführen. Das Problem ist, dass ich ein bestimmter Benutzer sein muss, um das Skript auszuführen. Wenn ich versuche, es als root auszuführen, kann es bestimmte Pakete (wie z. B. Ruby) nicht finden.

Ich versuche zu xxx user01 zu wechseln.

sudo su user01
/etc/init.d/script start

Dies funktioniert jedoch nicht.

Philip
quelle
Posten Sie Ihr Init-Skript?
Quanten
Hast du ein paar Protokolle?
Dom
Warum benutzt du nicht einfach sudas rc-Skript?
Mat
Siehe stackoverflow.com/questions/8940771/… .
Ferdinand Prantl

Antworten:

30

Das Ausführen sudo su user01in einem Skript bedeutet nicht, dass die folgenden Befehle an die resultierende Shell gesendet werden. Tatsächlich bedeutet dies wahrscheinlich, dass eine neue Shell als user01 erzeugt wird, die niemals beendet wird!

Zwei Dinge:

  • Sie können einen Befehl als anderer Benutzer ausführen, indem Sie das -c 'command...'Argument wie folgt an su übergeben su user01 -c '/etc/init.d/script start'.
  • Das Starten eines Dienstes, der /etc/init.d von rc.local aus verwendet, ist nicht die richtige Vorgehensweise. Sie möchten den Dienst beim Start mithilfe Ihrer Verteilungstools wie chkconfigoder aktivieren update-rc.d. Sie möchten auch keine Jobs in /etc/init.d, die nicht als gestartet werden sollen root. Die Jobs selbst können jederzeit einem anderen Benutzerkonto zugeordnet werden, sollten jedoch von root aufgerufen werden.
Kyle Smith
quelle
8

Sie könnten etwas hineinlegen /etc/crontabund es ausführen@reboot

@reboot username /etc/init.d/script start
user9517 unterstützt GoFundMonica
quelle
2
oder in der eigenen crontab-Datei des Benutzers.
Jake,
4

Sie können den Befehl einfach wie folgt über sudo ausführen:

sudo -H -u user01 /etc/init.d/script start

-H setzt die Umgebungsvariable HOME auf die des Benutzers

-u gibt den Benutzernamen an, unter dem ausgeführt werden soll

joetek
quelle
0

Sicherlich können Sie dieses Skript nicht mit sudo ausführen, da vorausgesetzt wird, dass Benutzer angemeldet sind. Möglicherweise möchten Sie deaktivieren, was etwas riskant ist

Es gibt auch ein etwas älteres Tool namens RUNSUID: http://freecode.com/projects/runsuid

HTH

sebelk
quelle