URL: https://www.overclockers.at/linux/shell_mit_sudo_per_php_ausfuehren_186832/page_1 - zur Vollversion wechseln!
betreff sagt eigentlich alles.
ich will ein shell script welches ein befehl mit sudo rechten per php ausführt. hab auch schon gegoogel und so weit habs ichs mal: OHNE (!) sudo rechte:
index.html
Code:<html> <a href="script.php">hier</a> </html>
Code:<html> <?php echo "<br>"; echo "Executing:<br>"; echo "Result: ".shell_exec("/opt/lampp/htdocs/sms/sh_test/test.sh"); ?> </html>
Code:uptime
Code:scmxx
ZitatThis is a program written by Hendrik Sattler This program is licenced with the GPL. Use at your own risk! You need a phone made by Siemens to get an useful result. ... bla bla bla yada yada yada
Code:scmxx --version
Code:0.8.2
Code:scmxx --device /dev/ttyUSB0 --info
kannst ihm das passwort nicht "nachschicken"? ka ob das geht...
http://www.php-resource.de/forum/sh...ad/t-61529.html
ich glaub es liegt doch nicht an den sudo rechten. hab mal 1. post editiert. kann mir da wer weiterhelfen?
Was gibt dir denn `ls -l /dev/ttyUSB0`?
blöde frage, aber schon nur exec() versucht? in der php-doku konnte ich keine detaillierten unterschiede finden, bis auf:
ZitatNote: If you start a program using this function and want to leave it running in the background, you have to make sure that the output of that program is redirected to a file or some other output stream or else PHP will hang until the execution of the program ends.
Du könntest zu Testzwecken auch ein kleines Shellscript schreiben, das irgendeinen Output _verzögert_ liefert, um dieses kleine Delay eventuell als Fehlerquelle ausschließen zu können.
Eins versteh ich nicht: Wenn
in der Shell ohne root-Rechte funktioniert, wieso braucht dann ein Aufruf von PHP aus root-Rechte?Code:scmxx --device /dev/ttyUSB0 --info
mir sind noch 2 dinge eingefallen. vergleiche mal den output von shell_exec('set') mit den gewünschten env-vars. könnte sein, dass PATH nicht richtig gesetzt ist.
auch wichtig: debuggen wäre nicht schlecht. vl gibt dir dein command einen fehler zurück und du siehst ihn atm nicht. gibt mal "2>&1" ans ende des commands, dann bekommst du stderr umgeleitet.
wenn php nicht per cgi oder fast-cgi aufgerufen wird, dann gehört der prozess dem user unter dem der webserver läuft.ZitatWenn man per PHP einen Befehl ausführt, wem "gehört" der Prozess dann? Vielleicht hat dieser User keine Berechtigungen, um auf USB-Devices zugreifen zu können?
Zitat von jivesEins versteh ich nicht: Wennin der Shell ohne root-Rechte funktioniert, wieso braucht dann ein Aufruf von PHP aus root-Rechte?Code:scmxx --device /dev/ttyUSB0 --info
Wenn man per PHP einen Befehl ausführt, wem "gehört" der Prozess dann? Vielleicht hat dieser User keine Berechtigungen, um auf USB-Devices zugreifen zu können?
Zitat von COLOSSUSWas gibt dir denn `ls -l /dev/ttyUSB0`?
Code:Ausgabe: crw-rw---- 1 root dialout 188, 0 Oct 23 12:52 /dev/ttyUSB0
nein, aber jetzt grad probiertZitat von matblöde frage, aber schon nur exec() versucht?
klingt FABELhaft und die idee hat ich auch schon, nur hab ich keine ahnung WIEZitat von jivesDu könntest zu Testzwecken auch ein kleines Shellscript schreiben, das irgendeinen Output _verzögert_ liefert, um dieses kleine Delay eventuell als Fehlerquelle ausschließen zu können.
genau das hab ich mir nach gut einer stunde testen auch gedacht und deshalb bin ich von der idee mit sudo wegekommen und glaub es liegt eher daran, wie schon gesagt, dass er "zu schnell was ausgeben will aber eben nicht kann" (bei device abfrage, bei --version gehts halt zB weil schnell) aber keine ahnung ob mein gedankengang richtig istZitat von jivesWenn yadayadayada in der Shell ohne root-Rechte funktioniert, wieso braucht dann ein Aufruf von PHP aus root-Rechte?
Steck den User "www-data" in die (zusaetzliche) Gruppe "dialout".
Code:usermod -a -G dialout www-data
jein, es kann auch verwendet werden um mehrere php-versionen parallel laufen zu haben. dennoch würde ich es nicht ohne suexec betreiben.Zitat von COLOSSUSAuch wenn PHP nicht via mod_php, sondern via [f]cgi ausgefuehrt wird, "gehoert" der resultierende Prozess der EUID des Webservers - es sei denn, man nutzt zusaetzlich suexec (was der entscheidende Vorteil eines solchen Setups ist; ohne macht's keinen wirklichen Sinn).
wo soll ich das reineditieren? in sudoers wohl nicht, da meldet er dann syntax error in der zeileZitat von COLOSSUSSteck den User "www-data" in die (zusaetzliche) Gruppe "dialout".Code:usermod -a -G dialout www-data
einfach in die shell - wenn www-data der user deines webservers ist.
soda, um es mal aufzuzählen.
zuerst hab ich die sudoer datei editiert (LETZE zeile) ich speicher das editierte immer als sudoers.tmp UND als sudoers (ohne nix).
Code:GNU nano 1.3.10 File: /etc/sudoers.tmp # /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. # # See the man page for details on how to write a sudoers file. # Host alias specification # User alias specification # Cmnd alias specification # Defaults Defaults !lecture,tty_tickets,!fqdn # User privilege specification root ALL=(ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL www-data ALL=(ALL) NOPASSWD: /opt/lampp/htdocs/sms/sh_scmxx_info/test.sh
Code:sudo usermod -a -G dialout www-data
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025