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
-Hcom o comando sudo:sudo -Hu newuser bash - ou adicione
Defaults>newuser always_set_homeao seu arquivosudoerspara definir automaticamente o diretório inicial ao alternar paranewusersomente - ou adicione
Defaults:myuser always_set_homeao arquivo sudoers para definir automaticamente o diretório inicial para corresponder à nova identidade quandomyuserestiver executando qualquer comandosudo - ou adicione
Defaults always_set_homeao arquivo sudoers para forçar esse comportamento para todos os comandossudono 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::---