Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
howtos:sshprincipals [2023/07/21 10:32] – morquai | howtos:sshprincipals [2023/07/26 10:11] (aktuell) – [Die Idee] morquai | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
Die Verteilung von Public Keys auf die entsprechenden Server oder die Notwendigkeit der erneuten Signatur wenn sich an der Liste der erlaubten User etwas ändert, stellen Hindernisse dar, die beim Benutzer Unmut auslösen können. Wie hier Abhilfe geschaffen wird, zeige ich Ihnen im Folgenden.\\ | Die Verteilung von Public Keys auf die entsprechenden Server oder die Notwendigkeit der erneuten Signatur wenn sich an der Liste der erlaubten User etwas ändert, stellen Hindernisse dar, die beim Benutzer Unmut auslösen können. Wie hier Abhilfe geschaffen wird, zeige ich Ihnen im Folgenden.\\ | ||
===== Die Idee ===== | ===== Die Idee ===== | ||
- | Im How-to [[.:howtos: | + | Im How-to [[.: |
ssh-keygen -s id_rsa_userca -I " | ssh-keygen -s id_rsa_userca -I " | ||
Mit " | Mit " | ||
Zeile 10: | Zeile 10: | ||
===== Die Umsetzung ===== | ===== Die Umsetzung ===== | ||
Die erforderlichen Änderungen, | Die erforderlichen Änderungen, | ||
- | Betrachten wir die Möglichkeiten, | + | Betrachten wir die Möglichkeiten, |
- | **Beachten Sie: Diese Möglichkeiten bieten sich nur, wenn signierte Public Keys zum Einsatz kommen**\\ | + | | |
- | Die angesprochene | + | Die angesprochene |
- | Jede Zeile besteht aus zwei Spalten, die erste enthält | + | Hier ein Beispiel für den Zugriff auf den User " |
- | mysql dba,developer | + | dba |
+ | developer | ||
+ | Da " | ||
+ | mysql | ||
+ | dba | ||
+ | developer | ||
+ | Die Anzahl der Konfiguraitonsdateien kann, je nach Erfordernissen, | ||
+ | AuthorizedPrincipalsFile accepts the tokens %%, %h, %U, and %u. | ||
+ | %% A literal ‘%’. | ||
+ | %h The home directory of the user. | ||
+ | %U The numeric user ID of the target user. | ||
+ | %u The username. | ||
+ | Um eine ausufernde Anzahl von Konfigurationsdateien zu vermeiden bietet OpenSSH freundlicherweise auch die Möglichkeit, | ||
+ | ===== Vorbereitung des SSH Servers ===== | ||
+ | Für die Umsetzung müssen folgende Einträge in der sshd_config gemacht werden: | ||
+ | # Liste der erlaubten Certification Authorities | ||
+ | TrustedUserCAKeys / | ||
+ | |||
+ | # Datei, die zurückgezogene | ||
+ | RevokedKeys / | ||
+ | |||
+ | # Name der zentralen Konfigurationsdatei. " | ||
+ | # dass keine solche existiert | ||
+ | AuthorizedPrincipalsFile none | ||
+ | |||
+ | # Name und Parameter des Skripts, dass die Konfiguration dynamisch ermittelt | ||
+ | # Es müssen absolute Pfadangaben benutzt | ||
+ | # Der erste Parameter für das Skript ist der Name der Konfiguationsdatei. | ||
+ | # | ||
+ | AuthorizedPrincipalsCommand / | ||
+ | |||
+ | # Hier wird der Benutzer definiert, unter dessen ID das Skript ausgeführt wird. Es wird | ||
+ | # | ||
+ | # | ||
+ | # Die Ausführung als root birgt Sicherheisrisiken. | ||
+ | # Der Benutzer muss Leserechte für die Konfigurationsdatei besitzen | ||
+ | AuthorizedPrincipalsCommandUser principals | ||
+ | |||
+ | Die Konfigurationsdatei enthält Zeilen mit je zwei Spalten, Spalte 1 entspricht dem User Namen, alles ab Spalte zwei definiert, durch Kommata getrennt, die zuässigen Principals. Bei den Namen der Principals dürfen aus diesen Grund keine Kommata benutzt werden!\\ | ||
+ | Weiter unten werde ich an ein Beispiel einer solchen Konfigurationsdatei vorstellen. | ||
+ | |||
+ | Das Skript leistet folgendes: Es ermittelt aus allen Zeilen, deren erste Spalte gleich dem Benutzernamen | ||
+ | # | ||
+ | # echo $0 Invoked with " | ||
+ | awk -v user=" | ||
+ | | ||
+ | {\ | ||
+ | | ||
+ | }\ | ||
+ | | ||
+ | {\ | ||
+ | # remember user was found and print $0 starting at $2 \ | ||
+ | printf " | ||
+ | }\ | ||
+ | | ||
+ | {\ | ||
+ | # if the user was found allow the user to be a valid principal \ | ||
+ | if(printed==1){print "," | ||
+ | }' " | ||
+ | | sed ' | ||
+ | | sort -u | ||
+ | |||
+ | |||
+ | Damit diese Einstellungen wirksam werden, muss der SSH Server neu gestartet werden. Die angegebenen Dateien und Benutzer müssen existieren.\\ \\ | ||
+ | |||
+ | Sehen wir uns nun ein Beispiel | ||
+ | Beide Teams sollen Zugriff | ||
+ | |auf den User mysql |\\ | ||
+ | |dev1 zusätzlich zum User app1 |\\ | ||
+ | |dev2 zusätzlich zum User app2 |\\ | ||
+ | |das DBA Team benötigt ebenfalls | ||
+ | |Weiterhin benötigen wir in der Liste alle Developer selbst, ihre Benutzernamen lauten user1, user2, user3 und user4.|\\ | ||
+ | Die Konfigurationsdatei / | ||
+ | | ||
+ | # duplicate user entries will be combined, | ||
+ | # duplicate principals will be used only once | ||
+ | # user name will be added as separate principal | ||
+ | # | ||
+ | app1 dev1 | ||
+ | app2 dev2 | ||
+ | | ||
+ | mysql dba | ||
+ | user1 | ||
+ | user2 | ||
+ | user3 | ||
+ | user4 | ||
+ | Testen wir nun das Skript\\ | ||
+ | sudo -u principals / | ||
+ | | ||
+ | dev1 | ||
+ | dev2 | ||
+ | mysql | ||
+ | sudo -i principals / | ||
+ | app1 | ||
+ | dev1 | ||
+ | sudo -i principals / | ||
+ | app2 | ||
+ | dev2 | ||
+ | sudo -i principals / | ||
+ | user3 | ||
+ | Voila, eine Konfigurationsdatei löst das Problem erneut signieren zu müssen, falls Teams Zugriff auf weitere Benutzer benötigen. Nehmen wir an, " | ||
+ | ssh-keygen -s id_rsa_userca -I " | ||