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.


Posten Sie Ihr Init-Skript?
Quanten

Hast du ein paar Protokolle?
Dom

Warum benutzt du nicht einfach sudas rc-Skript?
Mat

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.


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.