sudo & php shell_exec

Mutschas1

New Member
Hallo Community,

ich habe vor einigen Jahren mal mittels visudo folgendes eingetragen, was nachwievor ohne Probleme funktioniert, damit ich mittels php's shell_exec() ps und grep verwenden kann:

Code:
vu2372 ALL=(runuser)NOPASSWD: /home/the/location/of/the-file.sh
vu2372 ALL=(runuser)NOPASSWD: /bin/ps, /bin/grep

Nun wollte ich die Befehle, die der User verwenden darf um "kill" erweitern:

Code:
vu2372 ALL=(runuser)NOPASSWD: /home/the/location/of/the-file.sh
vu2372 ALL=(runuser)NOPASSWD: /bin/ps, /bin/grep, /bin/kill

Nach Speicherung der Datei und ausführen des php-Scripts musste ich aber leider feststellen, dass der kill-Befehl einfach ignoriert wird (ps & grep gehen nachwievor). Im Log (/var/log/auth.log) steht leider nichts, was mich weiter bringt.

Habt ihr eine Idee? Muss ich vll. sudo "restarten"?

Danke.
 
Ausser du hättest /proc mit der Mountoption hidepid=1/2 in der fstab darf jeder User ohne sudo alle laufenden Prozesse und PID's sehen. Grep ist natürlich auch nicht restrikted.
Kann es also sein dass es nie geklappt hat, du es aber nicht gemerkt hast?
Wie rufst du denn via shell_exec den Befehl auf?
 
Ich denke die wesentliche Frage steckt hier:
dass der kill-Befehl einfach ignoriert wird (ps & grep gehen nachwievor).
Im Prinzip funktioniert es so. Allerdings kann ein unprivilegierter User nur seine eigenen Prozesse killen.
Tipp: Lass Dir mal den Fehlercode ausgeben.

huschi.
 
Genau - aber wie merkt er dass sudo nicht klappt wenn die Ausgabe bislang immer stimmte? =)
 
Bitte korrigiere mich, aber ich habe aus dem ersten Beitrag raus gelesen, dass das Feature "kill" neu hinzugekommen ist. Und genau dies funktioniert nicht.
Daher erübrigt sich ein Vergleich mit vorher, oder?

Wir wissen allerdings recht viele Dinge nicht. U.a. ist auch nicht klar, ob sudo oder kill den Fehler wirft.
Daher finde ich den Weg den Fehlercode (oder noch besser: eine Fehlermeldung) abzufangen doch recht hilfreich.

huschi.
 
Naja vorher hat er Prozesse angezeigt.
Das klappt mit und ohne root.
Jetzt killt er Befehle anderer User - das klappt nicht ohne root.

Vorher war es also egal ob sudo lief - jetzt nicht mehr.
 
Ah, jetzt verstehe ich was Du meinst. Du willst verdeutlichen, dass ggf. sudo vorher schon nicht funktioniert hat.
Wenn ich davon ausgehe (ohne es genau zu wissen), dass sudo tatsächlich genutzt wurde, also der Aufruf in etwa so aus sieht:
shell_exec("/usr/bin/sudo /bin/ps");
Wenn sudo fehl schlägt, wird bin/ps auch nicht ausgeführt. Dem zufolge muss vorher sudo bereits funktioniert haben, oder?
Daher fragst Du mit Recht nach dem konkreten shell_exec-Aufruf.

Trotz allem ist die Frage nach dem Fehlercode/Fehlermeldung durchaus Lösungsorientiert.
Und die Frage ob sudo oder kill den Fehler wirft, könnte man damit beantworten.

Von daher wird es Zeit dass Rafioso sich mal wieder zu Wort meldet um der Lösung näher zu kommen.

huschi.
 
Hallo,

zunächst danke für die Antworten.

Sudo funktioniert eigentlich schon. Das steht in der Log beim Aufruf der php-Datei:

Code:
Apr 14 12:16:15 test sudo:   vu2372 : TTY=unknown ; PWD=/the/path/test ; USER=runuser ; COMMAND=/bin/ps aux

Wie bereits gesagt, erhalte ich im selbigen Log keine Fehlermeldung bzgl. kill.

Der Aufruf lautet jeweils

PHP:
shell_exec("sudo -u runuser ***befehl***");

Ich habe gerade versucht, den Sudo-Part wegzulassen. Das hat bei ps & grep funktioniert :)

Danke.
 
Du willst also mit de PHP-Script ggf. einen Prozess des Users "runuser" killen. Stimmt das so?

Das überhaupt kein Eintrag im auth-Log steht, wundert mich allerdings auch. Kannst Du denn 100%ig sagen, dass der Programmcode wirklich an diesen shell_exec vorbei komt?
Wenn ja, ist sicher gestellt, dass der Shell-Code keinen Syntax-Fehler enthält?

Nochmal zum Fehlercode:
Der Nachteil von shell_exec() ist, dass er keinen Fehlercode liefert. Die Funktionen exec() oder system() hingegen haben diese Möglichkeit.
Alternativ: Du gibst die Ausgabe des Fehlercodes mit in die Shell-Befehlszeile ein. Dann ist es die letzte Zeile der Ausgabe.

huschi.
 
Kann das vielleicht sein, dass du kill falsch erweitert hast?
Ansonsten probiere doch mal über /usr/bin zu gehen und nicht über /bin.

Im übrigen könntest du mal mehrere Ausgaben probieren. Es gibt nämlich nicht nur shell_exec, exec oder system, sondern auch passthru und proc_open.
 
Last edited by a moderator:
Back
Top