PAM: Einen Befehl vor pam_mkhomedir ausführen?

8

Wenn sich ein Benutzer bei einem System anmeldet und kein Ausgangsverzeichnis vorhanden ist, möchten wir das Ausgangsverzeichnis des Benutzers mit pam_mkhomedir erstellen . Dies ist eine gängige Praxis. Hier ist eine kurze Beschreibung von pam_mkhomedir:

Das PAM-Modul pam_mkhomedir erstellt ein Benutzerverzeichnis, wenn es zu Beginn der Sitzung nicht vorhanden ist. Auf diese Weise können Benutzer in einer zentralen Datenbank (wie NIS, Kerberos oder LDAP) vorhanden sein, ohne ein verteiltes Dateisystem zu verwenden oder eine große Anzahl von Verzeichnissen vorab zu erstellen. Das Skeleton-Verzeichnis (normalerweise / etc / skel /) wird zum Kopieren von Standarddateien verwendet und legt auch eine Umask für die Erstellung fest.

Dies ist jedoch ein FreeBSD 8.2-System, auf dem ZFS ausgeführt wird. Wir müssen zuerst einen ZFS-Befehl ausführen, da wir ein ZFS-Dateisystem pro Benutzer benötigen . pam_mkhomedirkann ein tun mkdir, aber wir müssen so etwas tun zfs create /zpool/home/$USER.

Weiß jemand, ob es möglich ist, mit PAM Befehle während der ersten Anmeldesitzung eines Benutzers auszuführen?

Stefan Lasiewski
quelle
Ich habe den Link solarisinternals.com durch eine archivierte Version von archive.org ersetzt, da erstere von einem Domainbesetzer besetzt ist. Vielen Dank an @Norman Gray für den Hinweis.
Stefan Lasiewski

Antworten:

9

Es gibt ein PAM-Modul namens pam_exec- Wenn Sie ein Skript schreiben, das nach dem ZFS-Volume sucht und / oder es erstellt, können Sie dies in Ihre vorhandenen PAM-Regeln einketten und die Dinge schön halten, ohne interaktives Login, Standard-Shells und Skeleton-Verzeichnisse usw. anzunehmen Beispiel könnten Sie haben

session required pam_unix.so
session required pam_exec.so check_zfs.sh $PAM_USER

oder was auch immer zu Ihrem spezifischen Setup passt.

(Wie Tom Shaw in den Kommentaren betonte, session required pam_mkhomedir.sowäre es überflüssig , wenn er es getan hätte.)

Andrew
quelle
Gut, außer dass Sie einen Tippfehler in der Zeile pam_mkhomedir.so haben - Tippfehler in der pam.conf sind nicht gut! - und ich glaube nicht, dass diese Zeile sowieso benötigt wird, wenn das Skript check_zfs.sh die ganze Drecksarbeit erledigt.
Tom Shaw
@ Tom Warum das Rad neu erfinden, wenn das PAM-Modul es für Sie erledigt?
Andrew
2
Der Punkt der Frage ist, dass er möchte, dass das Home-Verzeichnis mit "zfs create" anstatt mit "mkdir" erstellt wird. Dies wird mithilfe von pam_exec erreicht. Das Verzeichnis existiert an dieser Stelle, so dass das nachfolgende pam_mkhomedir nichts tut!
Tom Shaw
@ TomShaw in der Tat.
Andrew
3

Wie bereits erwähnt, enthält Ihre Frage eine ungültige Annahme: Selbst PAM hat keine Ahnung, ob es sich um die erste Anmeldung des Benutzers handelt. Es weiß nur, ob der Benutzer ein Home-Verzeichnis hat oder nicht.

In Anbetracht dieser Einschränkung ist es nicht PAM, das dies tut, aber Sie könnten leicht etwas davon /etc/bashrcverlieren, wobei dem Befehl eine Überprüfung auf eine Punktdatei im Home-Verzeichnis des Benutzers vorausgeht und diese anschließend gelöscht wird. Benötigen Sie Root-Privilegien? Entweder eine entsprechend gesperrte sudooder eine setuid-Binärdatei funktioniert wahrscheinlich am besten für Sie. Beide Optionen bieten Ihnen auch die Möglichkeit, die Punktdatei an einem Ort abzulegen, an dem der Benutzer sie nicht ändern oder löschen kann (wenn Sie sich für solche Dinge interessieren).

BMDan
quelle
Ich bin verwirrt. Erstellt pam_mkhomedir nicht diese Home-Verzeichnisse und kopiert den Inhalt von / etc / skel usw.? Ich warf einen Blick auf den C-Code (On FreeBSD) und dachte, ich könnte sehen, wo er die Skelettdateien in das neu erstellte Homedir kopiert.
Stefan Lasiewski
Nur weil ein Benutzer kein Home-Verzeichnis hat, heißt das nicht, dass er sich noch nicht bei diesem System angemeldet hat. Das Home-Verzeichnis könnte beispielsweise gelöscht worden sein. Dies ist jedoch meist semantisch und spaltet Haare.
Red Tux
@red: Verstanden. Ich habe meine Frage aktualisiert.
Stefan Lasiewski
1

Sie haben hier also zwei Möglichkeiten:

1) Ändern Sie die Quelle für pam_mkhomedir, um zuerst das zfs-Dateisystem zu erstellen, bevor Sie das Verzeichnis erstellen. 2) Lassen Sie pam_mkhomedir wie gewohnt laufen und fügen Sie dann ein Skript hinzu, um zu überprüfen, ob sich Ordner in ihrem eigenen zfs-Dateisystem befinden, in denen sich der Benutzer abgemeldet hat. Wenn Sie diese Fälle abfangen, verschieben Sie das Verzeichnis / home, erstellen Sie das Dateisystem und verschieben Sie die Dateien zurück in das Verzeichnis.

Ich vermute, dass das Verlassen eines Benutzers für einen ersten Tag im Haupt- / Heimbereich nicht zu viele Probleme verursachen wird. Daher würde ich mich für die letztere Option entscheiden, die einfacher ist.

n8whnp
quelle