É uma má prática definir o shell do root para algo diferente do padrão?


16

Uma vez um amigo meu (que é um usuário experiente do Unix / Linux) me disse que configurar o shell do root para algo diferente de sh (por exemplo, bash ou zsh) pode criar problemas, porque alguns scripts podem assumir que o shell é sh e fazer algo estranho .

No entanto, acho que o Ubuntu tem o shell raiz padrão definido como bash, e o Gentoo também usa o bash. Alguém pode rebentar o mito?

Respostas:


12

Sim. Se o sistema falhar durante a inicialização, você poderá fazer login no shell raiz. Se você tiver / usr separado, alguns shells poderão falhar ao iniciar com êxito.

Eu aconselho a criar uma conta toor(uid 0, gid 0) com shell não padrão enquanto raiz esquerda com shell padrão.


Isso aconteceu comigo quando atualizei do FBSD 7.2 para 8.0 e esqueci de reconstruir bash. Inicializei no modo de usuário único para corrigir, mas funcionou apenas porque /bin/shainda estava vinculado ao FBSDfork do bournee não bash.
gvkv

só para esclarecer as coisas, se eu instalar o say zshe de alguma forma /usrestiver danificado terei problema? mas meu sistema tem /bin/shapontando para /bin/bashe bashem si, por que não shser afetada?
Phreinhe # 3/10

1
Padrões para a "garantia" raiz de que o sistema inicializará - o guia de atualização cuidará de ser capaz de fazer login no root pelo menos. No entanto, pode não ser o caso para mais nada. A solução é duplicar a conta root por toor com shell não padrão para uso diário e manter a raiz como está.
Maciej Piechotka

1
zshnão deve estar /usr/bin/se estiver instalado errado. todas as conchas devem ser em/bin
xenoterracide

1
@xenoterracide: zsh no Gentoo está, /binmas mantém alguns arquivos /usr/share. Também afirmei claramente que o problema ocorre durante o login durante a inicialização (quando algum serviço falha).
Maciej Piechotka 24/10/10

7

Não deve ser um problema.

Os arquivos de script de shell codificam explicitamente com qual shell eles são executados. É codificado na primeira linha ou outros programas ou scripts executam um shell específico e fornecem o script como argumento.

O único programa em que consigo pensar que usa as informações do shell da conta do usuário (além do processo de login) é o procmail. Muito engraçado se seu usuário definiu como shell / bin / false no servidor de e-mail ... Mas você normalmente não executa o procmail como root.

Outro candidato seriam as linhas no crontab da raiz. Não sei qual é a política de crond qual shell usar.


$ SHELL normalmente é definido como / bin / sh pelo crondaemon na inicialização.
Echox #

3

Os scripts escritos para o bourne shell serão executados na maioria das vezes contra BASH ou ZSH ou $ foo sem problemas.

Em muitos sistemas Linux, nenhum sh original é instalado; em vez disso, geralmente é um link simbólico contra / bin / bash.

Se alguns scripts simplesmente "assumem" que o shell é explicitamente sh, eles devem ser reescritos. Existe o mecanismo shebang para escolher qual intérprete seu script precisa. Se for o sh, o script deve incluir #!/bin/shcomo a primeira linha.

Sua configuração padrão do shell não deve ser relevante neste contexto.


2

Não acho que alterar o shell da raiz possa causar problemas. Eu me lembro de alguns unices (talvez algumas variantes do BSD?) Tendo tcsh como o shell padrão para root.

Os logins raiz são raros de qualquer maneira. Normalmente, você faria login em sua própria conta e, em seguida, su ou sudo para fazer root.

O que importa é que o shell do root deve ter o menor número possível de dependências, para poder ser usado em um contexto de reparação do sistema. Por exemplo, é uma boa idéia ter um shell raiz vinculado estaticamente; algumas distribuições fornecem uma versão vinculada estaticamente do bash ou zsh ou sash (um shell com muitos utilitários padrão integrados). No entanto, isso não é tão importante se o seu sistema puder ser inicializado facilmente a partir de um CD de recuperação ou unidade USB.


Pela razão da dependência, acho que faz sentido deixar o shell como está para que uma grande modificação do sistema (como uma atualização) não atrapalhe as coisas. Concordo que é fácil corrigir com um CD ao vivo ou USB, mas não preciso corrigi-lo em primeiro lugar.
phunehehe

1

O shell de logon de um usuário não afeta o processo de inicialização. Você pode definir esse shell para o que quiser. Nem todos os sistemas possuem bash e funcionam bem. Além disso, se é /usr/bin/zshque foi instalado errado, todos os shells de sistema deve estar em /bin. No entanto, você não deve mudar /bin/shpara apontar para algo diferente do padrão (a menos que saiba o que está fazendo) como muitos scripts #!/bin/shque normalmente apontam para bash, quando deveriam, #!/bin/bashporque usam bashisms e outro comportamento que não trabalhar em zshou dash.


oops desculpe, eu cometi um erro, na verdade, no meu computador tanto bashe zshestão em/bin
phunehehe

0

Eu tenho o bash como shell padrão para root. Eu usei o zsh por algum tempo, mas depois voltei ao bash . Qual shell você usa, não importa muito.

É apenas um problema, se mais de uma pessoa tiver acesso root. Nesse caso, você pode selecionar um 'denominador comum' que geralmente é o bash, pois esse é o shell mais amplamente usado.


0

Em relação ao Solaris / illumos, a Mini-FAQ do Solaris Root Shell menciona

Alguns administradores de sistema ainda não recomendam a alteração do shell raiz nos
sistemas Solaris. Pergunte o porquê e você poderá saber que o root precisa de um
shell vinculado estaticamente, que não depende das
bibliotecas dinâmicas em / usr / lib. Isso era verdade no passado, mas não é
necessariamente o caso hoje. O Solaris, quando configurado corretamente, é como qualquer outra versão do Unix e pode suportar qualquer shell que você definir, para raiz ou qualquer outra conta.

Portanto, sim, se você estiver usando Solaris ou illumos, não há problema em usar outros shells sh.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.