altere o shell no Solaris / SunOS para seu usuário somente sem acesso a / etc / passwd

3

Como defino o shell no Solaris / SunOS apenas para meu usuário, sem acesso a /etc/passwd ou qualquer outro su stuff?

Depois disso, deve funcionar tanto para o ssh (1) quanto para o ssh interativos quando você envia comandos (2).

uname -a diz SunOS ... 5.10 Generic_148889-04 i86pc i386 i86pc

Editar em resposta a comentários e respostas

Não há chsh .

Não consigo fazer /usr/bin/passwd -e - permissão negada.

O shell padrão é o bash. Eu gostaria de zsh.

Já tentei definir manualmente a variável de ambiente SHELL e iniciar o shell manualmente no arquivo .profile , mas isso não funciona no meu segundo caso (2): ssh user@host command executará command no bash.

Em comparação com o meu shell preferido quando eu faço login, ele é menor, então a solução é certamente digna de menção, apenas, minha intenção com essa pergunta era acertar o caminho certo. Porque se relaciona apenas com um usuário, eu pensei que era factível sem envolver o SA, mas agora eu tenho menos certeza. (Mas qualquer solução alternativa que resolva (1) e (2) é legal, com certeza.)

    
por Emanuel Berg 28.06.2013 / 03:10

3 respostas

4

O truque SHELL=newshell; exec "$SHELL" já foi coberto.

Agora, se você também quiser que os comandos executem o ssh para usar o novo shell. Se o shell de login atual for bash , você poderá adicioná-lo ao seu ~/.bashrc :

if [ -n "$BASH_EXECUTION_STRING" ]; then
  export SHELL=/bin/zsh
  exec "$SHELL" -c "$BASH_EXECUTION_STRING"
fi

Isso executará something com o novo shell sempre que bash for iniciado com bash -c something e ele ler ~/.bashrc .

Os shells iniciados com bash -c something geralmente não lêem o ~/.bashrc . Uma exceção é quando esses bash são chamados por sshd ou rshd ou bash -ic something .

Você pode adicionar uma verificação de [ -n "$SSH_CONNECTION" ] se desejar cobrir apenas o caso ssh .

    
por 28.06.2013 / 23:29
4

método # 1: com chsh

Normalmente você pode usar o comando chsh para alterar seu shell sem ter que ter acesso ao /etc/passwd . Este é o arquivo que normalmente lista seu shell padrão, por exemplo:

saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh

Um usuário normal só pode alterar o shell de login para sua própria conta, o superusuário ou seja, o usuário root pode alterar o shell de login de qualquer conta. Você pode ver quais shells estão disponíveis no seu sistema com este comando:

$ chsh --list-shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/zsh

Para alterar seu shell, você pode usar este comando:

$ chsh -s /bin/zsh saml
Changing shell for saml.
Password: 
Shell changed.

O efeito é óbvio se você olhar no arquivo /etc/passwd :

$ grep saml /etc/passwd
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh

Você não verá a mudança imediatamente. Você terá que sair / login para ver:

[saml@grinchy]~% echo $SHELL
/bin/zsh

método # 2: /usr/bin/passwd -e

Se você não tiver acesso ao comando chsh , que aparentemente não está no Solaris, e não tiver acesso root para alterá-lo em /etc/passwd , talvez ainda possa fazer o mesmo com este comando:

$ /usr/bin/passwd -e

método # 3: defina manualmente o método

Se nenhum dos métodos acima for uma opção, você basicamente terá esta última opção, que é adicionar um dos seguintes aos arquivos de login do seu shell existente:

  1. shell padrão: / bin / csh ou / bin / tcsh

    Adicione as seguintes linhas a $HOME/.login :

    setenv SHELL=/bin/bash
    exec $SHELL
    
  2. shell padrão: / bin / bash

    Adicione o seguinte a $HOME/.bash_profile :

    export SHELL=/bin/zsh
    exec $SHELL
    

Alguns aspectos adicionais a serem considerados com os itens acima, você pode torná-los mais à prova de balas realizando uma verificação para ver se o $ SHELL atual já é /bin/bash , por exemplo, antes de configurá-lo. Se estiver, não faça nada, caso contrário, vá em frente e execute o exec $SHELL .

Referências

por 28.06.2013 / 04:11
4

Você não pode fazer isso com uma instalação do Solaris. Uma solução simples seria modificar seu perfil para executar o shell desejado.

Por exemplo, supondo que /etc/passwd declare que seu shell é /bin/bash , mas você prefere /bin/ksh :

$ tail -2 ~/.bash_profile
export SHELL=/bin/ksh
exec $SHELL

Cuidado para não travar você com um erro de digitação ou não entrar em um loop infinito com exec ou lógica falsa.

    
por 28.06.2013 / 06:03