Substituição de “chpasswd -e” não interativo?

6

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 .

    
por 0xC0000022L 23.02.2012 / 16:58

1 resposta

2

Use um script simples como este que acabei de escrever:

#!/bin/bash

USER=$1
if [[ -z "$USER" ]]; then
  echo "From which user should I clear the password?"
  read USER
fi
if chpasswd -e -h > /dev/null 2>&1; then
  echo "$USER:*"|chpasswd -e
else
  passwd -d $USER
  cp /etc/shadow /etc/shadow.old
  USEROLD=$USER::
  USERNEW=$USER:*:
  sed -i "s/$USEROLD/$USERNEW/g" /etc/shadow.old
  cp /etc/shadow.old /etc/shadow
fi

O uso do script é por sua conta e risco.

    
por Bas van den Dikkenberg 19.03.2012 / 20:45