Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Analyse zu Shell-Skript-Berechtigungsproblemen

PHP-Analyse zu Shell-Skript-Berechtigungsproblemen

小云云
小云云Original
2018-03-01 11:40:231596Durchsuche

1. Einführung in sudo

Sudo ermöglicht es Root, einige Rechte zuzuweisen, die normale Benutzer nicht haben, sodass normale Benutzer auch über relevante Berechtigungen des Root-Benutzers verfügen können (z. B. kann sudo zugewiesen werden). ein bestimmter Benutzer bestimmte Befehlsausführungsberechtigung).
Eine der wichtigen Dateien für sudo ist /etc/sudoers. Welchen Benutzer welche Befehle ausführen können, hängt von dieser Datei ab. Hauptsächlich können nur darin zugewiesene Benutzer sudo verwenden.

sudo -l 列出该用户能执行的命令  
sudo -u user 以指定用户来执行命令  
sudo -k 清楚入场券上的时间,下次使用sudo还要输入密码  
sudo -b 在后台执行命令

Geben Sie vim im Terminal ein, um die Datei /etc/sudoers zu öffnen.
Suchen Sie den Ort wie im Bild gezeigt:
PHP-Analyse zu Shell-Skript-Berechtigungsproblemen

Der Inhalt im roten Feld im Bild wurde später von mir selbst hinzugefügt, wobei www der Benutzer ist, der PHP ausführt, und die Standardeinstellung ist in verschiedenen Umgebungen Der Name wird unter Centos unterschiedlich sein.

Benutzer, die den PHP-Vorgang sehen können, können ihn über die folgende PHP-Webseite erhalten.

<?php    
    echo shell_exec("id -a");  
?>

Sehen Sie sich das Bild an. Es gibt drei ALL in jeder Zeile. Das erste ALL stellt den Host im Netzwerk dar und gibt an, wer den Befehl ausführt. Schließlich stellt „ALL“ den Namen des ausführbaren Befehls dar (Sie können den Befehl angeben, den der Benutzer ausführen soll).

NOPASSWD bedeutet, dass kein Passwort erforderlich ist. (Andernfalls ist der Einfachheit halber, wenn ich über einen Browser auf das Programm zugreife, ein zusätzlicher Schritt nötig, um das Passwort einzugeben und auf Feedback zu warten. Das ist wirklich mühsam. Das erspart mir viel Ärger)

Wenn es sich um Ubuntu handelt, ist keine Änderung erforderlich. Wenn es sich um Fedora handelt, sind noch einige Änderungen erforderlich.

Defaults Env_reset kann aktiviert werden (d. h. das #-Zeichen davor wird entfernt). ;

  1. Überprüfen Sie, ob der abgesicherte Modus in der php.ini-Konfigurationsdatei aktiviert ist

safe_mode =  off 这样就可以了

Es gibt mehrere Funktionen für PHP zum Ausführen von Linux-Skripten wie „shell_exec()“, „system()“ usw. Ich werde hier nicht auf Details eingehen. Ich verwende einfach die Funktion „system()“.
route.php

<?php   $ip=(string)$_POST["ip"];  
system("su ./route.sh $ip",$status);  
if($status == &#39;true&#39;)  
{  
    echo "设置成功";  
}  
else  {  
    echo "设置失败";  
}  
?>

Nachdem die vorherigen Einstellungen ordnungsgemäß festgelegt wurden, zeigt der Browser nach der Ausführung die Einstellung als erfolgreich an, was darauf hinweist, dass das Skript erfolgreich ausgeführt wurde.

1.php-Ausführungsshell wird tatsächlich vom Benutzer von Apache oder Nginx ausgeführt, und PHP selbst erstellt keinen Benutzer.
2. Neu gepostet von

Da ich mich früher jedes Mal in ECS angemeldet und als Root-Benutzer gearbeitet habe, wurde sudo im Grunde nicht verwendet, aber seit kurzem muss das Projekt Folgendes tun: Passen, wenn der Browser zugreift Auf der PHP-Webseite wird ein Skript unter Linux aufgerufen und in der PHP-Webseite ausgeführt. Ursprünglich war dieses Ding sehr einfach, aber als ich es tatsächlich bediente, stellte ich fest, dass das Skript nicht jedes Mal ausgeführt wurde, wenn ich über den Browser darauf zugriff, und es gab kein Problem, als ich die PHP-Webseite über die Befehlszeile im Terminal ausführte Ich dachte, es wäre ganz anders, und dann habe ich sorgfältig darüber nachgedacht und festgestellt, dass der Zugriff über einen Browser anders ist als die direkte Ausführung des Initiators im Terminal. Ich dachte, es könnte ein Problem mit den Benutzerberechtigungen sein, also habe ich online nachgesehen. und das Ergebnis war sudo.
1. Einführung in sudo

Mit sudo kann Root einige Rechte zuweisen, die normale Benutzer nicht haben, sodass normale Benutzer auch über die entsprechenden Berechtigungen des Root-Benutzers verfügen können (z. B. kann sudo einem bestimmten Benutzer zugewiesen werden). bestimmte Befehle auszuführen) Berechtigungen).
Eine der wichtigen Dateien für sudo ist /etc/sudoers. Welche Befehle welche Benutzer ausführen können, hängt hauptsächlich von dieser Datei ab.

