Problem:
Ausführen eines Skripts, wenn Sudo zurückkehrt
sudo: mount-remove-hiberfile: command not found
Info:
Skriptordner: '/ scripts' (alle meine benutzerdefinierten Skripts werden hier aufbewahrt)
Mein Benutzer: 'cybex'
cybex @ cybex-W55xEU: ~ $ echo $ PATH // und 'sudo echo $ PATH' liefern denselben Pfad
/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 $ PFAD
/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 es ausführen sudo mount-remove-hiberfile
.
Warum erkennt Sudo dieses Skript nicht?
Anmerkung: Ich habe einige Fragen dazu gefunden, aber keine, die meine Frage beantwortet haben
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ügen Sie eine Einfügung ein, die den Befehl sowie 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
ls -l
auf das Skript könnte helfen. Es zeigt Ihnen die Berechtigungen. Fügen Sie oben im Skript eine Zeile ein, um etwas auf dem Bildschirm anzuzeigen, damit Sie wissen, ob es ausgeführt wird oder nicht. Versuchen Sie, Ihr eigenes Skript mit den gleichen Berechtigungen zu erstellen, und prüfen Sie, ob sudo es ausführen kann oder nicht. Die Idee ist es, Probleme zu beheben, ob es sich um Berechtigungen oder etwas im Skript handelt. Ein Linux-Techniker könnte dies jedoch sofort sehen.chmod +x <SCRIPT>
sudo ./yourscript
Antworten:
Die Sudo-Konfiguration setzt den Pfad standardmäßig zurück, unabhängig davon, wie Sudo aufgerufen wird. Es gibt zwei gängige Möglichkeiten, dies zu umgehen. Die erste ist die permanente Änderung. Die zweite ist ein Befehlszeilenargument für sudo (das Sie als Alias hinzufügen könnten).
permanent & amp; globale Veränderung
Im
/etc/sudoers
Sie müssen zwei Einstellungen ändern:In der Sudoers-Datei wird standardmäßig eine Einstellung aufgerufen
Default env_reset
Dadurch werden die Umgebungseinstellungen von der Sudo-Aufrufer-Shell gelöscht, auch wenn Sudo mit -E (keep environment) aufgerufen wird.In der Datei nach einer Einstellung suchen
env_keep
. Dadurch wird festgelegt, welche Umgebungsvariablen an die mit sudo erstellte Root-Umgebung übergeben werden dürfen. In der Standard-Sudoers-Datei gibt es normalerweise eine Reihe von Anweisungen env_keep = "xxx" und env_keep + = "xxx". Standardmäßig ist PATH keine der Umgebungen, die durchgelassen werden dürfen.Fügen Sie PATH zu einem dieser Einträge hinzu oder kommentieren Sie die Zeile env_reset aus. Wenn Sie keine Einträge für env_keep haben, suchen Sie nach
Defaults env_reset
und füge ein neues hinzuenv_keep = "PATH"
Eintrag danachZweitens ist der Pfad in Sudoern durch die Einstellung begrenzt, selbst wenn Sie die PATH-Variable in das sudo-env übergehen lassen
Defaults secure_path='...'
Sie können diese Einstellung entweder auskommentieren oder den Pfad, in dem sich Ihr Skript befindet, zum Eintrag hinzufügen.Danach behält sudo die Variable PATH bei und führt das Skript aus.
Befehlszeile Problemumgehung
Um zu vermeiden, dass Sie die Sudoers-Datei ändern, können Sie Sudo mit dieser Syntax aufrufen:
quelle
sudo verwendet standardmäßig nicht Ihren Pfad und führt keine root-bashrc oder äquivalente aus. Sehen https://askubuntu.com/q/128413 für eine vollständige Beschreibung.
quelle