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.