Scripting eines 'leeren' Passworts in / etc / shadow

10167
paddy

Ich habe ein Skript geschrieben, um CVS- und SVN-Benutzer auf einem Linux-Server (Slackware 14.0) hinzuzufügen. Dieses Skript erstellt bei Bedarf den Benutzer und kopiert entweder den SSH-Schlüssel des Benutzers aus einem vorhandenen Shell-Konto oder generiert einen neuen SSH-Schlüssel.

Die Konten beziehen sich nur auf SVN oder CVS. Der Eintrag in /home/$/.ssh/authorized_keysbeginnt also mit (am Beispiel von CVS):

command="/usr/bin/cvs server",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa ....etc...etc...etc... 

Der tatsächliche Shell-Zugriff wird für diese Benutzer niemals gestattet. Sie dienen lediglich dazu, den Zugriff auf unsere Quell-Repositorys über SSH bereitzustellen.

Mein Problem ist, dass ich beim Hinzufügen eines neuen Benutzers /etc/shadowstandardmäßig ein leeres Passwort bekomme . Es sieht aus wie:

paddycvs:!:15679:0:99999:7::: 

Wenn ich die Schattendatei so belasse (mit der !), schlägt die SSH-Authentifizierung fehl. Um SSH zu aktivieren, muss ich zuerst passwdfür den neuen Benutzer ausführen und etwas eingeben.

Ich habe zwei Probleme damit. Erstens erfordert es Benutzereingaben, die ich in diesem Skript nicht zulassen kann. Zweitens ermöglicht es dem Benutzer möglicherweise, sich an dem physischen Endgerät anzumelden (wenn er über physischen Zugriff verfügt, was möglicherweise der Fall ist und das geheime Kennwort bekannt ist - okay, das ist unwahrscheinlich).

Normalerweise hindere ich Benutzer daran, sich einzuloggen /bin/false, indem Sie ihre Shell auf einstellen, aber wenn ich das tue, funktioniert SSH auch nicht!

Hat jemand einen Vorschlag für das Scripting? Soll ich einfach sedoder etwas verwenden und die entsprechende Zeile in der Schattendatei durch eine voreingestellte verschlüsselte geheime Kennwortzeichenfolge ersetzen? Oder gibt es einen besseren Weg?

Prost =)

1

5 Antworten auf die Frage

3
dev-zero

Und noch eine andere Lösung, bei der es sich nicht um eine Pipe handelt, ist die folgende (auch im Paket Schatten bzw. Schattenutensilien enthalten):

usermod -p '*' username 
2
user2977819

Hast du es versucht

passwd -d username 

es löscht die Passworteingabe des jeweiligen Benutzers aus der /etc/shadow file. Grundsätzlich muss der Benutzer sich als leeres Passwort anmelden.

Es kann nur als Root- oder Sudo-Benutzer erzwungen werden.

1
paddy

Nun, ich spielte um ein bisschen mehr, und ich fand, dass, wenn ich das Passwort in drehe *in /etc/shadow, es SSH erlaubt aber deaktiviert Passwort - Logins auf dem TTY. Ich füge dies als Antwort auf meine eigene Frage hinzu.

Dies wurde nach dem useraddAufruf zu meinem Skript hinzugefügt :

cp /etc/shadow /etc/shadow.backup sed -e "s/^\($:\)[^:]*:/\1*:/" /etc/shadow.backup > /etc/shadow 

Er ersetzt den Schattenkennworteintrag eines bestimmten Benutzers durch ein *.

1
tink

Um Probleme mit dem Sperren oder Durcheinander Ihrer Schattendatei zu vermeiden, können Sie dies möglicherweise verwenden

echo username:some_string | chpasswd 

Genauer gesagt: Sie können *das Feld im Kennwort tatsächlich folgendermaßen verwenden :

echo "username:*" | chpasswd -e 
Danke, genau das habe ich gesucht. Viel sauberer als mein Hack mit `sed` und offensichtlich robuster. paddy vor 11 Jahren 0
0
MattPark

Neuere Versionen von OpenSSH prüfen in / etc / shadow, ob das Konto deaktiviert ist. Ein deaktiviertes Konto hat ein!, Wenn Sie also ein * ändern, wird das Problem gelöst.