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
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_keys
beginnt 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/shadow
standardmäß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 passwd
fü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 sed
oder etwas verwenden und die entsprechende Zeile in der Schattendatei durch eine voreingestellte verschlüsselte geheime Kennwortzeichenfolge ersetzen? Oder gibt es einen besseren Weg?
Prost =)
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
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.
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 useradd
Aufruf 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 *
.
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
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.