Problem beim ausführen eines scripts mit shell_execute

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 07.11.2015 22:27:15

ich möchte gerne eine datei ausführen, wenn ich ein phpscript aufrufe, das habe ich damit gelöst

shell_exec('sudo su arkserver -c "/home/arkserver/arkserver start"');

Das funktioniert aber nur, wenn ich sudo visudo mache und dort

www-data ALL=(ALL) NOPASSWD: ALL

eintrage.

www-data ALL=(ALL) NOPASSWD: /home/arkserver

funktioniert hingegen nicht, weiß einer woran das liegen könnte?

alteholz
Beiträge: 41
Registriert: 11.04.2012 19:43:57

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von alteholz » 07.11.2015 23:05:25

C0kkie hat geschrieben:
shell_exec('sudo su arkserver -c "/home/arkserver/arkserver start"');
(...)
www-data ALL=(ALL) NOPASSWD: /home/arkserver

funktioniert hingegen nicht, weiß einer woran das liegen könnte?
Ist das Kommando nicht /home/arkserver/arkserver ?

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 07.11.2015 23:08:35

alteholz hat geschrieben:
C0kkie hat geschrieben:
shell_exec('sudo su arkserver -c "/home/arkserver/arkserver start"');
(...)
www-data ALL=(ALL) NOPASSWD: /home/arkserver

funktioniert hingegen nicht, weiß einer woran das liegen könnte?
Ist das Kommando nicht /home/arkserver/arkserver ?
hjab auch schon

www-data ALL=(ALL) NOPASSWD: /home/arkserver/arkserver

probiert, geht auch nicht

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 08.11.2015 07:50:23

Und muss der Parameter nicht mit angegeben werden?
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 08.11.2015 09:44:36

TRex hat geschrieben:Und muss der Parameter nicht mit angegeben werden?
www-data ALL=(ALL) NOPASSWD: /home/arkserver/arkserver stop

auch schon probiert :D
ch hab schon fast alles probiert :Z

da kommt auch

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

sudo: no tty present and no askpass program specified

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 08.11.2015 10:20:47

Eben seh ich..

shell_exec('sudo su arkserver -c "/home/arkserver/arkserver start"');

das sudo-command ist alles nach dem blau markierten Teil. Mit su führst du den arkserver mit bestimmtem Parameter aus, aber als Benutzer arkserver - und das komplett willst du dem www-data erlauben. Du hast aber nur den ark-server-command erlaubt.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 08.11.2015 10:29:50

TRex hat geschrieben:Eben seh ich..

shell_exec('sudo su arkserver -c "/home/arkserver/arkserver start"');

das sudo-command ist alles nach dem blau markierten Teil. Mit su führst du den arkserver mit bestimmtem Parameter aus, aber als Benutzer arkserver - und das komplett willst du dem www-data erlauben. Du hast aber nur den ark-server-command erlaubt.
d.h.? :D

seh grad bei der antwort nicht durch sry :X

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 08.11.2015 11:27:14

Alles nach dem blauen Teil muss in die sudoers-Datei, nicht nur das letzte bisschen in rosa.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 08.11.2015 11:50:26

TRex hat geschrieben:Alles nach dem blauen Teil muss in die sudoers-Datei, nicht nur das letzte bisschen in rosa.

Bild

=

Bild

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 08.11.2015 11:55:06

Tja, dann ist das wohl formal falsch. Hast du mal das allmächtige Internet oder die naheliegende manpage befragt? Das würde ich nun tun.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 08.11.2015 12:03:25

TRex hat geschrieben:Tja, dann ist das wohl formal falsch. Hast du mal das allmächtige Internet oder die naheliegende manpage befragt? Das würde ich nun tun.
hab nichts sinnvolles gefunden :D

und

Bild

geht auch nicht

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 08.11.2015 12:20:23

...zweimal Halbwissen ist Viertelwissen.

Dein zweiter Codeschnipsel ist die (zumindest augenscheinlich) richtige Variante für sudo, warum machst du noch mit su rum?
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 08.11.2015 12:59:48

