Script de uma senha 'vazia' em / etc / shadow

1

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 =)

    
por paddy 09.12.2012 / 23:49

5 respostas

1

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
    
por 10.12.2012 / 03:30
3

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
    
por 29.05.2013 / 16:39
2

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.

    
por 21.01.2014 / 06:31
1

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 * .

    
por 10.12.2012 / 00:49
0

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.

    
por 29.05.2013 / 17:37