Kurzüberblick

Teil 4 der Identity-Serie testet FreeIPA Passwort-Richtlinien praktisch: globale Policy, gruppenbasierte Policy, Mindestlänge, Zeichenklassen, History, Minimum Lifetime, Passwort-Ablauf, Admin-Reset, Failed-Login-Counter, Account Lockout, Unlock und Account Expiration.

Alle CLI-Kommandos und Ausgaben stehen als kopierbare Text- und Codeblöcke im Artikel. Screenshots zeigen nur die FreeIPA Web UI.

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

FreeIPA Web UI nach authentifiziertem Login. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

Lab-Aufbau

bash
Server: ipa01.example.test
Client: client01.example.test
Domain: example.test
Realm: EXAMPLE.TEST
FreeIPA: 4.13.3
SSSD: 2.13.1
SELinux: Enforcing

Welche Passwort-Policy FreeIPA verwendet

FreeIPA hat eine globale Passwort-Richtlinie und kann zusätzliche gruppenbasierte Policies verwenden. Im Lab wurde zuerst der reale Default ausgelesen.

bash
ipa pwpolicy-show
ipa pwpolicy-find
bash
Group: global_policy
Max lifetime (days): 90
Min lifetime (hours): 1
History size: 0
Character classes: 0
Min length: 8
Max failures: 6
Failure reset interval: 60
Lockout duration: 600
Grace login limit: -1
https://ipa01.example.test/ipa/ui/

FreeIPA Passwort-Policy-Übersicht mit global_policy und policy-users. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

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

Globale FreeIPA Passwort-Richtlinie. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

Gruppenbasierte Password Policy

Für die Tests wurde eine synthetische Gruppe policy-users erstellt und mit einer gruppenbasierten Richtlinie verbunden. Die Priorität bestimmt, welche Policy greift, wenn ein Benutzer in mehreren Policy-Gruppen enthalten ist.

bash
ipa group-add policy-users --desc='C2 password policy users'
ipa pwpolicy-add policy-users \
--priority=10 \
--minlength=12 \
--minclasses=2 \
--history=2 \
--minlife=0 \
--maxlife=1 \
--maxfail=3 \
--failinterval=30 \
--lockouttime=60
bash
Group: policy-users
Max lifetime (days): 1
Min lifetime (hours): 0
History size: 2
Character classes: 2
Min length: 12
Priority: 10
Max failures: 3
Failure reset interval: 30
Lockout duration: 60
Grace login limit: -1
https://ipa01.example.test/ipa/ui/

Gruppenbasierte FreeIPA Passwort-Richtlinie policy-users. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

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

FreeIPA Gruppe policy-users mit Testbenutzern. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

Mindestlänge und Zeichenklassen

Ein bewusst ungültiges Passwort wurde abgelehnt. Die Ausgabe stammt aus dem echten kinit-Passwortwechsel im Client-Lab.

bash
Password expired. You must change it now.
Password change rejected: Password does not contain enough character classes
Password not changed.

Password History

Nach zwei gültigen Änderungen wurde die Wiederverwendung eines früheren Passworts getestet. FreeIPA hat die Wiederverwendung abgelehnt.

bash
Password change rejected: New password was used previously. Please choose a different password.

Minimum Lifetime

Mit minlife 1 wurde eine sofortige erneute Benutzeränderung blockiert. Danach wurde minlife für die weiteren Tests wieder auf 0 gesetzt.

bash
Password change rejected: Current password's minimum life has not expired
Password not changed.

Passwort-Ablauf

Für policy-expired wurde der Passwort-Ablauf explizit in die Vergangenheit gesetzt. Beim nächsten kinit musste der Benutzer das Passwort ändern und erhielt danach ein Kerberos-Ticket.

bash
ipa user-mod policy-expired --password-expiration=20000101000000Z
bash
Password expired. You must change it now.
Ticket cache: KCM:1001
Default principal: policy-expired@EXAMPLE.TEST
https://ipa01.example.test/ipa/ui/

FreeIPA Benutzer policy-expired für Passwort-Ablauf. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

Administrator-Reset

Ein Admin-Reset mit ipa passwd wurde separat geprüft. Der nächste Login des Benutzers musste das temporäre Passwort ändern.

bash
ipa passwd policy-reset
https://ipa01.example.test/ipa/ui/

FreeIPA Benutzer policy-reset nach Admin-Reset. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

Fehlgeschlagene Logins und Account Lockout

Der Lockout-Test trennt zwei Phasen: zuerst Fehlversuche unterhalb der Schwelle, dann drei konsekutive Fehlversuche bis zum Lockout.

bash
attempt_1_rc=1
attempt_2_rc=1
valid_before_threshold_rc=0
attempt_3_rc=1
attempt_4_rc=1
attempt_5_rc=1
valid_after_threshold_rc=1
bash
Account disabled: False
Server: ipa01.example.test
Failed logins: 3
Last failed authentication: 20260919225833Z
https://ipa01.example.test/ipa/ui/

