
Problem:
Ausführen eines Skripts, wenn „sudo“ zurückkehrt
sudo: mount-remove-hiberfile: command not found
Die Info:
Skriptordner: „/scripts“ (alle meine benutzerdefinierten Skripte werden hier gespeichert)
Mein Benutzer: 'cybex'
cybex@cybex-W55xEU:~$ echo $PATH //und 'sudo echo $PATH' geben den gleichen Pfad zurück
/home/cybex/.rbenv/plugins/ruby-build/bin:/home/cybex/.rbenv/shims:/home/cybex/.rbenv/bin:/home/cybex/.rbenv/plugins/ruby-build/bin:/home/cybex/.rbenv/shims:/home/cybex/.rbenv/bin:/home/cybex/bin:/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/scripts:/snap/bin
root@cybex-W55xEU:/home/cybex# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/scripts
Das Skript „mount-remove-hiberfile“ kann nicht als normaler Benutzer ausgeführt werden, daher müsste ich ausführen sudo mount-remove-hiberfile
.
Warum erkennt sudo dieses Skript nicht?
Hinweis: Ich habe einige Fragen dazu gefunden, aber keine, die meine Frage beantwortet hat
AKTUALISIEREN
ls -l /scripts/
total 20
-rwxr-xr-x 1 root root 95 Apr 26 22:45 apt-manage
-rwxr-xr-x 1 root root 40 Apr 26 22:45 apt-update
-rwxr-xr-x 1 root root 769 Apr 28 20:47 create-desktop-file
-rwxr-xr-x 1 root root 370 May 16 22:45 extractgst.sh
-rwxr-xr-x 1 root root 1085 May 16 21:25 mount-remove-hiberfile
UPDATE (fügt ein Paste ein, das den Befehl, den Fehler und das Verzeichnis enthält)
cybex@cybex-W55xEU:~$ pwd
/home/cybex
cybex@cybex-W55xEU:~$ ls -l /scripts/
total 52
-rwxr-xr-x 1 root root 95 Apr 26 22:45 apt-manage
-rwxr-xr-x 1 root root 2283 May 21 16:59 backup
-rwxr-xr-x 1 root root 109 May 21 16:59 check-port
-rwxr-xr-x 1 root root 2185 May 21 16:59 connected
-rwxr-xr-x 1 root root 769 Apr 28 20:47 create-desktop-file
-rwxr-xr-x 1 root root 164 May 21 16:59 download
-rwxr-xr-x 1 root root 370 May 16 22:45 extractgst.sh
-rwxr-xr-x 1 root root 5142 May 21 16:59 firewall
-rwxr-xr-x 1 root root 3881 May 21 16:59 firewall.save
-rwxr-xr-x 1 root root 1085 May 16 21:25 mount-remove-hiberfile
-rwxr-xr-x 1 root root 80 May 21 16:59 portquiz
-rwxr-xr-x 1 root root 84 May 21 16:59 space-used
drwxr-xr-x 1 root root 0 May 21 17:00 tmp
cybex@cybex-W55xEU:~$ sudo mount-remove-hiberfile
sudo: mount-remove-hiberfile: command not found
Antwort1
Die sudo-Konfiguration setzt den Pfad standardmäßig zurück, unabhängig davon, wie sudo aufgerufen wird. Hier sind zwei gängige Möglichkeiten, dies zu umgehen: Die erste ist die dauerhafte Änderung, die zweite ist ein Befehlszeilenargument für sudo (das Sie als Alias hinzufügen könnten).
permanenter & globaler Wandel
In /etc/sudoers
müssen Sie zwei Einstellungen ändern:
sudo visudo
In der sudoers-Datei gibt es standardmäßig eine Einstellung, Default env_reset
die die Umgebungseinstellungen aus der Sudo-Aufrufer-Shell löscht, selbst wenn sudo mit -E (Umgebung beibehalten) aufgerufen wird.
Suchen Sie in der Datei nach einer Einstellung namens env_keep
. Diese bestimmt, welche Umgebungsvariablen an die mit sudo erstellte Root-Umgebung übergeben werden dürfen. In der Standard-sudoers-Datei gibt es normalerweise eine Reihe von env_keep="xxx"- und env_keep+="xxx"-Anweisungen. Standardmäßig ist PATH keine der Umgebungsvariablen, die übergeben werden dürfen.
Fügen Sie PATH zu einem dieser Einträge hinzu oder kommentieren Sie die Zeile env_reset aus. Wenn Sie keine env_keep-Einträge haben, suchen Sie danach nach Defaults env_reset
einem neuen env_keep = "PATH"
Eintrag und fügen Sie ihn hinzu.
Zweitens: Auch wenn Sie die Übergabe der PATH-Variable in die Sudo-Umgebung zulassen, wird der Pfad in Sudoers durch die Einstellung beschränkt. Defaults secure_path='...'
Sie können diese Einstellung entweder auskommentieren oder dem Eintrag den Pfad hinzufügen, in dem sich Ihr Skript befindet.
Danach verwaltet sudo die PATH-Variable und führt Ihr Skript aus.
Problemumgehung über die Befehlszeile
Um eine Änderung der sudoers-Datei zu vermeiden, können Sie sudo mit dieser Syntax aufrufen:
sudo env "PATH=$PATH" <script name>
Antwort2
sudo verwendet standardmäßig nicht Ihren Pfad und führt nicht root's bashrc oder ein gleichwertiges Programm aus. Siehehttps://askubuntu.com/q/128413für eine vollständige Beschreibung.