Schlagwort-Archive: ssh

SSH Keys verwalten

Ich finde ein ssh-keymanager ist sinnvoll wenn man mehrere Benutzer und Linuxserver verwalten muss. Angenommen man hat um die 40 Entwickler die auf bis zu 100 verschiedene Server zugreifen müssen. Für jeden Entwickler ein Benutzerkonto auf dem jeweiligen System zu erstellen ist sehr zeitaufwendig und bedarf auch einer guten Dokumentation. Meine Idee ist es ein Benutzerkonto zu erstellen zum Beispiel ewl , unter diesem Benutzer können sich alle Entwickler anmelden. Vorraussetzung ist das der Publickey des Entwickler in der authorized_keys hinterlegt wurde. Das hinterlegen des Keys würde in diesem Fall der ssh-keymanager übernehmen.

Installation
Die Inbetriebnahme des ssh-keymanagers ist recht einfach. Den Ordner entpacken und in ein entsprechendes Verzeichniss ablegen, auf den der Apache zugreifen kann. Eine Mysqldatenbank erstellen, den mitgelieferten Dump einspielen und die Zugangsdaten in der inc/connect.inc.php hinterlegen. Nun die Webseite aufrufen und mit admin / itbasic anmelden.

Damit die Keys verteilt werden können muss der Apache Benutzer in der Lage sein eine shell auszuführen, gegebenenfalls muss dafür die /etc/passwd angepasst werden. Zusätzlich muss unter dem Apache Benutzer ein Public key erstellt werden, dieser wird in der Mysqldatenbank(Tabelle systemkey) hinterlegt.

Host und Linuxbenutzer anlegen
Ein neuer Host wird über „Host => hinzufügen“ hinzugefügt, wichtig ist hierbei das die korrekte IP Adresse angegeben wird. Nachdem der Host angelegt wurde, kann über „Host => anzeigen“ ein neuer Linuxbenutzer für den Host angelegt werden. Der Linuxbenutzer muss nun jedoch noch manuell auf dem eigentlichen System angelegt werden und der zuvor erstellte public key des Apache muss in der authorized_keys abgelegt werden.
Bevor der erste Abgleich der Keys stattfinden kann, muss man sich über den Apache Benutzer an dem neuen Host anmelden. Durch die Anmeldung wird der Neue Host zu den known_hosts hinzugefügt.

Benutzer / Benutzergruppe
Unter Benutzer gibt es die Möglichkeit einen neuen Benutzer anzulegen bzw sich alle Benutzer anzuzeigen zu lassen.
Für die einfachere Verwaltung können Benutzer zu Gruppen zusammengefasst werden, diese Benutzergruppe wird dann dem entsprechendem Linuxbenutzer zugewiesen.

Abgleich
Unter Abgeich => Systemkey wir lediglich für den einfachen Zugriff der Public Key des Apache Benutzers dargestellt.
Bei dem Punkt anzeigen werden alles Linuxbenutzer aufgelistet die aktualisiert werden müssen. Ändert zum Beispiel ein Benutzer seinen Public Key, wird der entsprechende Linuxbenutzer hier aufgeführt. Ein klick auf den Pfeil stößt den Abgleich der Keys an.

Das Layout könnte man sicherlich noch überarbeiten, aber ich denke fürs erste sollte es reichen. Wenn jemand einen Fehler findet oder einen Änderungswunsch hat, einfach eine email schreiben.

 

Serverübersicht

 

Benutzerübersicht

 

Download

Kleine Anmerkung
Da meine grafischen Fähigkeiten leider nur reichen um Bilder mit Hilfe von Gimp zurechtzuschneiden, benutze ich folgende Buttons: http://fortawesome.github.io/Font-Awesome/

[Centos] Authentication refused: bad ownership or modes for file /home/Benutzer/.ssh/authorized_keys

Ssh-keys sind sehr hilfreich, wenn es darum geht sich ohne Kennwort auf einem anderen Linux System anzumelden. Mit Hilfe von ssh-keygen erstellt man einen privaten und einen öffentlichen Schlüssel. Den öffentlichen Schlüssel hinterlegt man auf dem anderen System in der Datei /home/Benutzer/.ssh/authorized_keys .