TRex hat geschrieben:
warum machst du noch mit su rum?
Was meinste?

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 08.11.2015 13:13:11

Wenn du schreibst "geht nicht" verschweigst du, was du ausprobiert hast und was das Ergebnis war.

Code: Alles auswählen

sudo -u arkserver /home/arkserver/arkserver start
und das, was ich nicht abtippen werde (du weißt, wie copy-paste mit putty funktioniert?), könnte zusammen funktionieren.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 08.11.2015 13:30:37

TRex hat geschrieben:Wenn du schreibst "geht nicht" verschweigst du, was du ausprobiert hast und was das Ergebnis war.

Code: Alles auswählen

sudo -u arkserver /home/arkserver/arkserver start
und das, was ich nicht abtippen werde (du weißt, wie copy-paste mit putty funktioniert?), könnte zusammen funktionieren.
ich raff garnichts mehr. stop geht, start geht nicht.

Bild

und

shell_exec('sudo -H -u arkserver /home/arkserver/arkserver stop');

geht, aber

shell_exec('sudo -H -u arkserver /home/arkserver/arkserver start');

geht nicht - natürlich hab ich oben auch testhalber start eingesetzt ;)

error.log:

failed to connect to server: Connection refused

versteh ich nicht :<


sudo -H -u arkserver /home/arkserver/arkserver start

manuell in die console geht aber komischerweise...

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 09.11.2015 15:17:00

hat da jemand noch ne idee?

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 09.11.2015 15:21:10

Ich würd nochmal beide Zeilen in die sudoers aufnehmen (einmal start, einmal mit stop) und dann nochmal als user www-data prüfen, obs wirklich nicht funktioniert. Und keine Bildschirmfotos mehr, bitte. In Putty den Text markieren, dann ist er in der Zwischenablage von Windows (ich unterstelle dir an der Stelle, dass du putty verwendest).

Code: Alles auswählen

su -c "sudo -u arkserver...." www-data
kannst du zum Testen verwenden, um den Befehl mit www-data auszuführen.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 09.11.2015 17:01:07

TRex hat geschrieben:Ich würd nochmal beide Zeilen in die sudoers aufnehmen (einmal start, einmal mit stop) und dann nochmal als user www-data prüfen, obs wirklich nicht funktioniert. Und keine Bildschirmfotos mehr, bitte. In Putty den Text markieren, dann ist er in der Zwischenablage von Windows (ich unterstelle dir an der Stelle, dass du putty verwendest).

Code: Alles auswählen

su -c "sudo -u arkserver...." www-data
kannst du zum Testen verwenden, um den Befehl mit www-data auszuführen.
su -c "sudo -u arkserver /home/arkserver/arkserver start" www-data

=

This account is currently not available.

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 09.11.2015 17:16:44

Na Mist. Dachte ich mir schon fast... du kannst ihn wie folgt aktivieren:

Code: Alles auswählen

usermod -s /bin/sh www-data
Danach wieder deaktivieren:

Code: Alles auswählen

usermod -s /usr/sbin/nologin www-data
und das su als root (oder mit sudo) ausführen - sonst musst du das Passwort für www-data kennen.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 09.11.2015 17:28:02

TRex hat geschrieben:Na Mist. Dachte ich mir schon fast... du kannst ihn wie folgt aktivieren:

Code: Alles auswählen

usermod -s /bin/sh www-data
Danach wieder deaktivieren:

Code: Alles auswählen

usermod -s /usr/sbin/nologin www-data
und das su als root (oder mit sudo) ausführen - sonst musst du das Passwort für www-data kennen.
hm also habs aktiviert dann den befehl ausgeführt und dann wider deaktiviert.
Aber warum führt er das nicht per php script aus? Also das start, denn stop nimmt er ja

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 09.11.2015 19:31:05

Du musst dafür sorgen, dass du kontrollierst und dir bewusst bist,

1. wie der Befehl aufgerufen wird
2. in welchem Environment der Befehl aufgerufen wird (ob es zB spezielle Umgebungsvariablen gibt, PATH gefüllt ist usw...)
3. welche Seiteneffekte der Befehl hat und wie du rausbekommst, welche
4. wie du an die Ausgabe des Befehls kommst.

