Kurzüberblick
Teil 5 der Identity-Serie testet FreeIPA Host-Based Access Control praktisch. Ziel ist nicht nur eine schöne Regel im Web UI, sondern belegbares Verhalten auf Linux-Clients: Wer darf per SSH auf welchen Host, wer wird abgewiesen und was passiert bei Gruppen-, Hostgruppen- und Regeländerungen?
Die CLI-Ausgaben stehen als Text- und Codeblöcke im Artikel. Screenshots zeigen die FreeIPA Web UI und stammen ausschließlich aus dem C3-HBAC-Lab.
FreeIPA Web UI nach authentifiziertem Login. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
Lab-Aufbau
Server: ipa01.example.testClients: client01.example.test, client02.example.testDomain: example.testRealm: EXAMPLE.TESTFreeIPA: 4.13.3SSSD IPA: 2.13.1SELinux: Enforcing
Warum allow_all nicht als Zielzustand taugt
FreeIPA bringt eine allow_all-Regel mit. Für gezielte Steuerung muss diese Regel deaktiviert oder bewusst eingeordnet werden. Im Lab wurde allow_all deaktiviert und durch eine spezifische SSH-Regel ersetzt.
FreeIPA HBAC-Regelübersicht mit deaktiviertem allow_all und eigener SSH-Regel. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
FreeIPA HBAC-Regel allow_all ist deaktiviert. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
HBAC-Regel für SSH bauen
Die Regel verbindet drei Dinge: eine Benutzergruppe, eine Hostgruppe und den Dienst sshd. Nur wenn alle drei Bedingungen passen, darf der Benutzer per SSH auf den Zielhost.
ipa hbacrule-disable allow_allipa group-add linux-ssh-users --desc='Users allowed to access Linux servers over SSH'ipa hostgroup-add linux-servers --desc='Linux servers targeted by HBAC SSH rule'ipa hostgroup-add-member linux-servers --hosts=client01.example.testipa hbacrule-add linux-ssh-users-to-linux-servers-sshd \--desc='Allow linux-ssh-users to use sshd on linux-servers'ipa hbacrule-add-user linux-ssh-users-to-linux-servers-sshd --groups=linux-ssh-usersipa hbacrule-add-host linux-ssh-users-to-linux-servers-sshd --hostgroups=linux-serversipa hbacrule-add-service linux-ssh-users-to-linux-servers-sshd --hbacsvcs=sshd
Rule name: linux-ssh-users-to-linux-servers-sshdEnabled: TrueUser Groups: linux-ssh-usersHost Groups: linux-serversHBAC Services: sshd
FreeIPA HBAC-Regel für linux-ssh-users, linux-servers und sshd. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
Benutzergruppe und Benutzer
Der Benutzer hbac-allowed ist Mitglied von linux-ssh-users. Der Benutzer hbac-denied existiert ebenfalls und ist über SSSD auflösbar, erhält aber zunächst keine erlaubende Gruppenmitgliedschaft.
FreeIPA Benutzergruppe linux-ssh-users. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
FreeIPA Benutzer hbac-allowed als erlaubter SSH-Benutzer. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
FreeIPA Benutzer hbac-denied ohne erlaubende Gruppenmitgliedschaft. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
Hostgruppe und SSH-Dienst
Die Hostgruppe linux-servers enthält zunächst client01.example.test. client02.example.test wird später bewusst ergänzt, um zu prüfen, ob eine Hostgruppenänderung den realen SSH-Zugriff ändert.
FreeIPA Hostgruppe linux-servers mit Client-Hosts. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
FreeIPA Host client01.example.test. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
FreeIPA Host client02.example.test. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
FreeIPA HBAC Service sshd. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.
Vorhersage mit ipa hbactest
ipa hbactest ist hilfreich, reicht aber nicht als Endabnahme. Im Lab wurde es als Vorprüfung genutzt und danach mit echten SSH-Verbindungen verifiziert.
ipa hbactest --user=hbac-allowed --host=client01.example.test --service=sshdipa hbactest --user=hbac-denied --host=client01.example.test --service=sshdipa hbactest --user=hbac-allowed --host=client02.example.test --service=sshd
Access granted: TrueMatched rules: linux-ssh-users-to-linux-servers-sshdAccess granted: FalseNot matched rules: linux-ssh-users-to-linux-servers-sshd
Echter SSH-Allow-Test
Der erlaubte Benutzer konnte per SSH auf client01.example.test zugreifen. Damit ist belegt, dass FreeIPA, SSSD, PAM und OpenSSH zusammen funktionieren.
hbac-alloweduid=1847600003(hbac-allowed) gid=1847600003(hbac-allowed) groups=1847600003(hbac-allowed),1847600006(linux-ssh-users)client01.example.test/home/hbac-allowed
Echter SSH-Deny-Test
Der nicht berechtigte Benutzer war über getent und id sichtbar, wurde aber für SSH nicht zugelassen. Das ist wichtig: Identity Lookup ist nicht dasselbe wie erlaubter Login.
hbac-denied:*:1847600004:1847600004:HBAC Denied:/home/hbac-denied:/bin/bashuid=1847600004(hbac-denied) gid=1847600004(hbac-denied) groups=1847600004(hbac-denied)
Gruppenänderung wirkt auf SSH
Nach Aufnahme von hbac-denied in linux-ssh-users funktionierte der SSH-Zugriff. Nach Entfernen der Mitgliedschaft wurde der Zugriff wieder verweigert.
ipa group-add-member linux-ssh-users --users=hbac-deniedipa group-remove-member linux-ssh-users --users=hbac-denied
hbac-denieduid=1847600004(hbac-denied) gid=1847600004(hbac-denied) groups=1847600004(hbac-denied),1847600006(linux-ssh-users)client01.example.test/home/hbac-denied
Hostgruppenänderung wirkt auf SSH
client02.example.test war anfangs nicht in linux-servers und wurde abgewiesen. Nach Aufnahme des Hosts in die Hostgruppe funktionierte der Zugriff.
ipa hostgroup-add-member linux-servers --hosts=client02.example.test
hbac-alloweduid=1847600003(hbac-allowed) gid=1847600003(hbac-allowed) groups=1847600003(hbac-allowed),1847600006(linux-ssh-users)client02.example.test/home/hbac-allowed
Regel deaktivieren und wieder aktivieren
Das Deaktivieren der eigenen HBAC-Regel sperrte den Zugriff. Nach Reaktivierung und SSSD-Refresh war der Zugriff wieder erlaubt.
ipa hbacrule-disable linux-ssh-users-to-linux-servers-sshdipa hbacrule-enable linux-ssh-users-to-linux-servers-sshdsss_cache -E
user: hbac-allowedaction: acctservice: sshdtesting pam_acct_mgmtpam_acct_mgmt: Successhbac-allowedclient01.example.test/home/hbac-allowed
Ergebniskontrolle
| Prüfbereich | Prüfung | Erwartetes Ergebnis | Status |
|---|---|---|---|
| HBAC | allow_all deaktiviert | Pauschalzugriff ist aus | PASS |
| HBAC | Eigene SSH-Regel | Benutzergruppe, Hostgruppe und sshd sind verknüpft | PASS |
| Vorprüfung | ipa hbactest | Allow- und Deny-Fälle stimmen | PASS |
| SSH | Erlaubter Benutzer | Login auf erlaubtem Host funktioniert | PASS |
| SSH | Nicht erlaubter Benutzer | Identity Lookup ja, SSH nein | PASS |
| SSH | Host außerhalb Hostgruppe | Login wird verweigert | PASS |
| Änderungen | Benutzergruppe ändern | SSH-Zugriff folgt Gruppenmitgliedschaft | PASS |
| Änderungen | Hostgruppe ändern | SSH-Zugriff folgt Hostgruppenmitgliedschaft | PASS |
| Recovery | Regel deaktivieren/aktivieren | Deny und Wiederherstellung funktionieren | PASS |
| Web UI | Authentifizierte Screenshots | HBAC-Objekte sichtbar | PASS |
HBAC
- Prüfung
- allow_all deaktiviert
- Erwartetes Ergebnis
- Pauschalzugriff ist aus
- Status
- PASS
HBAC
- Prüfung
- Eigene SSH-Regel
- Erwartetes Ergebnis
- Benutzergruppe, Hostgruppe und sshd sind verknüpft
- Status
- PASS
Vorprüfung
- Prüfung
- ipa hbactest
- Erwartetes Ergebnis
- Allow- und Deny-Fälle stimmen
- Status
- PASS
SSH
- Prüfung
- Erlaubter Benutzer
- Erwartetes Ergebnis
- Login auf erlaubtem Host funktioniert
- Status
- PASS
SSH
- Prüfung
- Nicht erlaubter Benutzer
- Erwartetes Ergebnis
- Identity Lookup ja, SSH nein
- Status
- PASS
SSH
- Prüfung
- Host außerhalb Hostgruppe
- Erwartetes Ergebnis
- Login wird verweigert
- Status
- PASS
Änderungen
- Prüfung
- Benutzergruppe ändern
- Erwartetes Ergebnis
- SSH-Zugriff folgt Gruppenmitgliedschaft
- Status
- PASS
Änderungen
- Prüfung
- Hostgruppe ändern
- Erwartetes Ergebnis
- SSH-Zugriff folgt Hostgruppenmitgliedschaft
- Status
- PASS
Recovery
- Prüfung
- Regel deaktivieren/aktivieren
- Erwartetes Ergebnis
- Deny und Wiederherstellung funktionieren
- Status
- PASS
Web UI
- Prüfung
- Authentifizierte Screenshots
- Erwartetes Ergebnis
- HBAC-Objekte sichtbar
- Status
- PASS
Grenzen dieses Labs
Das Lab testet HBAC für SSH und den Dienst sshd. Andere Dienste müssen separat geprüft werden.
Produktive Umgebungen brauchen ein Rollenmodell, Break-Glass-Zugänge und dokumentierte Recovery-Prozesse.
Die Web-UI-Screenshots nutzten einen lokalen CONNECT-Proxy, damit der Browser den kanonischen FreeIPA-Hostnamen ohne privilegierten Port nutzen konnte.






