
Problema:
Ejecutar un script cuando regresa Sudo
sudo: mount-remove-hiberfile: command not found
Información:
Carpeta de scripts: '/scripts' (todos mis scripts personalizados se guardan aquí)
Mi usuario: 'cybex'
cybex@cybex-W55xEU:~$ echo $PATH //y 'sudo echo $PATH' devuelven la misma ruta
/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 $RUTA
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/scripts
El script 'mount-remove-hiberfile' no se puede ejecutar como usuario normal, por lo que necesitaría ejecutar sudo mount-remove-hiberfile
.
¿Por qué sudo no detecta este script?
nota: encontré algunas preguntas sobre esto, pero ninguna respondió a mi pregunta.
ACTUALIZAR
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
ACTUALIZAR (incluir un pegado que incluya el comando y el error y el directorio)
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
Respuesta1
La configuración de sudo de forma predeterminada restablecerá la ruta independientemente de cómo se llame a sudo. Aquí hay dos formas comunes de solucionar este problema: la primera es el cambio permanente y la segunda es un argumento de línea de comando para sudo (que puede agregar como alias).
cambio permanente y global
Necesita /etc/sudoers
modificar dos configuraciones:
sudo visudo
En el archivo sudoers hay de forma predeterminada una configuración llamada Default env_reset
que borra la configuración ambiental del shell de quienes llaman a sudo, incluso si se llama a sudo con -E (mantener el entorno).
En el archivo busque una configuración llamada env_keep
. Esto determina qué variables ambientales se pueden pasar al entorno raíz que se crea con sudo. Normalmente hay una serie de declaraciones env_keep="xxx" y env_keep+="xxx" en el archivo sudoers predeterminado. De forma predeterminada, PATH no es una de las variables de entorno a las que se permite el paso.
Agregue PATH a una de estas entradas o comente la línea env_reset. Si no tiene entradas env_keep, busque Defaults env_reset
y agregue una nueva env_keep = "PATH"
entrada después.
En segundo lugar, incluso si permite que la variable PATH pase al entorno sudo, la ruta está limitada en sudoers por la configuración. Defaults secure_path='...'
Puede comentar esta configuración o agregar la ruta en la que se encuentra su script a la entrada.
Después de eso, sudo mantendrá la variable PATH y ejecutará su script.
solución alternativa de línea de comando
Para evitar modificar el archivo sudoers, puedes llamar a sudo con esta sintaxis:
sudo env "PATH=$PATH" <script name>
Respuesta2
sudo, de forma predeterminada, no utiliza su ruta y no ejecuta bashrc de root o equivalente. Verhttps://askubuntu.com/q/128413para una descripción completa.