Quando um usuário faz login no sistema e não há diretório inicial, gostaríamos de criar o diretório inicial do usuário usando pam_mkhomedir . Esta é uma prática comum. Aqui está uma descrição rápida de pam_mkhomedir:
O módulo PAM pam_mkhomedir criará um diretório inicial do usuário se ele não existir quando a sessão começar. Isso permite que os usuários estejam presentes no banco de dados central (como NIS, kerberos ou LDAP) sem usar um sistema de arquivos distribuído ou pré-criar um grande número de diretórios. O diretório do esqueleto (geralmente / etc / skel /) é usado para copiar arquivos padrão e também define um umask para a criação.
No entanto, este é um sistema FreeBSD 8.2 executando o ZFS. Precisamos executar um comando ZFS primeiro, porque queremos um sistema de arquivos ZFS por usuário . pam_mkhomedir
pode fazer um mkdir
, mas precisamos fazer algo parecido zfs create /zpool/home/$USER
.
Alguém sabe se é possível usar o PAM para executar comandos durante a primeira sessão de login de um usuário?
Respostas:
Existe um módulo PAM chamado
pam_exec
- se você escrever um script que verifique e / ou crie o volume ZFS, poderá encadear isso nas regras PAM existentes e manter as coisas boas sem assumir login interativo, shells padrão e diretórios de esqueletos, etc. exemplo, você poderia terou o que for mais adequado à sua configuração específica.
(Como Tom Shaw apontou nos comentários, ter
session required pam_mkhomedir.so
seria redundante.)fonte
Vale ressaltar que, conforme solicitado, sua pergunta contém uma suposição inválida: mesmo o PAM não faz ideia se é o primeiro login do usuário; só sabe se o usuário tem um diretório inicial ou não.
Portanto, com essa ressalva em mente, não é o PAM fazendo isso, mas você pode facilmente executar algo fora dele
/etc/bashrc
, com o comando precedido por uma verificação e seguido por uma queda de um arquivo de pontos no diretório inicial do usuário. Precisa de raiz privs? Umsudo
binário adequadamente bloqueado ou um binário setuid provavelmente funcionará melhor para você. As duas opções também oferecem a opção de colocar o arquivo de ponto em algum lugar onde o usuário não possa modificá-lo ou excluí-lo (se você se importa com esse tipo de coisa).fonte
Então você tem duas opções aqui:
1) modifique a fonte do pam_mkhomedir para criar o sistema de arquivos zfs primeiro antes de criar o diretório. 2) deixe o pam_mkhomedir funcionar normalmente, depois adicione um script para verificar e ver se há pastas que não estão em seu próprio sistema de arquivos zfs em que o usuário efetuou logout. Ao capturar esses casos, mova o diretório / home, crie o sistema de arquivos e mova os arquivos de volta para o diretório.
Eu suspeito que deixar um usuário no main / home por um dia inicial não causará muitos problemas; portanto, eu usaria a última opção, que é mais simples.
fonte