A seguir, evita-se que contas bloqueadas alterem suas conchas e, seletivamente, permite que as pessoas chsh
se usem SEM sudo ou su:
Configuração simples que ainda é segura:
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
Crie o grupo chsh:
groupadd chsh
Para qualquer usuário permitido alterar seu shell:
usermod -a -G chsh username
Tiro de dinheiro:
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:~$
O chsh realmente altera a linha referente a um usuário em / etc / passwd, embora um usuário possa alterar apenas sua própria 'linha' em / etc / passwd. Portanto, se você quiser alterar o shell para outro usuário, precisará da senha dele.
Se você realmente deseja fazê-lo (dadas as preocupações do post de Lorenzo e possíveis preocupações de segurança), veja como se pode fazer isso:
Isso requer privilégios de root.
Digamos que você esteja executando atualmente como "alice" e deseje alterar o shell "bob's" sem senha;
Adicione ao arquivo:
Isso garante que 'alice' possa ser executado em todos os hosts como usuários do grupo SH sem uma senha do grupo de comandos no SHELL.
Provavelmente um pouco longe de fazer 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!
fonte
sudo
é que é extremamente fácil burlar e enraizar um sistema. É melhor nunca mudar, asudoers
menos que haja uma necessidade específica que não possa ser atendida de nenhuma outra maneira (executável setuid / setgid, permissões de grupo etc.).Você precisa passar o nome de usuário; fazer isso via
sudo
(ou raiz) permitirá que você defina a senha / shell de um usuário sem ser solicitada a senha antiga. Por favor, verifiqueman 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 iniciar
adduser
)? Se você estiver clonando um sistema remotamente, não deve alterá-lo/etc/passwd
primeiro? Não vejo motivos para fazê-lo por meio de um script, a menos que você automatize todo o processo de instalação e a seleção de shells a serem instalados venha após a criação do primeiro usuário.fonte
#!/usr/bin/sudo -s
(linha shebang). Além disso, você tem certeza de que o zsh está em / bin e talvez não em / usr / bin? (apenas verificando, eu não estou familiarizado com o EC2)sudo
permissão. Veja o meu para uma abordagem diferente que não exigesudo
para o usuário médio.Eu acredito que você pode alterar o shell do usuário no
/etc/password
arquivo, possivelmente usando opasswd
comando Ainda não o li, mas isso pode ser útil: diferenças de shell do UNIX e como alterar seu shell .fonte
chsh
ouusermod
. Nunca edite opasswd
arquivo diretamente, sempre use ovipw
comando para isso.Tente
sudo chsh -s /bin/zsh
, então:echo $SHELL
- caso seja bem-sucedido, ele mudou :)fonte