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_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...
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/shadow
standardmäß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 passwd
fü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 sed
oder 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 =)
sed
und offensichtlich robuster.Und noch eine andere Lösung, die keine Pipe beinhaltet, ist die folgende (ebenfalls im Paket shadow bzw. shadow-utils enthalten):
quelle
Hast du es versucht
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.
quelle
Nun, ich habe ein bisschen mehr herumgespielt und festgestellt, dass, wenn ich das Passwort in "
*
In"/etc/shadow
verwandle, 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
useradd
Aufruf hinzugefügt :Es ersetzt die Shadow-Kennworteingabe eines bestimmten Benutzers durch ein
*
.quelle
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.
quelle