Ich hatte auch dieses Problem manchmal mit solchen grundlegenden Befehlen wie cd. Mit der dzdo cdRückkehr „Befehl nicht gefunden“. Natürlich merkte ich später , dass cdin ein Verzeichnis ing , dass ich nicht über die Berechtigungen in, wird nicht helfen , sehr viel, also entweder ich eine Root - Shell oder Notwendigkeit zu müssen dzdo ls, dzdo mvusw. den Inhalt von außen , dass dir.
Wildcard
2
Das Problem dabei sudo cdist, dass cdes sich um einen integrierten Befehl handelt, nicht um ein Programm. Wenn Sie in ein Verzeichnis gehen möchten, auf das Sie keinen Zugriff haben, und dort (zum Beispiel) eine Datei umbenennen möchten , können Sie (zum Beispiel) sudo mv dir/oldfile dir/newfileodersudo sh -c "cd dir; mv oldfile newfile" .
G-Man sagt "Reinstate Monica"
Antworten:
13
Wenn Sie sudo, erhalten Sie eine vorkonfigurierte $PATH, die so etwas wie der Standardpfad des Root- Benutzers ist (sein soll) . Ihr Programm befindet sich nicht in der Liste der Verzeichnisse, die durch gekennzeichnet sind $PATH.
sudo versucht, bei der Ausführung externer Befehle sicher zu sein.
Es gibt zwei verschiedene Möglichkeiten, mit Umgebungsvariablen umzugehen. Standardmäßig ist die
Option env_resetsudoers aktiviert. Diese Ursachen Befehle mit einer minimalen Umgebung ausgeführt werden , die TERM,
PATH, HOME, SHELL, LOGNAME, USERund USERNAMEzusätzlich zu Variablen aus dem rufenden Prozess erlaubt durch die env_checkund env_keepsudoers Optionen. Es gibt effektiv eine Whitelist für Umgebungsvariablen.
Wenn Sie nicht konfigurieren können sudo, um Ihre zu erhalten $PATH, besteht die übliche Problemumgehung darin, den vollständigen Pfadnamen des Programms anzugeben. Dies funktioniert möglicherweise nicht gut mit Skripten, die andere ausführbare Dateien im Verzeichnis (auf die nicht zugegriffen wird) aufrufen.
Sie sollten den vollständigen Pfad angeben. Es ist auch sicherer; Wenn Sie den Pfad nicht angeben, ist es denkbar, dass ein Angreifer ein anderes Programm erstellt, das mit Root-Berechtigungen ausgeführt wird.
Außerdem müssen Sie eine Zeile einfügen /etc/sudoers, um dies zuzulassen. man sudoersFür die Syntax ist es viel zu viel, um es hier zu formulieren.
cd
. Mit derdzdo cd
Rückkehr „Befehl nicht gefunden“. Natürlich merkte ich später , dasscd
in ein Verzeichnis ing , dass ich nicht über die Berechtigungen in, wird nicht helfen , sehr viel, also entweder ich eine Root - Shell oder Notwendigkeit zu müssendzdo ls
,dzdo mv
usw. den Inhalt von außen , dass dir.sudo cd
ist, dasscd
es sich um einen integrierten Befehl handelt, nicht um ein Programm. Wenn Sie in ein Verzeichnis gehen möchten, auf das Sie keinen Zugriff haben, und dort (zum Beispiel) eine Datei umbenennen möchten , können Sie (zum Beispiel)sudo mv dir/oldfile dir/newfile
odersudo sh -c "cd dir; mv oldfile newfile"
.Antworten:
Wenn Sie
sudo
, erhalten Sie eine vorkonfigurierte$PATH
, die so etwas wie der Standardpfad des Root- Benutzers ist (sein soll) . Ihr Programm befindet sich nicht in der Liste der Verzeichnisse, die durch gekennzeichnet sind$PATH
.Siehe zum Beispiel
sudo
$ PATH erhalten?PATH
)Wenn Sie nicht konfigurieren können
sudo
, um Ihre zu erhalten$PATH
, besteht die übliche Problemumgehung darin, den vollständigen Pfadnamen des Programms anzugeben. Dies funktioniert möglicherweise nicht gut mit Skripten, die andere ausführbare Dateien im Verzeichnis (auf die nicht zugegriffen wird) aufrufen.quelle
Sie sollten den vollständigen Pfad angeben. Es ist auch sicherer; Wenn Sie den Pfad nicht angeben, ist es denkbar, dass ein Angreifer ein anderes Programm erstellt, das mit Root-Berechtigungen ausgeführt wird.
Außerdem müssen Sie eine Zeile einfügen
/etc/sudoers
, um dies zuzulassen.man sudoers
Für die Syntax ist es viel zu viel, um es hier zu formulieren.quelle