• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Shell-Script mit php ausführen

Defcon73

Newbie
Hallo zusammen

Betrifft: Ubuntu 14.04 Server, Apache 2.4, PHP 5.x

Ich möchte den Output eines Scripts per PHP ausgeben.
Der Kontext des Scripts soll aber unter dem User 'user1' laufen.

Hier das PHP-Script
Code:
<?php
$output = shell_exec("../scripts/www_check_service.sh");
echo "<pre>$output</pre>";
?>

Hier das aufrufende Shell-Script
/var/www/scripts/www_check_service.sh
Code:
sudo -u user1 /home/user1/check_service.sh 2>&1

Und hier das finale Script:
/home/user1/check_service.sh
Code:
-rwxrw-r-- 1 user1 user1    23 May  1  2014 check_service.sh
(nehmen wir mal an, es sollte das Resultat von whoami zurückgeben, also user1)

Leider funktioniert es nicht.

Es erscheint folgende Meldung:
sudo: no tty present and no askpass program specified

Ich habe www-data zu den sudoers hinzugefügt, leider ändert sich nichts:
www-data ALL=(user1) NOPASSWD: /var/www/scripts/www_check_service.sh

P.S:
- Nein, ich möchte das nicht über Cron lösen sondern 'just-in-time'.
- Ja, ich bin mir der Risiken bewusst. Es handelt sich um einen Homeserver im geschützten Umfeld.
- Ja, ich habe gegoogelt - sitze seit fünf Stunden dran und schaffe es einfach nicht...

Danke für Eure Unterstützung

DC
 

marce

Guru
in Deiner sudoers-Datei wirst Du vermutlich folgende Zeilen finden:
Code:
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

#
# Refuse to run if unable to disable echo on the tty. This setting should also be
# changed in order to be able to use sudo without a tty. See requiretty above.
#
Defaults   !visiblepw
 

panamajo

Guru
Defcon73 schrieb:
Ich möchte den Output eines Scripts per PHP ausgeben.
Der Kontext des Scripts soll aber unter dem User 'user1' laufen.

Hier das PHP-Script
Code:
<?php
$output = shell_exec("../scripts/www_check_service.sh");
echo "<pre>$output</pre>";
?>
Ich bin ja durchaus ein Freund von der Verwendung von PHP als Shell Scriptsprache, aber dein Beispiel ergibt wenig Sinn. Du rufst per PHP ein Bash Script auf und gibst dessen STDOUT auf STDOUT aus. Da kannst du auch gleich das Script in der Bash ausführen, was der übliche Default unter Linux ist.

Dem PHP Script solltest du in der 1. Zeile mitteilen dass es mit dem PHP Interpreter ausgeführt werden soll:
Code:
#!/usr/bin/env php



Defcon73 schrieb:
Hier das aufrufende Shell-Script
/var/www/scripts/www_check_service.sh
Code:
sudo -u user1 /home/user1/check_service.sh 2>&1

Und hier das finale Script:
/home/user1/check_service.sh
Code:
-rwxrw-r-- 1 user1 user1    23 May  1  2014 check_service.sh
(nehmen wir mal an, es sollte das Resultat von whoami zurückgeben, also user1)

Leider funktioniert es nicht.

Es erscheint folgende Meldung:
sudo: no tty present and no askpass program specified

Ich habe www-data zu den sudoers hinzugefügt, leider ändert sich nichts:
www-data ALL=(user1) NOPASSWD: /var/www/scripts/www_check_service.sh

P.S:
- Nein, ich möchte das nicht über Cron lösen sondern 'just-in-time'.
- Ja, ich bin mir der Risiken bewusst. Es handelt sich um einen Homeserver im geschützten Umfeld.
- Ja, ich habe gegoogelt - sitze seit fünf Stunden dran und schaffe es einfach nicht...
Ok das $Subject des Postings ist irreführend. Du hast ja kein Problem mit PHP sondern mit sudo.
 
OP
D

Defcon73

Newbie
marce schrieb:
in Deiner sudoers-Datei wirst Du vermutlich folgende Zeilen finden:
Code:
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

#
# Refuse to run if unable to disable echo on the tty. This setting should also be
# changed in order to be able to use sudo without a tty. See requiretty above.
#
Defaults   !visiblepw

Nein, ist bei mir nicht vorhanden. Gemäss man sind beide per default off.
 
OP
D

Defcon73

Newbie
panamajo schrieb:
Defcon73 schrieb:
Ich möchte den Output eines Scripts per PHP ausgeben.
Der Kontext des Scripts soll aber unter dem User 'user1' laufen.

Hier das PHP-Script
Code:
<?php
$output = shell_exec("../scripts/www_check_service.sh");
echo "<pre>$output</pre>";
?>
Ich bin ja durchaus ein Freund von der Verwendung von PHP als Shell Scriptsprache, aber dein Beispiel ergibt wenig Sinn. Du rufst per PHP ein Bash Script auf und gibst dessen STDOUT auf STDOUT aus. Da kannst du auch gleich das Script in der Bash ausführen, was der übliche Default unter Linux ist.

Dem PHP Script solltest du in der 1. Zeile mitteilen dass es mit dem PHP Interpreter ausgeführt werden soll:
Code:
#!/usr/bin/env php

Ok das $Subject des Postings ist irreführend. Du hast ja kein Problem mit PHP sondern mit sudo.

Das Subject macht schon Sinn, da es mein Ziel ist, das Script über eine lokale Webseite per PHP zu starten (ob mit oder ohne Sudo). Offenbar habe ich das nicht klar genug beschrieben.
 

StephanS

Member
Defcon73 schrieb:
Hallo zusammen
...
Code:
sudo -u user1 /home/user1/check_service.sh 2>&1
...
Ich habe www-data zu den sudoers hinzugefügt, leider ändert sich nichts:
www-data ALL=(user1) NOPASSWD: /var/www/scripts/www_check_service.sh
Mit dem sudoers-Eintrag erlaubst du dem User www-data, den Befehl /var/www/scripts/www_check_service.sh per sudo aufzurufen. Du musst ihm aber stattdessen /home/user1/check_service.sh erlauben, weil das hinter dem "sudo" steht.
 

spoensche

Moderator
Teammitglied
Muss das Script den zwingend mittels sudo aufgerufen werden?
Wenn du uns mitteilen würdest, welcher Service mit dem Script überprüft werden soll, dann ist es für uns evtl. leichter dir zu helfen.
 
Oben