Ein 'leeres' Passwort in / etc / shadow schreiben

1

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

Die Konten sind speziell für SVN oder CVS. Der Eintrag in /home/${username}/.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...

Tatsächlicher Shell-Zugriff wird für diese Benutzer niemals gewährt - sie sind lediglich dazu da, den Zugriff auf unsere Quell-Repositorys über SSH zu ermöglichen.

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

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

Wenn ich die Schattendatei unverändert lasse (mit !), 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 sind Benutzereingaben erforderlich, die ich in diesem Skript nicht zulassen kann. Zweitens kann sich der Benutzer möglicherweise am physischen Terminal anmelden (wenn er physischen Zugriff hat, und das geheime Passwort kennt - okay, das ist also unwahrscheinlich).

Normalerweise verhindere ich, dass sich Benutzer anmelden /bin/false, indem ich ihre Shell auf "" stelle. Wenn ich das aber tue, funktioniert SSH auch nicht!

Hat jemand einen Vorschlag für die Skripterstellung? Sollte ich einfach sedoder so etwas verwenden und die entsprechende Zeile in der Shadow-Datei durch eine voreingestellte verschlüsselte geheime Passwort-Zeichenfolge ersetzen? Oder gibt es einen besseren Weg?

Prost =)

Paddy
quelle

Antworten:

1

Um Probleme beim Sperren oder Verwechseln der Schattendatei zu vermeiden, können Sie möglicherweise Folgendes verwenden

echo username:some_string | chpasswd

Genauer gesagt: Sie könnten das *im Passwortfeld verwenden, indem Sie dies tun:

echo "username:*" | chpasswd -e
basteln
quelle
Danke, genau das habe ich gesucht. Viel sauberer als mein Hack mit sedund offensichtlich robuster.
Paddy
3

Und noch eine andere Lösung, die keine Pipe beinhaltet, ist die folgende (ebenfalls im Paket shadow bzw. shadow-utils enthalten):

usermod -p '*' username
dev-zero
quelle
2

Hast du es versucht

passwd -d username

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

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

user2977819
quelle
1

Nun, ich habe ein bisschen mehr herumgespielt und festgestellt, dass, wenn ich das Passwort in " *In" /etc/shadowverwandle, SSH zugelassen wird, Kennwortanmeldungen auf dem TTY jedoch deaktiviert werden. Also werde ich dies als Antwort auf meine eigene Frage hinzufügen.

Dies wurde meinem Skript nach dem useraddAufruf hinzugefügt :

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

Es ersetzt die Shadow-Kennworteingabe eines bestimmten Benutzers durch ein *.

Paddy
quelle
0

Neuere Versionen von OpenSSH überprüfen / etc / shadow, um festzustellen, ob das Konto deaktiviert ist. Ein deaktiviertes Konto hat ein!, Daher wird das Problem gelöst, wenn Sie dieses in ein * ändern.

MattPark
quelle