sudo
pode ser configurado para definir $HOME
para corresponder ao novo usuário ao alternar usuários ou não. No seu caso, parece que está configurado para não alternar $HOME
. Isso pode ser útil quando você deseja alternar para contas de usuário que são dedicadas a aplicativos de serviço específicos, mas ainda deseja continuar usando sua configuração de shell pessoal e outras configurações.
E ~/.bashrc
é na verdade apenas uma abreviação de $HOME/.bashrc
.
Portanto, quando você executar sudo -u newuser bash
, sudo
alterará o nome de usuário para newuser
, mas $HOME
ainda será definido como /home/myuser
.
Quando bash
tenta executar ~/.bashrc
, há um pequeno problema: como newuser
, talvez não tenha acesso para ler /home/myuser/.bashrc
, a menos que você conceda especificamente esse acesso. Se você não tiver, provavelmente é por isso que .bashrc
está sendo ignorado. Como $HOME
ainda está definido como /home/myuser
, não haverá tentativa de executar /home/newuser/.bashrc
.
Se você quiser que sudo
defina HOME=/home/newuser
, você pode:
- use a opção
-H
com o comando sudo:sudo -Hu newuser bash
- ou adicione
Defaults>newuser always_set_home
ao seu arquivosudoers
para definir automaticamente o diretório inicial ao alternar paranewuser
somente - ou adicione
Defaults:myuser always_set_home
ao arquivo sudoers para definir automaticamente o diretório inicial para corresponder à nova identidade quandomyuser
estiver executando qualquer comandosudo
- ou adicione
Defaults always_set_home
ao arquivo sudoers para forçar esse comportamento para todos os comandossudo
no sistema. (Algumas distribuições do Linux têm isso habilitado por padrão).
Se você não quer mudar o diretório pessoal ao trocar de usuário, então você precisa ter certeza de que o novo usuário pode ler seus arquivos pessoais de inicialização do shell.
As permissões mínimas que você precisa para permitir que sudo -u newuser bash
execute /home/myuser/.bashrc
são:
- uma permissão de pesquisa para
/home/myuser
- uma permissão de leitura para
/home/myuser/.bashrc
Se não houver um grupo de usuários conveniente que seja comum a myuser
e newuser
, e as ACLs não estejam disponíveis (ou seja, somente permissões tradicionais no estilo Unix), essa seria a maneira tradicional de fazer isso:
chmod 711 /home/myuser # i.e. directory permissions drwx--x--x
chmod 644 /home/myuser/.bashrc # i.e. file permissions -rw-r--r--
Se as ACLs estiverem disponíveis para o sistema de arquivos que contém seu diretório pessoal, você poderá fazer isso para conceder o acesso mínimo necessário:
setfacl -m u:newuser:x /home/myuser
setfacl -m u:newuser:r /home/myuser/.bashrc
Se as permissões do diretório inicial fossem inicialmente drwx------
, após esse comando, as permissões para /home/myuser
seriam parecidas com drwx--x---+
. Para verificar a ACL completa, use getfacl
:
$ getfacl /home/myuser
getfacl: Removing leading '/' from absolute path names
# file: home/myuser
# owner: myuser
# group: myuser
user::rwx
user:newuser:--x
group::---
mask::--x
other::---