Script personnalisé exécuté avec sudo - commande introuvable

1

Problème:

Exécuter un script au retour de sudo

sudo: mount-remove-hiberfile: command not found

Info:

  • Dossier Scripts: '/ scripts' (tous mes scripts personnalisés sont conservés ici)

  • Mon utilisateur: 'cybex'

cybex @ cybex-W55xEU: ~ $ echo $ PATH // et 'sudo echo $ PATH' retournent le même chemin

/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

Le script 'mount-remove-hiberfile' ne peut pas être exécuté en tant qu'utilisateur normal, il me faudrait donc l'exécuter sudo mount-remove-hiberfile.

Pourquoi sudo ne détecte-t-il pas ce script?

note: j'ai trouvé quelques questions à ce sujet mais aucune n'a répondu à ma question

METTRE À JOUR

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 (inclure un collage qui inclut la commande, l’erreur et le répertoire)

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
la source
Je ne connais pas très bien Linux, mais essayer de le faire ls -lpourrait vous aider. il va vous montrer les autorisations. Et placez une ligne en haut du script pour faire écho à quelque chose à l'écran afin de savoir s'il l'exécute ou non. Et essayez de créer votre propre script avec les mêmes autorisations et de voir si sudo peut l'exécuter ou non. L'idée est de résoudre le problème, qu'il s'agisse d'autorisations ou de quelque chose dans le script ... bien qu'un technicien Linux puisse le voir tout de suite.
barlop
Êtes-vous sûr que le fichier est exécutable? chmod +x <SCRIPT>
Joeeey
@ joejoe31b il est triste de constater combien de fois cette question a été posée aux gens, vérifiez la mise à jour, mais c'est
effectivement
@barlop voir mise à jour
Cybex
1
pouvez-vous inclure un collage qui inclut la commande, l'erreur et le répertoire (plutôt que d'énoncer l'erreur séparément de la commande). Copier / coller le résultat et le commenter. Essayez également depuis l'annuaire sudo ./yourscript
barlop

Réponses:

3

La configuration sudo par défaut réinitialisera le chemin, quel que soit le nom de sudo. Voici deux manières courantes de contourner ce problème, la première est le changement permanent, la seconde est un argument de ligne de commande pour sudo (que vous pouvez ajouter comme alias).

changement permanent et global

Dans /etc/sudoersvous devez modifier deux paramètres:

sudo visudo

Dans le fichier sudoers, il existe par défaut un paramètre appelé Default env_resetqui efface les paramètres d'environnement du shell des appelants sudo, même si sudo est appelé avec -E (keep environment).

Dans le fichier, recherchez un paramètre appelé env_keep. Cela détermine les variables d'environnement autorisées à être transmises à l'environnement racine créé avec sudo. Il existe généralement une série d'instructions env_keep = "xxx" et env_keep + = "xxx" dans le fichier sudoers par défaut. Par défaut, PATH ne fait pas partie des variables d’environnement autorisées à passer.

Ajoutez PATH à l'une de ces entrées ou commentez la ligne env_reset. Si vous n'avez pas d'entrées env_keep, recherchez Defaults env_resetet ajoutez une nouvelle env_keep = "PATH"entrée après celle-ci.

Deuxièmement, même si vous autorisez la variable PATH à passer dans env. Sudo, le chemin est limité dans sudoers par le paramètre. Defaults secure_path='...'Vous pouvez commenter ce paramètre ou ajouter le chemin dans lequel se trouve votre script à l'entrée.

Après cela, sudo maintiendra la variable PATH et exécutera votre script.

Contournement en ligne de commande

Pour éviter de modifier le fichier sudoers, vous pouvez appeler sudo avec cette syntaxe:

sudo env "PATH=$PATH" <script name>
Argonautes
la source
1
merci, cela a fonctionné. J'ai vu que / etc / sudoers avait un chemin de répertoire spécifié, mais je ne savais pas si c'était une bonne idée de le modifier. Je l'ai quand même résolu mon problème: p
Cybex,
C'est une excellente réponse. Pourrait utiliser un peu d’espaces réservés pour différents problèmes auxquels les utilisateurs sont confrontés.
cst1992
3

sudo n'utilise pas, par défaut, votre chemin, et n'exécute pas bashrc ou équivalent de root. Voir https://askubuntu.com/q/128413 pour une description complète.

Gabe
la source