Linux/SELinux/06 Benutzer/PAM
Linux/SELinux/06 Benutzer/PAM - PAM-Module für SELinux
Beschreibung
Grundlagen der PAM-Architektur
Anwendungen können Vorgänge im Zusammenhang mit der Anmeldung an das System delegieren
- modulares Subsystem
Anwendungen
- Konfiguration
/etc/pam.d/
- Ein Modul je jeden Dienst
Grundlegende PAM-Gruppen
| auth | Bestätigung der Identität des Benutzers und initiale Vergabe von Credentials |
| account | Prüfung, ob der Zugriff auf den Dienst als solcher erlaubt ist |
| password | Änderung des Authentifizierungs-Tokens |
| session | Aktionen, die vor der Bereitstellung einer Sitzung und nach deren Beendigung ausgeführt werden müssen |
- Gruppe session
Für SELinux ist insbesondere die Gruppe session kritisch
- da die Zuweisung des SELinux-Kontexts eines Benutzers zur Vorbereitung der Laufzeitumgebung für die zukünftige Sitzung gehört
pam_selinux.so
Erweiterte Isolation
Hier werden noch einige weitere Module behandelt
pam_sepermit.so
pam_namespace.so
pam_oddjob_mkhomedir.so
Arbeitet in der Gruppe session
- Es prüft, ob das Home-Verzeichnis des Benutzers existiert
- Falls das Verzeichnis nicht existiert, initiiert das Modul dessen Erstellung
- Im Unterschied zum Standardmodul pam_mkhomedir.so kann dieses Modul Home-Verzeichnisse mit korrekten SELinux-Labels anlegen
Für den Betrieb dieses Moduls werden das Paket oddjob-mkhomedir, der laufende Dienst oddjobd sowie die zugehörige D-Bus- und oddjobd-Konfiguration benötigt
- Außerdem müssen die entsprechenden Dateipräfixe in der aktiven Policy vorhanden sein
Dieses Modul ist nützlich, wenn ein lokales Home-Verzeichnis erst beim ersten tatsächlichen Login angelegt werden soll
Praxis zu pam_namespace.so
Isolation von /tmp unterschiedlicher Sitzungen mit Hilfe von pam_namespace.so
Für su wird die Option unmnt_remnt empfohlen, da bei solchen Programmen die Polyinstanziierung möglicherweise bereits für die ursprüngliche Login-Sitzung eingerichtet ist und vor einer neuen Einrichtung sauber zerlegt und erneut aufgebaut werden muss
Benutzer vorbereiten
useradd -m alice
useradd -m bob
passwd alice
passwd bob
Für diese Übung kann der Modus permissive gesetzt werden, da hier keine Blockierungen benötigt werden; wichtig ist lediglich, dass SELinux aktiviert ist
setenforce 0
Boolean prüfen und aktivieren, damit diese Funktion in der Policy erlaubt wird
setsebool -P allow_polyinstantiation 1
getsebool allow_polyinstantiation
Verzeichnis für die /tmp-Instanzen anlegen
mkdir /tmp-inst --mode 000
Nach der Erstellung muss dafür der erwartete SELinux-Kontext wiederhergestellt werden
restorecon -Fv /tmp-inst
Prüfung
ls -ldZ /tmp-inst
Anschließend namespace.conf konfigurieren
Zunächst eine Sicherungskopie anlegen
cp /etc/security/namespace.conf /etc/security/namespace.conf.bak
Danach muss in die Datei /etc/security/namespace.conf folgende Konfiguration eingetragen werden
/tmp /tmp-inst/ user root,adm
Diese Zeile bedeutet Folgendes
- /tmp — das logische Verzeichnis, das isoliert werden soll
- /tmp-inst/ — der Basispfad, unter dem die realen Instanzen abgelegt werden
- user — Trennungsmethode nach Benutzername
Zur Veranschaulichung wird hier die Methode user verwendet
- root,adm — Liste der Ausnahmen
Nun pam_namespace.so für su aktivieren
- Dazu muss in der Datei /etc/pam.d/su im Abschnitt session Folgendes ergänzt werden
session required pam_namespace.so unmnt_remnt
Wie bereits erwähnt, gehört pam_namespace.so zum Typ session, da es weder die Passwortprüfung noch das eigentliche Zugangsrecht behandelt, sondern die Laufzeitumgebung für eine neue Benutzersitzung vorbereitet
- Damit ist die Konfiguration abgeschlossen
- Nun kann aus zwei verschiedenen Terminals eine Anmeldung für die Benutzer alice und bob mit Hilfe von su initiiert werden
Befehlssatz zur Prüfung für alice
su - alice
findmnt --mountpoint /tmp
touch /tmp/alice.test
ls -la /tmp
Zur Prüfung für bob
su - bob
findmnt --mountpoint /tmp
ls -la /tmp
touch /tmp/bob.test
ls -la /tmp
Der Befehl findmnt --mountpoint /tmp zeigt, dass /tmp innerhalb der Sitzung nicht mehr einfach das gemeinsame Systemverzeichnis ist, sondern aus einer separaten Instanz eingebunden wird, die auf Grundlage von /tmp-inst/ aufgebaut wurde
Rückbau
Nach Abschluss des Labors können die Änderungen manuell zurückgenommen werden
Aus /etc/pam.d/su muss die Zeile
session required pam_namespace.so unmnt_remnt
entfernt werden
Anschließend die ursprüngliche namespace.conf wiederherstellen
cp /etc/security/namespace.conf.bak /etc/security/namespace.conf
Danach den Boolean wieder deaktivieren
setsebool -P allow_polyinstantiation 0
Abschließend das angelegte Verzeichnis und die Benutzer entfernen
rm -rf /tmp-inst
userdel bob
userdel alice