Heim > Artikel > Backend-Entwicklung > PHP-Analyse zu Shell-Skript-Berechtigungsproblemen
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:
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). ;
Ü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 == 'true') { 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:
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). ;
Ü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 == 'true') { 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.
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
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!