sudo su - foouser <command>
exige que você tenha pelo menos um acesso root limitado para executar su - foouser <command>
como root.
sudo -u foouser <command>
pode fazer o que quiser em um passo. Mas isso requer que o administrador do sistema conceda a você sudo
acesso à conta foouser
desta maneira:
ignacio ALL=(foouser) ALL
em vez desta forma:
ignacio ALL=(root) su - foouser
Configurar sudo
desta forma permitirá definir, por ex. um pseudônimo como você imaginou:
as_foo='sudo -u foouser'
E, evitando o su -
, talvez você possa continuar usando suas próprias personalizações: usar sudo
altera apenas a identidade do usuário, mas mantém HOME
em seu valor anterior, lendo quaisquer scripts de inicialização do shell e outras personalizações do seu diretório inicial em vez de foouser
's.
(É claro que esses scripts devem ser legíveis para esse outro usuário também, e qualquer script compartilhado que você possa executar deve se referir ao diretório inicial de foouser
explicitamente como /home/foouser
em vez de apenas $HOME
.)
No entanto, existem algumas configurações de sudo
que podem impedir que a solução funcione: se a opção always_set_home
sudo estiver definida no arquivo sudoers ou se a opção env_reset
estiver definida sem adicionar HOME
à env_keep
list, HOME
será redefinido de qualquer maneira. Em tal situação, tente adicionar a opção -E
ao comando sudo
para solicitar explicitamente a manutenção de seu ambiente.
E quando você realmente quiser executar algo como foouser
com o ambiente definido exatamente como está logado como foouser
(ou seja, o equivalente a sudo su - foouser
), adicione a opção -i
para solicitar especificamente que . Então, sudo -i -u foouser
é uma substituição 100% precisa de sudo su - foouser
.
Se você encontrar algum sistema com uma versão antiga do sudo
que não tenha a opção -i
, use a opção -H
com o sudo: não é um substituto perfeito, mas pode ser o suficiente. Uma versão tão antiga do sudo
provavelmente terá alguns bugs conhecidos sensíveis à segurança também, então valeria a pena atualizá-lo de qualquer maneira.
Você pode usar sudo -l
como você mesmo para ver exatamente como o seu acesso ao sudo está definido e quais opções do sudo (entradas de Padrões) estão em vigor para você.