Zum Inhalt springen

Linux/SELinux/06 Benutzer/PAM: Unterschied zwischen den Versionen

Aus Foxwiki
Zeile 42: Zeile 42:


=== pam_sepermit.so ===
=== pam_sepermit.so ===
; Anmeldung am System
[[Pam_sepermit.so]]
Modul '''erlaubt oder verweigert die Anmeldung am System'''
* abhängig davon, ob SELinux im Modus '''Enforcing''' arbeitet
 
; Gruppen
Es stellt die Gruppen auth und account bereit
* beteiligt sich also unmittelbar an der Entscheidung, ob ein Login in der Kette weiter zugelassen wird
 
; Regeln
; Wenn ein Benutzer oder eine Gruppe auf eine Regel aus der Konfiguration passt, wird die Anmeldung nur im Enforcing-Modus erlaubt
Im Modus permissive oder disabled gibt das Modul einen Zugriffsfehler zurück
* Für Benutzer, die zu keinem Eintrag passen, wird die Entscheidung an andere PAM-Module weitergereicht
 
Das Modul wird eingesetzt, wenn eine Anmeldung '''nur dann erlaubt werden soll, wenn SELinux die Richtlinie tatsächlich erzwingt'''
 
==== Konfiguration ====
; /etc/security/sepermit.conf
Standardmäßig
* Falls diese Datei nicht vorhanden ist, wird die Vendor-Datei aus /usr/share/pam/security/sepermit.conf verwendet
 
; Aufbau
Jede Zeile enthält eine der folgenden Varianten
* einen konkreten Benutzernamen (zum Beispiel alice)
* eine Gruppe über @group (zum Beispiel @devops)
* einen SELinux user über %seuser (zum Beispiel %user_u)
 
; Exclusive und ignore
Zusätzlich können die Optionen exclusive oder ignore angegeben werden
{| class="wikitable options big"
! !!
|-
| exclusive || beschränkt den Benutzer auf eine einzige Login-Sitzung und beendet seine Prozesse beim Abmelden
|-
| ignore || bewirkt, dass das Modul im Enforcing-Modus PAM_IGNORE und in den übrigen Modi PAM_AUTH_ERR zurückgibt
|}
 
Die weitere Entscheidung trifft dann der restliche [[PAM]]-Stack


=== pam_namespace.so ===
=== pam_namespace.so ===

Version vom 12. Juni 2026, 16:27 Uhr

Linux/SELinux/06 Benutzer/PAM - PAM-Module für SELinux

Beschreibung

Grundlagen der PAM-Architektur

PAM (Pluggable Authentication Modules)

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

Pam_selinux.so

Erweiterte Isolation

Hier werden noch einige weitere Module behandelt

pam_sepermit.so

Pam_sepermit.so

pam_namespace.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