Depende fortemente de como você chama seu programa com sudo
ou su
.
Por exemplo, no sistema em que estou neste 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]
Onde [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = As variáveis de ambiente são redefinidas para 1 e 5, extraídas de $ USER em 2,3,4
Assim, um script ou um programa que é lançado com uma opção diferente pode ver diferente $PATH
, $HOME
, sua concha pode ler diferentes .bashrc
, .profile
e variáveis de ambiente. Ele lê o arquivo relacionado ao $HOME
. Cada usuário pode modificar seu ambiente de uma maneira diferente (variáveis $PATH
, .bashrc, .profile, .bash_profile, alias ...). Em particular, um usuário pode ter uma ordem diferente dos diretórios nos seus $PATH
e, como conseqüência, um script pode executar um comando, por exemplo, em /home/$USER/bin
vez daquele no caminho esperado a partir da raiz.
Você pode executar o programa sudo -i
como estava logado como root su -
, mas pode ter um comportamento diferente se executá-lo com sudo MyCommand
ou com su -c MyCommand
.
De man su
:
Na parte da descrição:
O ambiente atual é passado para o novo shell . O valor de $ PATH é redefinido para / bin: / usr / bin para usuários normais ou / sbin: / bin: / usr / sbin: / usr / bin para o superusuário
...
Na parte de opções:
- , -l , --login
Forneça um ambiente semelhante ao que o usuário esperaria se o usuário estivesse conectado diretamente .
Do homem sudo
-i , --login
Execute o shell especificado pela entrada do banco de dados de senhas do usuário de destino como um shell de logon. Isso significa que os arquivos de recursos específicos de login, como .profile ou .login, serão lidos pelo shell. Se um comando for especificado, ele será passado para o shell para execução através da opção -c do shell. Se nenhum comando for especificado, um shell interativo será executado. sudo
tenta mudar para o diretório inicial desse usuário antes de executar o shell. O comando é executado com um ambiente semelhante ao que um usuário receberia ao efetuar login . A seção Ambiente de Comando no manual sudoers (5) documenta como a opção -i afeta o ambiente em que um comando é executado quando a política de sudoers está em uso.