Alterando o shell (usando chsh) através da linha de comando em um script

9

Em um script de inicialização que configura uma máquina, quero executar

chsh -s /bin/zsh

No entanto, isso pede a senha do usuário. Como faço para passar a senha como parâmetro? Ou se eu tiver o poder do sudo, posso de alguma forma contornar esse passo? Ou, como alternativa, há outra maneira de alterar o shell de inicialização padrão?

    
por HopelessN00b 15.11.2010 / 00:13

5 respostas

17

O seguinte impede que contas bloqueadas alterem seus shells e permite que as pessoas usem chsh sem SUdo ou su:

Configuração simples que ainda é segura:

  1. Adicione esta parte superior de /etc/pam.d/chsh :

    # This allows users of group chsh to change their shells without a password.
    #
    # Per: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script
    #
    auth       sufficient   pam_wheel.so trust group=chsh
    
  2. Crie o grupo chsh:

    groupadd chsh
    

Para qualquer usuário autorizado a alterar seu shell:

    usermod -a -G chsh username

Dinheiro recebido:

user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s 'which zsh'
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$ 
    
por 06.10.2012 / 20:44
2

chsh na verdade muda a linha pertencente a um usuário em / etc / passwd, embora um usuário possa apenas alterar sua própria 'linha' em / etc / passwd. Portanto, se você quiser mudar o shell para outro usuário, você precisa dele / dela passwd.

Se você realmente quiser fazer isso (dadas as preocupações no post de Lorenzo e possíveis preocupações de segurança), aqui está como alguém pode fazer isso:

#visudo

Isso requer privilégios de root.

Digamos que você esteja concorrendo como "alice" e queira alterar o shell "bob's" sem senha;

Adicione ao arquivo:

Cmnd_Alias     SHELL = /usr/bin/chsh
Runas_Alias    SH    = Bob
alice          ALL   = (SH) NOPASSWD: SHELL

Isso garante que 'alice' possa rodar em todos os hosts como os usuários do grupo SH sem uma senha do grupo de comandos no SHELL.

Provavelmente um pouco improvável para fazer isso dessa maneira, mas é possível.

Certifique-se de ler "man sudoers" antes de alterar o arquivo sudores com 'visudo', especialmente as mensagens relacionadas à segurança!

    
por 15.11.2010 / 01:22
1

Você precisa passar o nome de usuário; Fazer isso via sudo (ou por root) permitirá que você defina a senha / shell de um usuário sem precisar da senha antiga. Por favor, verifique man chsh para mais informações.

Agora minha pergunta é: por que você quer fazer isso? Se for um script de configuração, você não deve simplesmente alterar o shell dos usuários no momento da criação (por exemplo, ao lançar adduser )? Se você está clonando um sistema remotamente, você não deveria alterá-lo em /etc/passwd primeiro? Não vejo razões para fazê-lo através de um script, a menos que você tenha automatizado todo o processo de instalação e a seleção de shells a serem instalados vem após a criação do primeiro usuário.

    
por 15.11.2010 / 00:19
0

Experimente sudo chsh -s /bin/zsh e, em seguida:

  1. sair do servidor
  2. terminal de reinicialização
  3. faça login no servidor e verifique por echo $SHELL - no caso de sucesso ele mudou:)
por 03.03.2017 / 04:35
-1

Acredito que você pode alterar o shell do usuário no arquivo /etc/password , possivelmente usando o comando passwd . Ainda não li, mas isso pode ser útil: Diferenças entre os shell do UNIX e como mudar seu shell .

    
por 15.11.2010 / 01:02

Tags