Benutzerdefiniertes Skript mit Sudo ausgeführt - Befehl nicht gefunden

1

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
Cybex
quelle
ich kenne mich mit linux nicht so gut aus, aber versuche es zu tun 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.
barlop
Sind Sie sicher, dass die Datei ausführbar ist? chmod +x <SCRIPT>
joeeey
@Joejoe31b Es ist traurig, wie oft die Leute gefragt wurden, überprüfen Sie das Update, aber ja, das ist es
Cybex
@barlop siehe Update
Cybex
1
können Sie eine Einfügung einfügen, die den Befehl und den Fehler und das Verzeichnis enthält (anstatt den Fehler getrennt vom Befehl anzugeben). Kopieren / fügen Sie die Ausgabe ein und kommentieren Sie sie. Versuchen Sie es auch aus dem Verzeichnis heraus sudo ./yourscript
barlop

Antworten:

3

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:

sudo visudo

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 hinzu env_keep = "PATH" Eintrag danach

Zweitens 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:

sudo env "PATH=$PATH" <script name>
Argonauts
quelle
1
danke, das hat funktioniert. Ich habe gesehen, dass / etc / sudoers einen Verzeichnispfad angegeben hat, aber nicht sicher war, ob das Bearbeiten eine gute Idee war. Ich habe es trotzdem getan, mein Problem gelöst: p
Cybex
Dies ist eine ausgezeichnete Antwort. Es könnte jedoch ein bisschen Platzhalter für verschiedene Probleme verwendet werden, mit denen Benutzer konfrontiert sind.
cst1992
3

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.

Gabe
quelle