Ein Kollege hatte seinen öffentlichen Schlüssel auf einem CentOS System hinterlegt. Als er sich auf dem System anmelden wollte erhielt er unter anderem die Meldung:

Authentication refused: bad ownership or modes for file /home/Benutzer/.ssh/authorized_keys

Ich fand heraus das der Ordner .ssh und die Datei authorized_keys zu viele Rechte hatte, andere Benutzer durften Ordner und Datei einsehen.

Ein chmod 700 .ssh und chmod 600 authorized_keys lösten das Problem.

[gerrit] ist sehr langsam bzw Verbindungen brechen ab

Ein Kollege wies mich auf etwas beim gerrit hin, was ich nun versuche hier wiederzugeben.

Der Gerrit Server macht bei einer SSH Verbindung einen Thread auf, in diesem Threadpool werden die Verbindungen abgearbeitet. Pro Thread werden nur x Verbindungen zugelassen und alle weiteren landen in einer Warteschleife. Nun kann es vorkommen das die Verbindungen nicht rechtzeitig abgearbeitet werden und einige Verbindungen nicht sauber geschlossen werden bzw brechen ab.
Die Anzahl der Threads ist unter anderem Abhängig von der Anzahl der CPU Kerne, mehr Kerne also mehr mögliche Verbindungen.

Werden Jenkins Server verwendet die auf den git Server zugreifen, verursachen diese ebenfalls Threads (Verbindungen).
Damit sich die Verbindungen der Jenkins Server und der Benutzer nicht in die quere können, kann für die Server ein Non-Interactive Users erstellt werden.

Dieser wird wie folgt erstellt, der Befehl muss von einem Benutzer mit Adminrechten ausgeführt werden.

cat /home/jenkins-user/.ssh/id_rsa.pub | ssh -p 29418 git.itbasic.de gerrit create-account –ssh-key – jenkins-user

Ein Non-Interactive kann sich nicht an der Weboberfläche anmelden, somit kann man weitere SSH Keys nur über die Datenbank hinzufügen. Hierfür müssen in der Tabelle account_ssh_keys die Felder ssh_public_key,valid,account_id und seq befüllt werden. Nur zu Info, die Spalte seq muss manuell hochgezählt werden.

Wenn ein neuer SSH Key hinzugefügt wurde muss noch das nachfolgende Kommando ausgeführt werden, da ansonsten ein Zugriff nicht möglich ist.

ssh -p29418 benutzer@git.itbasic.de gerrit flush-caches –cache=sshkeys

Auch hier muss der Benutzer Adminrechte haben.

[gerrit] aktuelle Verbindungen anzeigen

Falls man wissen möchte wie viele Verbindungen gerade zu einem gerrit Server offen sind, hilft folgendes Kommando:

ssh -p29418 git.itbasic.de gerrit show-connections

Der Benutzer der das Script ausführt muss in der Gruppe Administrators sein.

Als Ausgabe bekommt man die Werte: Session,Start,Idle,User,Remote Host

ssh Benutzer im Ordner einsperren

Seit der openssh Version 5 ist es möglich einen Benutzer der sich per ssh anmelden in einem Ordner einzusperren.

So bin ich vorgegangen:

Als erstes habe ich eine Gruppe angelegt namens sftponly. Den Benutzer bzw die Benutzerin lieschen habe ich der Gruppe hinzugefügt.

groupadd sftponly
useradd lieschen
usermod -aG sftponly lieschen

Die /etc/ssh/sshd_config habe ich wie folgt angepasst:

Subsystem sftp internal-sftp

Match Group sftponly
ChrootDirectory /srv/transfer
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

Im Anschluss der Anpassung den sshd Dienst neu starten.

Als letztes müssen noch die Ordner erstellt werden:

mkdir -p /srv/transfer
chown root:sftponly /srv/transfer
chmod 755 /srv/transfer
mkdir -p /srv/transfer/lieschen
chown lieschen:sftponly /srv/transfer/lieschen
chmod 700 /srv/transfer/lieschen

Ein Benutzer der in der Gruppe sftponly ist, darf sich nur per sftp mit dem Server verbinden. Bei der Anmeldung landet er im Ordner /srv/transfer. Dort sieht er zwar alle Ordner, kann jedoch nur auf seinen zugreifen.

Ich bin nach dieser Anleitung vorgegangen: http://meshfields.de/sftp-chroot-centos/