2 mag für dich noch etwas kryptisch klingen, aber möglich wärs, dass du nach Sicherstellung von 3. (dass du evt ein Logfile von ark selbst findest) und 4. (dass du auch ein Logfile schreibst) rausfindest, dass der PHP-Prozess irgendwas braucht, was es in dem schmalen Environment nicht gibt. Momentan fliegst du blind, und ich schrubb die Glaskugel. Das ganze muss reproduzierbar werden... wenn du morgen aufstehst, dich auf dem Server einloggst und was anderes als heute passiert, ist das nicht der Fall.

In deinem Beitrag steht etwas, was ich so deuten könnte, als obs nun insgesamt funktioniert hätte. In den Systemlogs sollte der Authentifierungsversuch mit sudo auftauchen... du solltest zusätzlich zu dem obigen schauen, ob dein manueller Aufruf die gleichen Logzeilen erzeugt wie der Aufruf über PHP.

(als root)

Code: Alles auswählen

grep sudo /var/log/auth.log
Insbesondere steht da auch nochmal der COMMAND.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 09.11.2015 19:42:38

TRex hat geschrieben:Du musst dafür sorgen, dass du kontrollierst und dir bewusst bist,

1. wie der Befehl aufgerufen wird
2. in welchem Environment der Befehl aufgerufen wird (ob es zB spezielle Umgebungsvariablen gibt, PATH gefüllt ist usw...)
3. welche Seiteneffekte der Befehl hat und wie du rausbekommst, welche
4. wie du an die Ausgabe des Befehls kommst.

2 mag für dich noch etwas kryptisch klingen, aber möglich wärs, dass du nach Sicherstellung von 3. (dass du evt ein Logfile von ark selbst findest) und 4. (dass du auch ein Logfile schreibst) rausfindest, dass der PHP-Prozess irgendwas braucht, was es in dem schmalen Environment nicht gibt. Momentan fliegst du blind, und ich schrubb die Glaskugel. Das ganze muss reproduzierbar werden... wenn du morgen aufstehst, dich auf dem Server einloggst und was anderes als heute passiert, ist das nicht der Fall.

In deinem Beitrag steht etwas, was ich so deuten könnte, als obs nun insgesamt funktioniert hätte. In den Systemlogs sollte der Authentifierungsversuch mit sudo auftauchen... du solltest zusätzlich zu dem obigen schauen, ob dein manueller Aufruf die gleichen Logzeilen erzeugt wie der Aufruf über PHP.

(als root)

Code: Alles auswählen

grep sudo /var/log/auth.log
Insbesondere steht da auch nochmal der COMMAND.


Nov 9 17:31:16 ns3019232 sudo: www-data : TTY=unknown ; PWD=/var/www/ark-webinterface/include/functions ; USER=arkserver ; COMMAND=/home/arkserver/arkserver start
Nov 9 17:31:16 ns3019232 sudo: pam_unix(sudo:session): session opened for user arkserver by (uid=0)
Nov 9 17:31:19 ns3019232 sudo: pam_unix(sudo:session): session closed for user arkserver

mehr steht da nicht, es wundert mich halt warum stop geht, und warum bei start im error.log steht:

failed to connect to server: Connection refused

Benutzeravatar
TRex
Moderator
Beiträge: 8070
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von TRex » 09.11.2015 19:44:57

Ich hoffe, dass du den Rest auch gelesen hast. Das war kein tl;dr ;)
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

C0kkie
Beiträge: 41
Registriert: 09.01.2015 20:29:52

Re: Problem beim ausführen eines scripts mit shell_execute

Beitrag von C0kkie » 10.11.2015 15:30:56

TRex hat geschrieben:Ich hoffe, dass du den Rest auch gelesen hast. Das war kein tl;dr ;)
Was evtl. noch von Bedeutung sein könnte, das script was den arkserver startet startet den server dann wiederrrum mit tmux
evtl. liegt es daran, das da irgendwie was blockt

hab das script jetzt umgeschrieben dass es mit screen geht

Antworten