Após uma série de tentativas de invasão, eu gerava novas senhas aleatórias para todos os usuários no meu servidor LTS Ubuntu 12.04.2 executando o Virtualmin e então, como root, usava o chpasswd para alterar suas senhas. Eu tinha alguns nomes de usuário errados, e o chpasswd detectou isso e relatou corretamente as linhas com os nomes errados, que eu corrigi.
Então comecei a receber feedback dos usuários de que suas senhas não foram alteradas ...
Bem, parece que o chpasswd não parece ter feito nada - mas também não relatou nenhum tipo de erro, seja na linha de comando ou em qualquer log que encontrei.
O passwd muda as senhas - mas infelizmente o Ubuntu não parece aceitar a opção --stdin, então eu teria que fazer todas as mudanças de senha manualmente, uma por vez - para quase uma centena de contas. (E eu posso querer fazer isso de novo em algum momento ...)
O chpasswd está simplesmente quebrado ou há alguma maneira de fazer isso funcionar? Ou existe algum substituto para isso?
E - devo estar relatando uma deficiência de recursos em algum lugar? Não acredito que "falhar silenciosamente" seja um bom resultado. Talvez haja algo no meu sistema (que usa o Virtualmin para gerenciamento de domínio, mas é completamente bajulador) que o impede de funcionar - mas, se for assim, o chpasswd deve ser capaz de detectar isso e pelo menos dizer que falhou em agir.
Mas o passwd funciona perfeitamente, então é claramente possível alterar as senhas a partir da linha de comando ... De uma forma ou de outra, parece uma deficiência de característica objetiva ("bug") para mim - devo denunciá-lo, e se sim, onde?
Atualização: ainda mais estranho - alguns usuários estão relatando que suas senhas foram alteradas e outras estão relatando que não. Um usuário que possui duas contas tem uma senha alterada, uma não. Eu corri o arquivo novamente, verificando se todas as contas estavam lá, e depois passei pelo chpasswd novamente ... os mesmos resultados!
Estou perplexo. Idéias?
UPDATE: Aqui está a linha de comando que estou usando agora:
cat passwords.txt | chpasswd
Se eu usar -S - não vejo saída - nada! Então parece que não está recebendo nada ... mas se eu apenas catar o arquivo:
cat passwords.txt
Eu recebo:
senha do usuário
user2: hunter2
[... etc ...]
Mais: Se eu alterar a primeira linha para NONuser (um usuário inválido), obtenho um erro perfeitamente bom:
chpasswd: (user NONuser) pam_chauthtok() failed, error:
Authentication token manipulation error
chpasswd: (line 1, user NONuser) password not changed
Portanto, é de fato lendo e processando o arquivo, pelo menos na medida em que detecta não-usuários!
Ah e $? é 0.