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.

https://ipa01.example.test/ipa/ui/

FreeIPA Web UI nach authentifiziertem Login. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.

Lab-Aufbau

bash
Server: ipa01.example.test
Clients: client01.example.test, client02.example.test
Domain: example.test
Realm: EXAMPLE.TEST
FreeIPA: 4.13.3
SSSD IPA: 2.13.1
SELinux: 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.

https://ipa01.example.test/ipa/ui/

FreeIPA HBAC-Regelübersicht mit deaktiviertem allow_all und eigener SSH-Regel. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.

https://ipa01.example.test/ipa/ui/

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.

bash
ipa hbacrule-disable allow_all
ipa 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.test
ipa 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-users
ipa hbacrule-add-host linux-ssh-users-to-linux-servers-sshd --hostgroups=linux-servers
ipa hbacrule-add-service linux-ssh-users-to-linux-servers-sshd --hbacsvcs=sshd
bash
Rule name: linux-ssh-users-to-linux-servers-sshd
Enabled: True
User Groups: linux-ssh-users
Host Groups: linux-servers
HBAC Services: sshd
https://ipa01.example.test/ipa/ui/

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.

https://ipa01.example.test/ipa/ui/

FreeIPA Benutzergruppe linux-ssh-users. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.

https://ipa01.example.test/ipa/ui/

FreeIPA Benutzer hbac-allowed als erlaubter SSH-Benutzer. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.

https://ipa01.example.test/ipa/ui/

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.

https://ipa01.example.test/ipa/ui/

FreeIPA Hostgruppe linux-servers mit Client-Hosts. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.

https://ipa01.example.test/ipa/ui/

FreeIPA Host client01.example.test. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.

https://ipa01.example.test/ipa/ui/

FreeIPA Host client02.example.test. Screenshot aus dem isolierten FreeIPA-C3-HBAC-Lab.

https://ipa01.example.test/ipa/ui/

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.

bash
ipa hbactest --user=hbac-allowed --host=client01.example.test --service=sshd
ipa hbactest --user=hbac-denied --host=client01.example.test --service=sshd
ipa hbactest --user=hbac-allowed --host=client02.example.test --service=sshd
bash
Access granted: True
Matched rules: linux-ssh-users-to-linux-servers-sshd
Access granted: False
Not 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.

bash
hbac-allowed
uid=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.

bash
hbac-denied:*:1847600004:1847600004:HBAC Denied:/home/hbac-denied:/bin/bash
uid=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.

bash
ipa group-add-member linux-ssh-users --users=hbac-denied
ipa group-remove-member linux-ssh-users --users=hbac-denied
bash
hbac-denied
uid=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.

bash
ipa hostgroup-add-member linux-servers --hosts=client02.example.test
bash
hbac-allowed
uid=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.

bash
ipa hbacrule-disable linux-ssh-users-to-linux-servers-sshd
ipa hbacrule-enable linux-ssh-users-to-linux-servers-sshd
sss_cache -E
bash
user: hbac-allowed
action: acct
service: sshd
testing pam_acct_mgmt
pam_acct_mgmt: Success
hbac-allowed
client01.example.test
/home/hbac-allowed

Ergebniskontrolle

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.