PAM: Executar um comando antes do pam_mkhomedir?

7

Quando um usuário efetua login em um sistema e não há um diretório pessoal, gostaríamos de criar o diretório pessoal do usuário usando pam_mkhomedir . Esta é uma prática comum. Aqui está uma descrição rápida do pam_mkhomedir:

The pam_mkhomedir PAM module will create a users home directory if it does not exist when the session begins. This allows users to be present in central database (such as NIS, kerberos or LDAP) without using a distributed file system or pre-creating a large number of directories. The skeleton directory (usually /etc/skel/) is used to copy default files and also sets a umask for the creation.

No entanto, este é um sistema FreeBSD 8.2 rodando o ZFS. Precisamos primeiro executar um comando do ZFS, porque queremos um sistema de arquivos ZFS por usuário . pam_mkhomedir pode fazer um mkdir , mas precisamos fazer algo como zfs create /zpool/home/$USER .

Alguém sabe se é possível usar o PAM para executar comandos durante a primeira sessão de login do usuário?

    
por Stefan Lasiewski 24.05.2011 / 02:51

3 respostas

8

Existe um módulo PAM chamado pam_exec - se você escrever um script que verifique e / ou crie o volume do ZFS, você pode encadear isso em suas regras existentes do PAM e manter as coisas legais sem assumir login interativo, shells padrão & diretórios esqueletos, etc. Por exemplo, você poderia ter

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

ou o que for adequado à sua configuração específica.

(Como Tom Shaw apontou nos comentários, ter session required pam_mkhomedir.so seria redundante.)

    
por 24.05.2011 / 04:49
2

Vale a pena ressaltar que, conforme solicitado, sua pergunta contém uma suposição inválida: mesmo o PAM não tem idéia se é o primeiro login do usuário; ele só sabe se o usuário tem um diretório inicial ou não.

Então, com essa ressalva em mente, não é o PAM fazendo isso, mas você pode facilmente executar algo fora de /etc/bashrc , com o comando precedido por uma verificação e seguido por uma queda de um arquivo de ponto na casa do usuário diretório. Precisa privs root? Um sudo apropriadamente bloqueado ou um binário setuid provavelmente funcionarão melhor para você. Ambas as opções também lhe dão a opção de colocar o dotfile em algum lugar onde o usuário não pode modificá-lo ou excluí-lo (se você se importa com esse tipo de coisa).

    
por 24.05.2011 / 03:20
0

Então você tem duas escolhas aqui:

1) modifique a fonte do pam_mkhomedir para criar o sistema de arquivos zfs antes de criar o diretório. 2) deixe pam_mkhomedir executar como normalmente faria, em seguida, adicione um script para verificar e ver quando há pastas não em seu próprio sistema de arquivos zfs, onde o usuário fez o logout. Quando você capturar esses casos, mova o diretório / home, faça o sistema de arquivos e, em seguida, mova os arquivos de volta para o diretório.

Suspeito que deixar um usuário na principal / home para um dia inicial não causará muitos problemas, por isso optaria pela última opção, é mais simples.

    
por 24.05.2011 / 04:06

Tags