PAM: exécuter une commande avant pam_mkhomedir?

8

Lorsqu'un utilisateur se connecte à un système et qu'il n'y a pas de répertoire personnel, nous souhaitons créer le répertoire personnel de l'utilisateur à l'aide de pam_mkhomedir . C'est une pratique courante. Voici une description rapide de pam_mkhomedir:

Le module pam_mkhomedir PAM créera un répertoire personnel pour les utilisateurs s'il n'existe pas au début de la session. Cela permet aux utilisateurs d'être présents dans la base de données centrale (comme NIS, kerberos ou LDAP) sans utiliser de système de fichiers distribué ni créer au préalable un grand nombre de répertoires. Le répertoire squelette (généralement / etc / skel /) est utilisé pour copier les fichiers par défaut et définit également un umask pour la création.

Cependant, il s'agit d'un système FreeBSD 8.2 exécutant ZFS. Nous devons d'abord exécuter une commande ZFS, car nous voulons un système de fichiers ZFS par utilisateur . pam_mkhomedirpeut faire un mkdir, mais nous devons faire quelque chose comme zfs create /zpool/home/$USER.

Est-ce que quelqu'un sait s'il est possible d'utiliser PAM pour exécuter des commandes lors de la première session de connexion d'un utilisateur?

Stefan Lasiewski
la source
J'ai remplacé le lien solarisinternals.com par une version archivée de archive.org, car le premier est occupé par un squatter de domaine. Merci à @Norman Gray de l'avoir signalé.
Stefan Lasiewski

Réponses:

9

Il existe un module PAM appelé pam_exec- si vous écrivez un script qui vérifie et / ou crée le volume ZFS, vous pouvez l'enchaîner dans vos règles PAM existantes et garder les choses bien sans supposer une connexion interactive, des répertoires shell et squelette par défaut, etc. Pour par exemple, vous pourriez avoir

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

ou tout ce qui convient à votre configuration spécifique.

(Comme l'a souligné Tom Shaw dans les commentaires, avoir session required pam_mkhomedir.soserait redondant.)

Andrew
la source
Bon sauf que vous avez une faute de frappe dans la ligne pam_mkhomedir.so - les fautes de frappe dans pam.conf ne sont pas bonnes! - et je ne pense pas que cette ligne soit de toute façon nécessaire si le script check_zfs.sh fait tout le sale boulot.
Tom Shaw,
@Tom Pourquoi réinventer la roue alors que le module PAM le fait pour vous?
Andrew
2
Le point de la question est qu'il veut que le répertoire personnel soit créé avec "zfs create" plutôt qu'avec "mkdir". Ceci est accompli en utilisant pam_exec. Le répertoire existe à ce stade, donc le pam_mkhomedir suivant ne fera rien!
Tom Shaw
@TomShaw en effet.
Andrew
3

Il convient de souligner, comme demandé, que votre question contient une hypothèse non valide: même PAM n'a aucune idée s'il s'agit de la première connexion de l'utilisateur; il sait seulement si l'utilisateur a un répertoire personnel ou non.

Donc, avec cette mise en garde à l'esprit, ce n'est pas PAM qui le fait, mais vous pouvez facilement exécuter quelque chose /etc/bashrc, avec la commande précédée d'une vérification et suivie d'une suppression d'un fichier dot dans le répertoire personnel de l'utilisateur. Besoin de privilèges root? sudoUn binaire correctement verrouillé ou un binaire setuid fonctionnera probablement le mieux pour vous. Les deux options vous donnent également la possibilité de placer le fichier dot quelque part où l'utilisateur ne peut pas le modifier ou le supprimer (si vous vous souciez de ce genre de chose).

BMDan
la source
Je suis confus. Pam_mkhomedir ne crée-t-il pas ces répertoires personnels, copiant le contenu de / etc / skel, etc.? J'ai jeté un coup d'œil au code C (sur FreeBSD), et j'ai pensé que je pouvais voir où il copiait les fichiers squelettes dans le homedir nouvellement créé.
Stefan Lasiewski,
Ce n'est pas parce qu'un utilisateur n'a pas de répertoire personnel qu'il ne s'est pas connecté auparavant à ce système. Le répertoire personnel aurait pu être supprimé par exemple. Cependant, il s'agit principalement de poils sémantiques et fendus.
Red Tux
@red: Compris. J'ai mis à jour ma question.
Stefan Lasiewski
1

Vous avez donc deux choix ici:

1) modifiez la source de pam_mkhomedir pour créer le système de fichiers zfs avant de créer le répertoire. 2) laissez pam_mkhomedir s'exécuter normalement, puis ajoutez un script pour vérifier et voir s'il n'y a pas de dossiers sur leur propre système de fichiers zfs où l'utilisateur s'est déconnecté. Lorsque vous interceptez ces cas, déplacez le répertoire / home, créez le système de fichiers, puis replacez les fichiers dans le répertoire.

Je soupçonne que laisser un utilisateur sur le main / home pour une première journée ne va pas causer trop de problèmes, donc j'opterais pour la dernière option, sa plus simple.

n8whnp
la source