perfil do bash de fornecimento para usuários root

17

Peço desculpas antecipadamente se esta pergunta vai incomodar todo mundo, como eu aprecio, já foi feita de várias maneiras várias vezes antes. Tenha certeza de que li os arquivos e tentei pelo menos algumas das sugestões, mas ainda não consigo resolver o problema (simples). Espero que alguém possa dar uma resposta e eu possa me sentir adequadamente humilhado. Para sua informação, para evitar qualquer ambiguidade, usarei caminhos absolutos em vez de relativos.

Quando faço login, faço isso como usuário adam. Os aliases /Users/adam/.bash_profileestão carregados e eu posso usá-los imediatamente após puxar um terminal. Eu não uso um .bashrcarquivo e tudo bem.

De vez em quando, eu mudo para root digitando suno terminal e digitando minha senha. O prompt muda e agora eu sou o usuário root. Minha pergunta é a seguinte: imediatamente após tornar-se root, meu perfil de bash de raiz pode ser carregado sem que eu precise fornecer manualmente o arquivo de perfil? A razão pela qual sei que isso não acontece automaticamente é porque tenho os mesmos aliases no meu arquivo de perfil raiz e no meu /Users/adam/.bash_profile. Depois de se tornar usuário root, a menos que eu digite source [root_profile_file], eles não funcionam. Tentei configurar as seguintes permutações e depois mudar para o root através do terminal, mas nenhuma delas cria automaticamente o perfil / aliases (observe, não tenho nenhuma das opções abaixo configuradas simultaneamente, por isso acho que não ' estou confundindo o sistema):

Opção 1: coloque meus aliases em/etc/profile

Opção 2:

  • em /etc/profile, inserção[ -r /etc/bashrc ] && . /etc/bashrc
  • colocar meus apelidos /etc/bashrc

Opção 3:

  • em /etc/bash_profile, inserção[ -r /etc/bashrc ] && . /etc/bashrc
  • colocar meus apelidos /etc/bashrc

Opção 4: colocar meus apelidos em/var/root/.profile

Opção 5:

  • em /var/root/.profile, inserção[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • colocar meus apelidos /var/root/.bashrc

Opção 6:

  • em /var/root/.bash_profile, inserção[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • colocar meus apelidos /var/root/.bashrc

Observe que, com qualquer uma das opções acima, se eu alternar para raiz e digitar source root_profile_fileos aliases são carregados, mas somente se eu realmente fornecer o arquivo manualmente. Talvez eu tenha entendido totalmente como o bash funciona e não seja possível obter um arquivo de perfil automaticamente depois de mudar para o root, mas espero que exista uma solução simples. Agradecemos antecipadamente a qualquer pessoa que tenha tomado o tempo necessário para ler esta mensagem.

Adam Gold
fonte

Respostas:

14

O problema que você está enfrentando é que, quando você executa supor si só, não está inserindo um shell de 'login'. Isso significa que seu ambiente, diretório de trabalho e tudo, exceto uid / gid, permanecem os mesmos do usuário original.

Os gatilhos de logon não são executados e você enfrenta os problemas descritos.

Uma solução simples para um problema simples:

su -

Na su(1)página do manual:

O comando su é usado para se tornar outro usuário durante uma sessão de login. Chamado sem um nome de usuário, su assume como padrão o superusuário. O argumento opcional - pode ser usado para fornecer um ambiente semelhante ao que o usuário esperaria se o usuário estivesse conectado diretamente.

Além disso:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged in directly.

Se você estiver suem um shell de login, o bash se comportará conforme o esperado e obterá automaticamente os arquivos apropriados no "login", sem a necessidade de soluções alternativas muito invasivas.

Jason Salaz
fonte
1
Vou, no entanto, secundar as anotações de Hai Vu: Você realmente, realmente, nunca deve sunem trabalhar como root. Existe sudopara esse fim, ou você pode trabalhar de tal maneira que não exija privilégios de root.
Jason Salaz
Obrigado a você e a @Hai Vu. "su -" faz o truque e sim, completamente compreendido, a raiz geralmente deve ser evitada.
Adam Gold
1
Eu já sabia adicionar o '-' após o comando su, mas ainda não estava recebendo o meu .bash_profile para o usuário root. A resposta de Florian Bidabe e patrix abaixo sobre como alterar o shell raiz de sh para bash corrigiu o problema para mim.
precisa saber é o seguinte
9

Na verdade, os usos de root /bin/sh(shell bourne antigo) .bash_profilee .bashrcsão lidos pelo bash.

Torna-se complicado, pois esses arquivos podem usar funcionalidades não disponíveis no sh. Mesmo se você source .bashrcou source .bash_profilevocê ainda tiver algum problema com funções complexas, por exemplo.

Uma maneira de resolver isso é executar

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

para mudar rooto shell para bash.

Florian Bidabe
fonte
Root /bin/shusa /var/root/.profilearquivo. Crédito para resposta de
Petr Újezdský
6

Quando eu absolutamente preciso, eu sudo bashque me enraíza, mas com o ambiente de JRobert. Meu .bashrc contém:

# Prompt: 'jrobert@JRiMac ~' in green (red, if I'm root), '$' in white
if [[ $UID == 0 ]]; then
   export PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
   export PS1="\[\e[32;40m\]\u@\h \W\[\e[0m\]\$ "
fi

, para fazer com que o prompt de raiz me olhe de vermelho para enfatizar que agora estou (mais) vulnerável ao meu próprio [escolha uma: ousadia, burrice, tendências dos dedos gordos, falta de vontade de seguir bons conselhos, até s.creek - não deixe cair a raquete].

JRobert
fonte
3

Estou usando sudo -ipara alternar para o usuário root. Nesse caso, a configuração do shell é lida /var/root/.profile.

Matic
fonte
1

Em geral, aconselho contra su, pois é perigoso, basta procurá-lo e você sabe o porquê. Na sua pergunta, a conta root funciona da mesma maneira que a sua conta: ela fornece ~ / .bash_profile e / ou ~ / .bashrc. Não sei qual, mas minha intuição se inclina para ~ / .bashrc , então você pode tentar colocar seus apelidos lá. Aqui está uma sugestão:

su           # type password to get into root account
vi ~/.bashrc # put your aliases there
exit         # exit your root session
su           # try again to see if your aliases works
Hai Vu
fonte
0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash Só isso funciona! Tentei colocar meu export PS1=...arquivo em qualquer um desses arquivos acima. / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile.

De todos esses arquivos /bin/sh, o shell não lê informações! (somente bash) (Mac OS El Capitan). E eu tive que mudar o shell para o bash.

Também "su -"funciona também. (com este shell está lendo o /var/root/.profilearquivo)

ivan11
fonte
1
Não há necessidade de reconfirmar respostas existentes ...
nohillside
-1

Uma maneira de resolver isso é executar o seguinte para alternar o shell do root para o bash:

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

Esta solução também corrigiu meu problema.

Yang Wang
fonte
-2

se você tiver apenas um usuário 'padrão' e o usuário raiz, poderá colocar alias su="su -".bash_profile do usuário 'padrão' e obter o efeito desejado. Funciona e sem coisas hacky.

David Costa
fonte