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
ls -l
pourrait 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.chmod +x <SCRIPT>
sudo ./yourscript
Réponses:
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/sudoers
vous devez modifier deux paramètres:Dans le fichier sudoers, il existe par défaut un paramètre appelé
Default env_reset
qui 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_reset
et ajoutez une nouvelleenv_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:
la source
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.
la source