Benutzerdefiniertes Skript mit sudo ausführen – Befehl nicht gefunden

Benutzerdefiniertes Skript mit sudo ausführen – Befehl nicht gefunden

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/sudoersmüssen Sie zwei Einstellungen ändern:

sudo visudo

In der sudoers-Datei gibt es standardmäßig eine Einstellung, Default env_resetdie 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_reseteinem 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.

verwandte Informationen