mit PHP Shell mit Sudo ausführen?

3 Antworten

Ist es ein Fehler beim Übertragen oder fehlt da tatsächlich ein schließendes Anführungszeichen?

Woher ich das weiß:Hobby – Linux-Nutzer seit 2006

Motfrager 
Beitragsersteller
 29.08.2019, 19:15

Hab ich nur in der Frage falsch geschrieben

PhotonX  29.08.2019, 19:24
@Motfrager

Ok, verstehe. Gibt es denn irgendeine Fehlermeldung beim Ausführen des Befehls? Ist es sicher, dass es an den Berechtigungen liegt?

Motfrager 
Beitragsersteller
 29.08.2019, 19:46
@PhotonX

Ja, schon relativ sicher. Eine Fehlermeldung gibts nicht. Wenn ich ein Scripr ohne sudo ausführe, klappts

Und wie genau übergibt shell_execute das Passwort des Benutzers www-data an sudo? (SPOILERALARM: Gar nicht.)

Dazu müsstest du die /etc/sudoers anpassen, um dem Benutzer www-data zu gestatten, python ohne Passworteingabe zu starten.


Motfrager 
Beitragsersteller
 29.08.2019, 19:45

Wie geht das denn? Bzw. Was muss ich dafür in die Datei schreiben?

Isendrak  29.08.2019, 19:50
@Motfrager
www-data ALL=(ALL:ALL) NOPASSWD: /usr/bin/python

(Ggf.den Pfad zu Python anpassen.)

Motfrager 
Beitragsersteller
 29.09.2019, 10:41
@Isendrak

Hallo, das funktioniert bei mir leider nicht bzw. nachdem ich das gemacht habe und einmal neugestartet habe, hat es immer noch nicht geklappt.

Isendrak  29.09.2019, 22:50
@Motfrager

Dann probiers zunächst mal "von Hand":

sudo -u www-data sudo /usr/bin/python
 -c 'importos;print(os.getuid()==0)'

Das fragt einmal nach dem Passwort des aktuell angemeldeten Benutzers (ausser wenn dieser bereits root ist) und führt Python als root aus (und gibt entweder "True" oder "False" aus, wobei letzteres nur unter sehr seltsamen Umständen passieren sollte), in dem Fall sollte alles gut sein, oder aber es Fragt nach dem Passwort für www-data, was nicht so gut wäre.

www-data ALL=(ALL:ALL) ALL

hat für ein Script wenig Sinn, denn es wird trotzden nach dem Passwort gefragt, doch niemand kann es eintippen.

 www-data  ALL=(ALL) NOPASSWD: ALL

damit sollte es klappen.

Warum du das aber mit root-Rechten ausführen musst, bleibt ein Rätsel .

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995

Motfrager 
Beitragsersteller
 07.09.2019, 15:27
www-data  ALL=(ALL) NOPASSWD: ALL

klappt leider bei mir nicht, ich habe den Raspberry auch schon neu gestartet und egal was ich probiere, sobald ich da sudo reinschreibe, führt er nichts aus

guenterhalt  07.09.2019, 19:56
@Motfrager

Wenn dein Script etwas mit dem web zu tun hat, dann kann durchaus jemand testen, ob das mit ID 0 ausgeführt werden soll. Root mögen die nicht.

Win7User  29.08.2019, 22:18
shell_exec("echo \"passwort\" | sudo python /home/pi/my_script.py");


so könnte man das passwort 'eintippen' ;-)


guenterhalt  07.09.2019, 16:41
@Win7User

lass doch einfach "echo <passwort>" weg, wenn für den User in der /etc/sudoers NOPASSWD steht, dann wird auch nicht gefragt.

kannst  als User  www-data auch mal 
  sudo python /home/pi/my_script.py
außerhalb eines Scripts starten
KarlRanseierIII  29.08.2019, 20:41

Da ist etwas dran - CAPs o.ä. zu nutzen wäre der weitaus sicherere Weg.