Auf älteren Debian-Maschinen könnte man so etwas ausgeben:
echo '<username>:*'|chpasswd -e
um das Passwortfeld des Benutzers (<username>
) in *
zu ändern.
Jetzt bin ich mir dessen bewusst
passwd -d <username> && passwd -l <username>
um einen ähnlichen Effekt zu erzielen, setzen Sie das Passwortfeld auf !
. Bei einigen neueren Vanilla Ubuntu-Konfigurationen (insbesondere 10.04 LTS) kann sich der Benutzer jedoch nicht mehr auf dem Computer anmelden (z. B. über SSH und Schlüssel) - mit: Your account has expired; please contact your system administrator.
- obwohl passwd(1)
"warnt", dass dies möglich ist.
Genau das möchte ich aber erreichen. Das manuelle Ändern des Felds in der /etc/shadow
-Datei von !
in *
behebt das Problem, aber es scheint keinen skriptfähigen Weg zu geben, um dasselbe zu erreichen, ohne direkt mit dem shadow
zu experimentieren. Datei (zB mit sed
). chpasswd -e
war früher eine bequeme Alternative, aber das wurde offensichtlich entfernt.
Also, was ich suche, ist entweder eine Variation von passwd -l
, mit der ich das Token auswählen kann, das in die Datei geschrieben wird, oder eine andere Art von Ersatz für die genaue Funktionalität, die chpasswd -e
angeboten.
NB:*
wird bereits für Systemkonten verwendet, und es scheint einen semantischen Unterschied zu PAM oder was auch immer zwischen !
und *
im Passwortfeld zu geben .
Beachten Sie auch: unter Debian 5 und 6 chpasswd -e
funktioniert. Daher muss die Funktionalität in Ubuntu bewusst eingeschränkt worden sein. Ich habe Ubuntu 9.10, 10.04 getestet (sie haben es nicht), 11.04 und 11.10 haben chpasswd -e
.
Verwenden Sie ein einfaches Skript wie dieses, das ich gerade geschrieben habe:
#!/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
Die Verwendung des Skripts erfolgt auf eigenes Risiko.