2017-06-03 6 views
1

ich einen Apache-Server auf CentOS leite und müssen einige Bash-Skripte von PHP-Seite auszuführen. Ausführen von Befehlen, die brauchen keine Schreib- oder Ausführungsrechte von PHP-Datei funktioniert (zB shell_exec (‚ls/var/www/html/scripts /‘)), aber ich habe Probleme, die Befehle ausführen, die schreiben müssen oder ausführen Genehmigung. Zum Beispiel dieser Befehle tut nichts:Run Bash-Skript von PHP-Skript

drwxr-xr-x. 2 apache apache 21 Jun 3 09:54 scripts 

und test.sh Datei wie zu sehen ist, aber es gab keine Sperre:

<?php 
    $output = shell_exec('/var/www/html/scripts/test.sh'); 
    echo $output; 
?> 

ich Apache-Benutzer Eigentümer und gewährten erforderliche Berechtigungen für Scripts-Verzeichnis gemacht.

-rwxr-xr-x. 1 apache apache 51 Jun 3 09:54 test.sh 

Ich habe auch versucht, den Befehl in PHP-Datei sudo und hinzugefügt, um die Linie unten bis zum Ende der sudoers-Datei, aber nichts geändert.

apache ALL=NOPASSWD: /var/www/html/scripts/test.sh 

Auch überprüfte ich PHP safe_mode, die ausgeschaltet ist, und es gibt keine Einschränkung in der php.ini-Datei:

disable_functions = 

würde Ihre freundliche Hilfe sehr geschätzt.

HINWEIS:

ich meinen Bash-Skript bearbeitet und hinzugefügt sudo wie unten:

#!/bin/bash 
echo "Hi from test.sh"; 
sudo touch /var/www/html/scripts/file.log; 

Nun, wenn ich die Datei als Apache-Benutzer mit diesem Befehl ausführen, es läuft erfolgreich:

su -s /bin/sh apache -c "/var/www/html/scripts/test.sh" 

Aber durch die pHP-Web-Seite läuft es nur echo „Hallo aus test.sh“; Linie. Wenn ich Protokolle überprüfen, gibt es unten Linien für Befehl ausführen oben:

su: pam_unix(su:session): session opened for user apache by root(uid=0) 
sudo: apache : TTY=unknown ; PWD=/var/www/html ; USER=root ; COMMAND=/bin/touch fromweb.log 
su: pam_unix(su:session): session closed for user apache 

Und das erzeugte Protokoll, wenn von PHP-Web-Seite ausgeführt wird:

sudo: apache : TTY=unknown ; PWD=/var/www/html/scripts ; USER=root ; COMMAND=/bin/touch fromweb.log 

Fehlende pam_unix (su: Sitzung) öffnen und schließen.

+0

Erhalten Sie eine Fehlermeldung? – JazZ

+0

Beachten Sie, dass der Apache-Standardbenutzer "www-data" ist. – JazZ

+0

@JazZ keine spezielle Fehlermeldung wie die Fehlerberichterstattung ausgeschaltet ist, aber wenn ich die Bash-Datei von Befehl ausführen Aufforderung den folgenden Fehler auftritt: su -s/bin/sh Apache -c „scripts/test.sh“ Hallo von Test .sh touch: nicht berühren 'DATEI.log': Permission denied –

Antwort

1

Ich fand, was das Problem war. Es war wegen der Linux-SELinux-Funktion. Diese Funktion wendet eine Richtlinie mit Mindestprivilegien an und verhindert, dass ein unnötiger Befehl unter Linux ausgeführt wird. Das Bash-Skript wird nach dem Deaktivieren dieser Funktion erfolgreich ausgeführt. Bearbeiten Sie dazu die Datei/etc/selinux/config und ändern Sie SELINUX = erzwingen zu SELINUX = disabled und starten Sie das System neu. Dies wird jedoch aus Sicherheitsgründen nicht empfohlen. Sie können den folgenden Link aktivieren, um nur einige Ausnahmen zu erstellen, anstatt SELinux vollständig zu deaktivieren.

https://wiki.centos.org/HowTos/SELinux

+0

Großartig! Vielen Dank für Ihre Lösung. Viel Glück. – JazZ

+0

@JazZ Danke für Ihre Hilfe –

+0

Willkommen Entschuldigung kann Sie nicht zu dieser Lösung führen. – JazZ