PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sudoers (Benutzerrechte) und PHP



semy
16.03.06, 20:53
Guten Abend,

ich setze momentan sudo ein, um mittels PHP Systembefehle ausführen zu können. Funktioniert auch alles gut soweit.

Mein Apache läuft unter dem Benutzer www-data und der Gruppe www-data.

In die Datei /etc/sudoers habe ichb folgende Zeile hinzugefügt:

www-data ALL = NOPASSWD: ALL

Nun kann ich wie nachfolgend in PHP ein Systembefehl ausführen:

exec("sudo DERBEFEHL");

Noch eine kleine Bemerkung, ich kann und möchte nicht auf sudo verzichten. Nur damit keine Antworten kommen mit z.B. dem Inhalt "vergiss sudo, mach es so...".

So jetzt zu eigentlichen Frage:
Da ich/wir ziemlich viele Kunden haben und nicht möchten, dass ein Kunde mal zufällig einen Befehl wie z.B.

exec("sudo reboot");
o.ä. in seiner PHP-Datei ausführt, möchten wir den sudo-Aufruf nur über ein Passwort gestatten. Ist es also möglich dem User www-data in der Datei /etc/sudoers ein Passwort zuzordnen? Und wenn ja, wie sieht dann der PHP-Befehl aus? Muss ich auf Crypt oder sonstiges achten?

Ich weiß, ich könnte in der PHP.ini einfach den Befehl exec, system etc. verbieten, aber das bringt uns ja nichts, da der Befehl ja dann auch für uns gesperrt ist.

Naja trotz meiner komplexen Beschreibung hoffe ich, dass sich jemand finden wird, der mir helfen kann.

Liebe Grüße,
Semy

PierreS
16.03.06, 21:03
Kann es sein, daß Du mit diesem sudo-Eintrag allen Apache-Prozessen volle Root-Rechte gibst? Sicher, daß Du das möchtest?

Der Gestreifte
16.03.06, 21:07
Warum "ALL = NOPASSWD: ALL"?
Das mit dem Passwort nutzt so nicht viel, weil die Leute dann einfach ihren reboot (oder sonstigen Unsinn) nach Eingabe des Passworts durchführen können.

Besser wäre es, Du legst für die Betreffenden einen "User_Alias" an und packst die Befehle, die sie ausführen dürfen in ein "Cmnd_Alias".
So können sie nur die in "Cmnd_Alias" definierten Befehle per sudo ausführen.

semy
16.03.06, 21:33
Hi,

Der Gestreifte:

Warum "ALL = NOPASSWD: ALL"?
Das mit dem Passwort nutzt so nicht viel, weil die Leute dann einfach ihren reboot (oder sonstigen Unsinn) nach Eingabe des Passworts durchführen können.

Antwort:
Ja sicher könnten Sie "nach Eingabe" des Passwortes einen Befehl wie reboot oder dergelichen ausführen, ABER die haben ja das Passwort nicht ;). Nur ich habe es und das soll sich auch nicht ändern.

Der Gestreifte:

Besser wäre es, Du legst für die Betreffenden einen "User_Alias" an und packst die Befehle, die sie ausführen dürfen in ein "Cmnd_Alias".
So können sie nur die in "Cmnd_Alias" definierten Befehle per sudo ausführen.

Antwort: Hmm.. könntest du mir das mal genauer erklären? Ich habe auch schon mal versucht einen anderen Benutzer für sudo zu erstellen:

meinneueruser ALL = NOPASSWD: ALL

Das ganze hat dann aber mit dem PHP-Befehl:

exec("sudo -u meinneueruser DERBEFEHL");

...leider nicht funktioniert. Wahrscheinlich weil der Apache unter www-data läuft!

@PierreS: Ja eigentlich wollte ich schon das der Benutzer www-data ROOT-Rechte hat, aber eben nur bei der Übergabe eines Passwortes...

Liebe Grüße,
Semy

Der Gestreifte
16.03.06, 23:08
Antwort:
Ja sicher könnten Sie "nach Eingabe" des Passwortes einen Befehl wie reboot oder dergelichen ausführen, ABER die haben ja das Passwort nicht ;).Das brauchen sie auch nicht.
Mit der Zeile ALL = NOPASSWD: ALL können sie alle Befehle ohne Passwortabfrage ausführen.


Nur ich habe es und das soll sich auch nicht ändern.Das könnte sich aber ändern, wenn sie ein "sudo passwd root" aufrufen.



Antwort: Hmm.. könntest du mir das mal genauer erklären?
User_Alias WWW_FRITZEN = fritze1, fritz2, fritzi
Cmnd_Alias WWW_FRITZEN_DUERFEN = /sbin/boesesprogramm, /usr/sbin/gefahrlichesprogramm
Cmnd_Alias DUERFEN_AUCH = /usr/sbin/sendmail
WWW_FRITZEN hostname= WWW_FRITZEN_DURFEN, DUERFEN_AUCHDamit dürfen die in der "Gruppe" WWW_FRITZEN zusammengefassten User fritze1, fritze2 und frizti auf dem Rechner "hostname" die in der "Befehlsgruppe" WWW_FRITZEN_DUERFEN gelisteten Befehle sowie den in aus DUERFEN_AUCH nach Eingabe ihres (eigenen!) Passwortes als root ausführen lassen.

WARNUNG:
Die sudoers ist grundsätzlich ok, aber ich weiss mangels Erfahrung nicht, wie das im Zsammenhang mit dem apachen aussieht (siehe PierreS' Hinweis).