ubuntuusers.de

Script über PHP als anderer Benutzer starten

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

andre.w

Anmeldungsdatum:
26. November 2007

Beiträge: 36

Wohnort: Lautertal

Hi,
ich versuch gerade ein kleines Webinterface (auf php basis) zu erstellen, dass mir auf dem pc via exec('/pfad/zum/scipt/') ein Script startet, dass dann ein Serverplugin neustarten soll. Dazu müsste aber dieses Script nicht als www-Benutzer sondern als Benutzer server gestartet werden. Dieses Script gehört dem Benutzer server - also habe ich "chmod u+s script" versucht, wodurch es ja eigentlich immer als "server" gestartet werden sollte. Wenn ich aber ein "whoami" in das Script einbaue gibt er mir als Benutzer trotzdem noch "www" aus und nicht "server" wie er eigentlich sollte. Habe ich da noch etwas vergessen mit zu berücksichtigen oder gibt es noch einen anderen Weg das ganze zu realisieren?

mfg andre

Blattlaus

Avatar von Blattlaus

Anmeldungsdatum:
29. März 2006

Beiträge: 1399

sudo -u server /pfad/zum/script

Und dann im sudoers file eben sudo ohne passwort für diesen User und den Command einrichten.

andre.w

(Themenstarter)

Anmeldungsdatum:
26. November 2007

Beiträge: 36

Wohnort: Lautertal

Was mir gerade einfällt, der Root läuft ja auf Suse und nicht ubuntu, hätte ich vielleicht noch dazu sagen sollen. Und vollen zugriff habe ich auch nicht darauf, da er nicht mir selbst gehört - am besten wäre eine möglichkeit fuer die man keine root-Rechte bräuchte

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

andre.w hat geschrieben:

Dazu müsste aber dieses Script nicht als www-Benutzer sondern als Benutzer server gestartet werden. Dieses Script gehört dem Benutzer server - also habe ich "chmod u+s script" versucht, wodurch es ja eigentlich immer als "server" gestartet werden sollte.

Linux unterstützt das SUID-Bit nicht auf Skripten.

andre.w hat geschrieben:

Wenn ich aber ein "whoami" in das Script einbaue gibt er mir als Benutzer trotzdem noch "www" aus und nicht "server" wie er eigentlich sollte. Habe ich da noch etwas vergessen mit zu berücksichtigen oder gibt es noch einen anderen Weg das ganze zu realisieren?

Wenn du keinen Root-Zugriff hast, zumindest keinen einfachen. Am besten wäre eventuell ein C-Wrapper um das Skript, der das SUID gesetzt hat.

andre.w

(Themenstarter)

Anmeldungsdatum:
26. November 2007

Beiträge: 36

Wohnort: Lautertal

Wie wäre es dann möglich wenn ich root zugriff hätte? dann muss ich halt erstmal warten, bis der Besitzer vom Root mal etwas zeit hat..

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

andre.w hat geschrieben:

Wie wäre es dann möglich wenn ich root zugriff hätte? dann muss ich halt erstmal warten, bis der Besitzer vom Root mal etwas zeit hat..

Das hat Blattlaus dir doch gezeigt...

andre.w

(Themenstarter)

Anmeldungsdatum:
26. November 2007

Beiträge: 36

Wohnort: Lautertal

Das ganze funkioniert aber nicht so richtig, da der Benutzer www anscheinend nicht die richtigen Rechte dafür besitzt.

die php-Datei:

<?php
$output = passthru('/pfad/zum/script');
echo "<pre>$output</pre>";
?>

mit dem inhalt von script:

echo scriptbeginn
woami
echo scriptende

das ganze gibt mir dann im Browser "scriptbeginn www scriptende" aus.

wenn ich die php-Datei ändere, so dass anstatt

'/pfad/zum/script'


'sudo -u server /pfad/zum/script'

ausgefuehrt wird bekomme ich im Browser garkeine Ausgabe.

in die sudoers habe ich folgendes eingetragen (da bin ich mir absolut nicht sicher ob das passt, hab das mal so gemacht wie ich es nach der manpage vertsanden habe):

www localhost = NOPASSWD: /pfad/zum/script

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

andre.w hat geschrieben:

www localhost = NOPASSWD: /pfad/zum/script

Versuch mal, ALL anstelle von localhost zu verwenden, da sudo eventuell einen anderen Hostnamen zur Authentifizierung verwendet.

andre.w

(Themenstarter)

Anmeldungsdatum:
26. November 2007

Beiträge: 36

Wohnort: Lautertal

ich hab mir das ganze heute nochmal vorgenommen:
in sudoers muss folgendes eingetragen werden, dass es funktioniert:

web-benutzer ALL = (benutzer_unter_dem_es_laufen_soll) NOPASSWD: /pfad/zum/script


und php muss das ganze mit

exec('sudo -u benutezr_unter_dem_es_laufen_soll /pfad/zum/script')


ausfuehren, dann geht es wie es soll.

Antworten |