FreeIPA Benutzer policy-lock nach Lockout-Test und Recovery. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

Account entsperren

Der gesperrte Benutzer wurde mit ipa user-unlock wieder freigegeben. Danach funktionierten kinit und SSH wieder.

bash
ipa user-unlock policy-lock
kinit policy-lock
ssh policy-lock@client01.example.test

Account Expiration

Account Expiration wurde unabhängig vom Passwort-Ablauf getestet. Die Identität war weiterhin auflösbar, aber kinit und SSH wurden abgelehnt.

bash
ipa user-mod policy-account-expired --principal-expiration=20000101000000Z
bash
policy-account-expired:*:40800010:40800010:Policy AccountExpired:/home/policy-account-expired:/bin/bash
uid=40800010(policy-account-expired) gid=40800010(policy-account-expired) groups=40800010(policy-account-expired),40800003(policy-users)
kinit: Client's entry in database has expired while getting initial credentials
ssh_rc=5
https://ipa01.example.test/ipa/ui/

FreeIPA Benutzer policy-account-expired mit Account-Ablauf. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

Disabled vs Locked vs Password Expired vs Account Expired

Disabled User

Identity Lookup
Ja
kinit
Credentials revoked
SSH
Fehlschlag
Recovery
ipa user-enable

Locked User

Identity Lookup
Ja
kinit
Fehlschlag nach Schwelle
SSH
Fehlschlag im finalen Lauf
Recovery
ipa user-unlock oder Ablauf der Sperre

Password Expired

Identity Lookup
Ja
kinit
Passwortwechsel erforderlich
SSH
Nach Änderung möglich
Recovery
Benutzeränderung oder Admin-Reset

Account Expired

Identity Lookup
Ja
kinit
Entry expired
SSH
Fehlschlag
Recovery
Principal Expiration anpassen
https://ipa01.example.test/ipa/ui/

Deaktivierter FreeIPA Benutzer policy-disabled. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

Was sieht der Linux-Client?

Der Client wurde mit SSSD, Kerberos und SSH geprüft. Wichtig: Identity Resolution über getent oder id ist nicht identisch mit erlaubter Authentifizierung.

bash
getent passwd policy-valid
id policy-valid
kinit policy-valid
klist
ssh policy-valid@client01.example.test
sssctl user-checks policy-valid
journalctl -u sssd --no-pager
https://ipa01.example.test/ipa/ui/

FreeIPA Benutzer policy-valid mit angewendeter Passwort-Policy. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.

Ergebniskontrolle

Global Policy

Prüfung
pwpolicy-show/find
Erwartetes Ergebnis
Defaultwerte sichtbar
Status
PASS

Group Policy

Prüfung
policy-users
Erwartetes Ergebnis
Gruppenpolicy greift
Status
PASS

Mindestlänge

Prüfung
ungültige Änderung
Erwartetes Ergebnis
Policy-Verstoß wird abgelehnt
Status
PASS

History

Prüfung
Passwort wiederverwenden
Erwartetes Ergebnis
Wiederverwendung wird abgelehnt
Status
PASS

Expiration

Prüfung
Passwort ablaufen lassen
Erwartetes Ergebnis
kinit erzwingt Änderung
Status
PASS

Admin Reset

Prüfung
ipa passwd
Erwartetes Ergebnis
Benutzer muss ändern
Status
PASS

Lockout

Prüfung
Fehlversuche
Erwartetes Ergebnis
Benutzer wird gesperrt
Status
PASS

Recovery

Prüfung
ipa user-unlock
Erwartetes Ergebnis
Login funktioniert wieder
Status
PASS

Account Expiration

Prüfung
Principal abgelaufen
Erwartetes Ergebnis
kinit/SSH schlagen fehl
Status
PASS

Web UI

Prüfung
Trusted-CA Login
Erwartetes Ergebnis
Screenshots authentifiziert
Status
PASS

CLI

Prüfung
Code/Text statt Terminalbilder
Erwartetes Ergebnis
Kopierbare Evidenz
Status
PASS

Grenzen dieses Labs

  • Die Web-UI-Screenshots nutzten wegen unprivilegiertem Host-Port einen dokumentierten Lab-Port-Workaround.

  • Die Werte sind bewusst kurz und synthetisch gewählt, damit Lockout und Ablauf reproduzierbar sind.

  • Produktive Policies brauchen abgestimmte Helpdesk-, Recovery-, MFA- und Notfallprozesse.

Identity Management mit FreeIPA und Keycloak

Vorheriger Teil: FreeIPA Benutzer und Gruppen verwalten. Einen nächsten Teil verlinken wir erst, wenn er veröffentlicht ist.