Para evitar problemas com bloqueio ou bagunçar seu arquivo de sombra, você poderia usar
echo username:some_string | chpasswd
Mais especificamente: você pode usar o *
no campo de senha fazendo isso:
echo "username:*" | chpasswd -e
Eu escrevi um script para adicionar usuários do CVS e SVN em um servidor Linux (Slackware 14.0). Esse script cria o usuário, se necessário, e copia a chave SSH do usuário de uma conta de shell existente ou gera uma nova chave SSH.
Só para ficar claro, as contas são especificamente para SVN ou CVS. Então a entrada em /home/${username}/.ssh/authorized_keys
começa com (usando o CVS como exemplo):
command="/usr/bin/cvs server",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa ....etc...etc...etc...
O acesso real ao shell nunca será permitido para esses usuários - eles estão puramente disponíveis para fornecer acesso aos nossos repositórios de origem via SSH.
Meu problema é que, quando adiciono um novo usuário, ele recebe uma senha vazia em /etc/shadow
por padrão. Parece:
paddycvs:!:15679:0:99999:7:::
Se eu deixar o arquivo de sombra como está (com o !
), a autenticação SSH falhará. Para ativar o SSH, primeiro devo executar passwd
para o novo usuário e inserir algo.
Eu tenho dois problemas ao fazer isso. Primeiro, requer entrada do usuário que não posso permitir neste script. Segundo, ele potencialmente permite que o usuário faça o login no terminal físico (se eles tiverem acesso físico, o que eles podem saber e saber a senha secreta - ok, isso é improvável).
A maneira que eu normalmente evito que os usuários efetuem login é configurando seu shell para /bin/false
, mas se eu fizer isso, o SSH também não funciona!
Alguém tem uma sugestão para escrever isso? Devo simplesmente usar sed
ou algo assim e substituir a linha relevante no arquivo de sombra por uma string de senha secreta criptografada predefinida? Ou há uma maneira melhor?
Felicidades =)
E ainda outra solução que não envolve um pipe é a seguinte (também encontrada na sombra, resp. shadow-utils package):
usermod -p '*' username
Você já tentou
passwd -d username
exclui a entrada de senha do usuário específico do /etc/shadow file
. Basicamente fazendo o login de usuário específico como senha vazia.
Ele só pode ser aplicado como usuário root ou sudo.
Bem, eu brinquei um pouco mais e descobri que, se eu transformar a senha em *
in /etc/shadow
, ela permitirá o SSH, mas desativará os logins de senha no TTY. Então, adicionarei isso como uma resposta à minha própria pergunta.
Isso foi adicionado ao meu script após a chamada useradd
:
cp /etc/shadow /etc/shadow.backup
sed -e "s/^\(${username}:\)[^:]*:/*:/" /etc/shadow.backup > /etc/shadow
Substitui a entrada de senha de sombra de um usuário específico por um *
.
Versões mais recentes do OpenSSH verificam o / etc / shadow para ver se a conta está desabilitada. Uma conta desativada tem um!, Então mudar isso para um * resolverá o problema.