usuários de tubulação para alterar suas senhas

1

Estou tentando fazer um comando bash alterar todas as senhas do usuário para x.

awk -F: ' >= 1000 &&  != "nobody" {print }' /etc/passwd

Posso canalizar os usuários retornados para passwd ? Quero dizer, isso vai exigir algum tipo de loop? Se for esse o caso, por favor, faça um exemplo de como fazer isso?

    
por Sam Hamblin 22.11.2015 / 18:22

2 respostas

3

passwd não lê senhas de forma não interativa, via STDIN gerado por pipe, como alternativa você pode usar chpasswd que lê a senha via STDIN mas tem um problema de segurança.

O problema é que chpasswd espera que as senhas sejam dadas em texto claro, seguindo o formato:

username:password

Para nos tornar um pouco menos explícitos, podemos salvar as senhas sequencialmente em linhas separadas em um arquivo correspondente à saída dada pelo comando awk -F: ' >= 1000 && != "nobody" {print }' /etc/passwd . Lembre-se de que você precisa manter a sequência da saída do comando enquanto salva as senhas no arquivo.

Em seguida, podemos usar paste para gerar o formato chpasswd em seu STDIN.

Por exemplo:

paste -d: <(awk -F: ' >= 1000 &&  != "nobody" {print }' /etc/passwd)\
          /password/file | sudo chpasswd

Aqui /password/file contém as senhas relevantes.

Como medida de segurança, podemos remover o arquivo /password/file depois.

    
por heemayl 22.11.2015 / 18:55
0

É possível com usermod -p PASSWD USERNAME e while loop. O problema é que o PASSWD não pode estar em texto simples, tem que ser senha criptografada. Para esse propósito, você pode usar mkpasswd . Dessa forma, "newPassString" é criptografado e permanece o mesmo para todos os usuários. Veja um exemplo do que pode ser feito em apenas uma linha de código.

$ cat userlist |  while read USERNAME; do echo "$USERNAME";sudo usermod -p "$(mkpasswd "newPassString")" "$USERNAME"  ;done
tester
[sudo] password for xieerqi: 
testuser
[sudo] password for xieerqi: 

Observe que preciso inserir sudo para cada chamada de sudo - essa é minha configuração pessoal. No arquivo /etc/sudoers inalterado, o tempo limite é de 15 minutos por padrão, portanto, é necessário inseri-lo apenas uma vez.

Uma abordagem melhor é colocar o código em um script e chamar com parâmetros $ 1 como filename e $ 2 como nova string de senha:

 xieerqi:$ cat passScript.sh                                                                                        
#!/bin/bash
while read USERNAME; do
   echo "$USERNAME";
   usermod -p "$(mkpasswd "")" "$USERNAME"  
done < ""

xieerqi:$ chmod +x passScript.sh                                                                                   

xieerqi:$ sudo ./passScript.sh  userlist myNewPass                                                                 
[sudo] password for xieerqi: 
tester
testuser

xieerqi:$ su testuser
Password: 
testuser@eagle:/home/xieerqi$ 
    
por Sergiy Kolodyazhnyy 22.11.2015 / 20:06