Em máquinas Debian antigas, pode-se emitir algo como:
echo '<username>:*'|chpasswd -e
para alterar o campo de senha do usuário ( <username> ) para * .
Agora estou ciente de
passwd -d <username> && passwd -l <username>
para obter um efeito semelhante e definir o campo de senha como ! . No entanto, em algumas configurações mais recentes do Ubuntu (em particular 10.04 LTS) isso leva o usuário a não conseguir mais entrar na máquina (por exemplo, via SSH e chave) - com: Your account has expired; please contact your system administrator. - mesmo que passwd(1) "avise "que isso é possível.
Agora, é exatamente isso que quero alcançar. Alterar manualmente o campo no arquivo /etc/shadow de ! para * corrige o problema, mas parece não haver nenhuma maneira de fazer o mesmo sem precisar manipular diretamente o arquivo shadow (por exemplo, com sed ) . chpasswd -e costumava ser uma alternativa conveniente, mas isso obviamente foi removido.
Então, o que estou procurando é uma variação de passwd -l que me permite escolher o token que é gravado no arquivo ou qualquer outro tipo de substituição para a funcionalidade exata que chpasswd -e oferecido.
NB: * já é usado para contas do sistema, e parece haver uma diferença semântica no PAM ou entre o! e o * no campo de senha.
Observe também: no Debian 5 e 6 chpasswd -e works. Portanto, a funcionalidade deve ter sido removida deliberadamente no Ubuntu. Eu testei o Ubuntu 9.10, 10.04 (eles não têm), 11.04 e 11.10 têm chpasswd -e .