Depende en gran medida de cómo llame a su programa con sudo
o su
.
Por ejemplo, en el sistema en el que estoy en este momento:
.bashrc
COMMAND $HOME $USER Env. $PATH
1. sudo -i (root) root root [1]
2. sudo -s (USER) root USER /home/${USER}/bin:[1]
3. sudo /bin/bash (USER) root USER /home/${USER}/bin:[1]
4. sudo su (root) root USER [1]:/usr/games:/usr/local/games
5. sudo su - (root) root root [1]
Donde [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Las variables de entorno se restablecen para 1 y 5, tomadas de $ USER en 2,3,4.
Por lo que una secuencia de comandos o un programa que se puso en marcha con una opción diferente puede ver diferente $PATH
, $HOME
, su cáscara puede leer diferentes .bashrc
, .profile
y las variables de entorno. Lee el archivo relacionado con el $HOME
. Cada usuario puede modificar su entorno de una manera diferente (variables $PATH
, .bashrc, .profile, .bash_profile, alias ...). En particular, un usuario puede tener un orden diferente de los directorios en el suyo $PATH
y, como consecuencia, un script puede ejecutar un comando, por ejemplo, en /home/$USER/bin
lugar del que se encuentra en la ruta esperada desde la raíz.
Puede ejecutar el programa con el sudo -i
que inició sesión como root su -
, pero puede tener un comportamiento diferente si lo ejecuta con sudo MyCommand
o con su -c MyCommand
.
De man su
:
En la parte de descripción:
el entorno actual se pasa al nuevo shell . El valor de $ PATH se restablece a / bin: / usr / bin para usuarios normales, o / sbin: / bin: / usr / sbin: / usr / bin para el superusuario
...
En la parte de opciones:
- , -l , --login
Proporcione un entorno similar al que el usuario esperaría si el usuario hubiera iniciado sesión directamente .
Del hombre sudo
-i , --login
Ejecuta el shell especificado por la entrada de la base de datos de contraseñas del usuario objetivo como un shell de inicio de sesión. Esto significa que el shell leerá los archivos de recursos específicos de inicio de sesión como .profile o .login. Si se especifica un comando, se pasa al shell para su ejecución a través de la opción -c del shell. Si no se especifica ningún comando, se ejecuta un shell interactivo. sudo
intenta cambiar al directorio de inicio de ese usuario antes de ejecutar el shell. El comando se ejecuta con un entorno similar al que recibiría un usuario al iniciar sesión . La sección Entorno de comando en el manual de sudoers (5) documenta cómo la opción -i afecta el entorno en el que se ejecuta un comando cuando la política de sudoers está en uso.