sudo -l 列出该用户能执行的命令  
sudo -u user 以指定用户来执行命令  
sudo -k 清楚入场券上的时间,下次使用sudo还要输入密码  
sudo -b 在后台执行命令

Geben Sie vim im Terminal ein, um die Datei /etc/sudoers zu öffnen.
Suchen Sie den Ort wie im Bild gezeigt:
PHP-Analyse zu Shell-Skript-Berechtigungsproblemen

Der Inhalt im roten Feld im Bild wurde später von mir selbst hinzugefügt, wobei www der Benutzer ist, der PHP ausführt, und die Standardeinstellung ist in verschiedenen Umgebungen Der Name wird unter Centos unterschiedlich sein.

Benutzer, die den PHP-Betrieb sehen können, können ihn über die folgende PHP-Webseite erhalten.

<?php    
    echo shell_exec("id -a");  
?>

Sehen Sie sich das Bild an. Es gibt drei ALL in jeder Zeile. Das erste ALL stellt den Host im Netzwerk dar und gibt an, wer den Befehl ausführt. Schließlich stellt „ALL“ den Namen des ausführbaren Befehls dar (Sie können den Befehl angeben, den der Benutzer ausführen soll).

NOPASSWD bedeutet, dass kein Passwort erforderlich ist. (Andernfalls ist der Einfachheit halber, wenn ich über den Browser auf das Programm zugreife, ein zusätzlicher Schritt nötig, um das Passwort einzugeben und auf Feedback zu warten. Das ist wirklich mühsam. Das erspart mir viel Ärger)

Wenn es sich um Ubuntu handelt, ist keine Änderung erforderlich. Wenn es sich um Fedora handelt, sind noch einige Änderungen erforderlich.

Defaults Env_reset kann aktiviert werden (d. h. das #-Zeichen davor wird entfernt). ;

  1. Überprüfen Sie, ob der abgesicherte Modus in der php.ini-Konfigurationsdatei aktiviert ist

safe_mode =  off 这样就可以了

Es gibt mehrere Funktionen für PHP zum Ausführen von Linux-Skripten wie „shell_exec()“, „system()“ usw. Ich werde hier nicht auf Details eingehen. Ich verwende es einfach.
route.php

<?php   $ip=(string)$_POST["ip"];  
system("su ./route.sh $ip",$status);  
if($status == &#39;true&#39;)  
{  
    echo "设置成功";  
}  
else  {  
    echo "设置失败";  
}  
?>

Nachdem die vorherigen Einstellungen ordnungsgemäß festgelegt wurden, zeigt der Browser nach der Ausführung die Einstellung als erfolgreich an, was darauf hinweist, dass das Skript erfolgreich ausgeführt wurde.

  1. Die PHP-Ausführungsshell wird tatsächlich vom Apache- oder Nginx-Benutzer ausgeführt. PHP selbst erstellt keinen Benutzer.

Verwandte Empfehlungen:

So lösen Sie das Problem, dass PHP beim Ausführen von Shell-Skripten keine Kerndateien generiert

Beispiel für die Ein-Klick-Installation von PHP7 per Shell-Skript

Shell-Skript-Befehlsbeispiel

Das obige ist der detaillierte Inhalt vonPHP-Analyse zu Shell-Skript-Berechtigungsproblemen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn