2012-06-06 7 views
12

Wie läuft man von PHP ein Bash-Skript unter Root-Benutzer (mit allen Berechtigungen) und nicht niemand Benutzer - PHP Standardbenutzer?Wie läuft man von PHP Bash-Skript unter Root-Benutzer

das ist meine Ausgabe nach sudo visudo:

Defaults  env_keep += "LINES COLUMNS" 
Defaults  env_keep += "LSCOLORS" 
Defaults  env_keep += "SSH_AUTH_SOCK" 
Defaults  env_keep += "TZ" 
Defaults  env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" 
Defaults  env_keep += "EDITOR VISUAL" 
Defaults  env_keep += "HOME MAIL" 

#User privilege specification 
root ALL=(ALL) ALL 
%admin ALL=(ALL) ALL 


# Uncomment to allow people in group wheel to run all commands 
# %wheel  ALL=(ALL) ALL 

# Same thing without a password 
# %wheel  ALL=(ALL) NOPASSWD: ALL 

# Samples 
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom 
# %users localhost=/sbin/shutdown -h now 
+3

Das klingt gefährlich, so stellt sich die offensichtliche Frage: Warum tun Sie dies tun müssen? Vielleicht ist dies eine bessere Gesamtlösung. –

Antwort

27

können Sie sudo verwenden:

exec("sudo /your/script"); 

Sie sollten das Skript ohne Passwortabfrage erlauben die Ausführung. Führen Sie sudo visudo in der Konsole und fügen Sie die folgende Zeichenfolge an das Ende:

nobody ALL = NOPASSWD: /your/script 

Sie müssen richtig Dateimodus einzurichten, um sicherzustellen, dass niemand dieses Skript ändern und setzen gefährliche Inhalte in sie (in root-Konsole):

chown root:root /your/script 
chmod 755 /your/script 
+0

Wo genau sollte ich es hinzufügen? Ich veröffentliche meine Ausgabe nach 'sudo visudo' in der Frage – Oleg

+0

+1 Gute Antwort. –

+0

Legen Sie einfach eine neue Zeile an das Ende der Datei. –

1

Sie können ein Programm machen, das Set-uid root. Dies führt dazu, dass das Programm immer als root ausgeführt wird. Dies funktioniert nicht mit Shell-Skripten, so dass Sie eine program which calls your script verwenden müssen.

+0

Der Link scheint kaputt zu sein. – Droidzone

0

Unter Linux tun Sie dies normalerweise mit sudo. Versuchen Sie, so spezifisch wie möglich zu sein, um dem Skript nicht zu viele Berechtigungen zu geben.

Für Beispiele, wie sudo verwenden: http://aplawrence.com/Basics/sudo.html

+0

Das Problem ist, dass, wenn ich es auf dem Terminal laufen, es gut funktioniert, aber wenn ich dieses Bash-Skript von PHP ausführen, wird es nicht ausgeführt (andere einfache bash mit 'cp',' mv' Befehle funktionieren), ich denke, es ist 90% Berechtigungen. – Oleg

0

Ich würde eine bestimmte Regel hinzufügen, dieses Skript zu ermöglichen, indem nobody Benutzer aufgerufen werden, sudo verwenden.

+0

Wie kann ich es tun? Ich habe viele Dinge ausprobiert, aber es funktioniert nicht – Oleg

+0

Siehe Ratieches Antwort - Sie müssen die Zeile 'nobody ALL = NOPASSWD:/Ihr/Skript' in die" visudo "-Datei (sudoers Konfigurationsdatei) einfügen. Ersetzen Sie natürlich '/ your/script' durch den Pfad zu Ihrem Skript. –

+0

Wie kann ich diese Datei bearbeiten? Ich habe 'sudo visudo' benutzt, aber es zeigt nur die Ausgabe. – Oleg

0

Ich habe vor kurzem ein Projekt veröffentlicht, das es PHP ermöglicht, eine echte Bash-Shell zu erhalten und mit ihr zu interagieren (als Benutzer: apache/www-data oder root, falls erforderlich). Erhalten Sie es hier: https://github.com/merlinthemagic/MTS

Nach dem Herunterladen Sie einfach den folgenden Code verwenden würde:

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 
$return1 = $shell->exeCmd('/full/path/to/script.sh');