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.
FreeIPA Web UI nach authentifiziertem Login. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.
Lab-Aufbau
Server: ipa01.example.testClient: client01.example.testDomain: example.testRealm: EXAMPLE.TESTFreeIPA: 4.13.3SSSD: 2.13.1SELinux: 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.
ipa pwpolicy-showipa pwpolicy-find
Group: global_policyMax lifetime (days): 90Min lifetime (hours): 1History size: 0Character classes: 0Min length: 8Max failures: 6Failure reset interval: 60Lockout duration: 600Grace login limit: -1
FreeIPA Passwort-Policy-Übersicht mit global_policy und policy-users. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.
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.
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
Group: policy-usersMax lifetime (days): 1Min lifetime (hours): 0History size: 2Character classes: 2Min length: 12Priority: 10Max failures: 3Failure reset interval: 30Lockout duration: 60Grace login limit: -1
Gruppenbasierte FreeIPA Passwort-Richtlinie policy-users. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.
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.
Password expired. You must change it now.Password change rejected: Password does not contain enough character classesPassword not changed.
Password History
Nach zwei gültigen Änderungen wurde die Wiederverwendung eines früheren Passworts getestet. FreeIPA hat die Wiederverwendung abgelehnt.
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.
Password change rejected: Current password's minimum life has not expiredPassword 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.
ipa user-mod policy-expired --password-expiration=20000101000000Z
Password expired. You must change it now.Ticket cache: KCM:1001Default principal: policy-expired@EXAMPLE.TEST
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.
ipa passwd policy-reset
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.
attempt_1_rc=1attempt_2_rc=1valid_before_threshold_rc=0attempt_3_rc=1attempt_4_rc=1attempt_5_rc=1valid_after_threshold_rc=1
Account disabled: FalseServer: ipa01.example.testFailed logins: 3Last failed authentication: 20260919225833Z
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.
ipa user-unlock policy-lockkinit policy-lockssh 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.
ipa user-mod policy-account-expired --principal-expiration=20000101000000Z
policy-account-expired:*:40800010:40800010:Policy AccountExpired:/home/policy-account-expired:/bin/bashuid=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 credentialsssh_rc=5
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
| Zustand | Identity Lookup | kinit | SSH | Recovery |
|---|---|---|---|---|
| Disabled User | Ja | Credentials revoked | Fehlschlag | ipa user-enable |
| Locked User | Ja | Fehlschlag nach Schwelle | Fehlschlag im finalen Lauf | ipa user-unlock oder Ablauf der Sperre |
| Password Expired | Ja | Passwortwechsel erforderlich | Nach Änderung möglich | Benutzeränderung oder Admin-Reset |
| Account Expired | Ja | Entry expired | Fehlschlag | Principal Expiration anpassen |
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
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.
getent passwd policy-validid policy-validkinit policy-validklistssh policy-valid@client01.example.testsssctl user-checks policy-validjournalctl -u sssd --no-pager
FreeIPA Benutzer policy-valid mit angewendeter Passwort-Policy. Screenshot aus dem isolierten FreeIPA-C2-Lab mit vertrauenswürdiger Lab-CA.
Ergebniskontrolle
| Prüfbereich | Prüfung | Erwartetes Ergebnis | Status |
|---|---|---|---|
| Global Policy | pwpolicy-show/find | Defaultwerte sichtbar | PASS |
| Group Policy | policy-users | Gruppenpolicy greift | PASS |
| Mindestlänge | ungültige Änderung | Policy-Verstoß wird abgelehnt | PASS |
| History | Passwort wiederverwenden | Wiederverwendung wird abgelehnt | PASS |
| Expiration | Passwort ablaufen lassen | kinit erzwingt Änderung | PASS |
| Admin Reset | ipa passwd | Benutzer muss ändern | PASS |
| Lockout | Fehlversuche | Benutzer wird gesperrt | PASS |
| Recovery | ipa user-unlock | Login funktioniert wieder | PASS |
| Account Expiration | Principal abgelaufen | kinit/SSH schlagen fehl | PASS |
| Web UI | Trusted-CA Login | Screenshots authentifiziert | PASS |
| CLI | Code/Text statt Terminalbilder | Kopierbare Evidenz | PASS |
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.






