Kurzüberblick
Teil 6 der Identity-Serie zeigt FreeIPA sudo rules praktisch auf Fedora 44. Ziel ist eine nachvollziehbare Delegation: Ein Operator darf den Status von sshd auf einem definierten Client prüfen, aber keinen Dienst neu starten und kein Benutzer außerhalb der Gruppe erhält diese Berechtigung.
Wichtig: HBAC entscheidet, ob ein Benutzer überhaupt auf einen Host und Dienst zugreifen darf. Sudo entscheidet danach, welche privilegierten Kommandos auf dem Host erlaubt sind. Beides gehört zusammen, ist aber nicht dasselbe.
FreeIPA Web UI nach Login im Fedora-44-Sudo-Lab. Screenshot aus dem isolierten FreeIPA-C4-Sudo-Lab auf Fedora 44.
Lab-Aufbau
Server: ipa01.example.testClient: client01.example.testDomain: example.testRealm: EXAMPLE.TESTDistribution: Fedora Linux 44Kernel: 6.19.14-300.fc44.x86_64SELinux: Enforcing
Objektmodell
Das Lab nutzt keine lokalen sudoers-Dateien für die fachliche Berechtigung. Die Regel wird zentral in FreeIPA modelliert: Benutzergruppe, Hostgruppe, Sudo Command, Sudo Command Group und Sudo Rule.
ipa group-add ops-sudo-status \--desc='Operators allowed to inspect selected service status'ipa group-add-member ops-sudo-status --users=opsallowedipa hostgroup-add linux-clients \--desc='Linux clients using central sudo policy'ipa hostgroup-add-member linux-clients --hosts=client01.example.testipa sudocmd-add '/usr/bin/systemctl status sshd'ipa sudocmdgroup-add service-status-commands \--desc='Read-only service status commands'ipa sudocmdgroup-add-member service-status-commands \--sudocmds='/usr/bin/systemctl status sshd'ipa sudorule-add allow-service-status \--desc='Allow status inspection of sshd on Linux clients'ipa sudorule-add-user allow-service-status --groups=ops-sudo-statusipa sudorule-add-host allow-service-status --hostgroups=linux-clientsipa sudorule-add-allow-command allow-service-status \--sudocmdgroups=service-status-commandsipa sudorule-add-runasuser allow-service-status --users=rootipa sudorule-add-option allow-service-status --sudooption='!authenticate'
FreeIPA sudo rule allow-service-status mit Benutzergruppe, Hostgruppe, Command Group und RunAs root. Screenshot aus dem isolierten FreeIPA-C4-Sudo-Lab auf Fedora 44.
FreeIPA Gruppe ops-sudo-status mit berechtigtem Operator. Screenshot aus dem isolierten FreeIPA-C4-Sudo-Lab auf Fedora 44.
FreeIPA Hostgruppe linux-clients mit client01.example.test. Screenshot aus dem isolierten FreeIPA-C4-Sudo-Lab auf Fedora 44.
FreeIPA Sudo Command Group service-status-commands. Screenshot aus dem isolierten FreeIPA-C4-Sudo-Lab auf Fedora 44.
Client-Anbindung über SSSD
Damit sudo die zentralen Regeln sieht, muss der Client sudo über SSSD abfragen. Im Lab waren `sudoers: files sss`, der SSSD-sudo-Responder und ein Cache-Refresh Teil der Abnahme.
# /etc/nsswitch.confsudoers: files sss# /etc/sssd/sssd.conf[sssd]services = nss, pam, ssh, sudo[sudo]systemctl restart sssdsss_cache -E
User opsallowed may run the following commands on client01:(root) NOPASSWD: /usr/bin/systemctl status sshdUser opsdenied is not allowed to run sudo on client01.
Positiver Test
Der Benutzer opsallowed ist Mitglied von ops-sudo-status. `sudo -l` zeigt nur das erlaubte Kommando. Mit `SYSTEMD_PAGER=cat` wird der systemd-Status nicht interaktiv ausgegeben und der Test bleibt skriptfähig.
uid=289600003(opsallowed) gid=289600003(opsallowed) groups=289600003(opsallowed),289600005(ops-sudo-status)User opsallowed may run the following commands on client01:(root) NOPASSWD: /usr/bin/systemctl status sshdSYSTEMD_PAGER=cat sudo -n /usr/bin/systemctl status sshdActive: active (running)rc=0
Negative Tests
opsallowed darf den Dienststatus lesen, aber nicht `systemctl restart sshd` ausführen. opsdenied ist als IPA-Benutzer auflösbar, hat aber keine sudo-Berechtigung aus der FreeIPA-Regel.
sudo -n /usr/bin/systemctl restart sshdsudo: a password is requiredrestart_rc=1uid=289600004(opsdenied) gid=289600004(opsdenied) groups=289600004(opsdenied)SYSTEMD_PAGER=cat sudo -n /usr/bin/systemctl status sshdsudo: a password is requireddenied_user_rc=1
Ergebniskontrolle
| Prüfbereich | Prüfung | Ergebnis |
|---|---|---|
| Plattform | Server und Client auf Fedora Linux 44 | PASS |
| FreeIPA | Sudo Rule allow-service-status vorhanden | PASS |
| Scope | User Group ops-sudo-status verknüpft | PASS |
| Scope | Host Group linux-clients verknüpft | PASS |
| Scope | Nur /usr/bin/systemctl status sshd erlaubt | PASS |
| SSSD | sudoers: files sss und sudo responder aktiv | PASS |
| Allow | opsallowed darf sshd-Status als root lesen | PASS |
| Deny | opsallowed darf sshd nicht neu starten | PASS |
| Deny | opsdenied erhält keine sudo-Freigabe | PASS |
Plattform
- Prüfung
- Server und Client auf Fedora Linux 44
- Ergebnis
- PASS
FreeIPA
- Prüfung
- Sudo Rule allow-service-status vorhanden
- Ergebnis
- PASS
Scope
- Prüfung
- User Group ops-sudo-status verknüpft
- Ergebnis
- PASS
Scope
- Prüfung
- Host Group linux-clients verknüpft
- Ergebnis
- PASS
Scope
- Prüfung
- Nur /usr/bin/systemctl status sshd erlaubt
- Ergebnis
- PASS
SSSD
- Prüfung
- sudoers: files sss und sudo responder aktiv
- Ergebnis
- PASS
Allow
- Prüfung
- opsallowed darf sshd-Status als root lesen
- Ergebnis
- PASS
Deny
- Prüfung
- opsallowed darf sshd nicht neu starten
- Ergebnis
- PASS
Deny
- Prüfung
- opsdenied erhält keine sudo-Freigabe
- Ergebnis
- PASS
Praxisnotizen
`!authenticate` entspricht im Ergebnis NOPASSWD und sollte nur dort verwendet werden, wo der operative Nutzen und das Risiko dokumentiert sind.
Nach Regeländerungen können SSSD-Cache und sudo-Refresh-Zeitpunkte sichtbar werden. Für Tests ist `sss_cache -E` plus SSSD-Neustart sinnvoll, produktiv sollte man Cache-Verhalten bewusst planen.
Für produktive Rollen sollte man Kommandos möglichst eng schneiden und keine pauschalen Root-Rechte über Gruppen verteilen.






