Script personalizado ejecutado con sudo: comando no encontrado

Script personalizado ejecutado con sudo: comando no encontrado

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/sudoersmodificar dos configuraciones:

sudo visudo

En el archivo sudoers hay de forma predeterminada una configuración llamada Default env_resetque 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_resety 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.

información relacionada