Vários logins com pam_mount significam montagens múltiplas (redundantes)

5

Configurei pam_mount.so para montar automaticamente um compartilhamento cifs quando os usuários fazem login; o problema é que, se um usuário efetuar login em várias vezes simultaneamente, o comando mount será repetido várias vezes.

Até agora isso não é um problema, mas é confuso quando você vê a saída de um comando mount .

# mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
//srv1/UserShares/jrisk on /home/jrisk type cifs (rw,mand)
//srv1/UserShares/jrisk on /home/jrisk type cifs (rw,mand)
//srv1/UserShares/jrisk on /home/jrisk type cifs (rw,mand)

Estou assumindo que preciso mexer no arquivo pam.d/common-auth ou pam_mount.conf.xml para realizar isso.

Como posso instruir pam_mount.so para evitar montagens duplicadas?

[Editar]

O conteúdo do meu arquivo pam_mount.conf.xml :

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<pam_mount>
  <debug enable="1" />
  <volume user="*" server="srv1" path="UserShares" mountpoint="home" fstype="cifs" />
  <cifsmount>mount -t cifs //%(SERVER)/%(VOLUME)/%(USER) %(MNTPT)/%(USER) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</cifsmount>
  <umount>umount %(MNTPT)/%(USER)</umount>
  <mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other" />
  <mntoptions require="nosuid,nodev" />
  <path>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin</path>
  <logout wait="0" hup="0" term="0" kill="0" />
  <mkmountpoint enable="1" remove="true" />
</pam_mount>
    
por Jamie 23.04.2010 / 19:24

5 respostas

2

Por que não usar autofs ?

    
por 12.05.2010 / 23:06
2

Certifique-se de colocar uma barra final para "caminho" (por exemplo, caminho="userShares /") assim:

<volume user="*" server="srv1" path="UserShares/" mountpoint="home" fstype="cifs" />

O problema é que uma barra final é adicionada à entrada em / etc / mtab. Então, quando o pam_mount é chamado novamente, ele não pode ver uma correspondência exata , portanto, montará o compartilhamento novamente, portanto, você tem várias montagens.

Veja este bug: link

    
por 23.02.2012 / 23:00
1

"Vários logins simultâneos" é provavelmente a chave. Mais do que provavelmente, o que está acontecendo é que o segundo e os subsequentes comandos de montagem estão sendo lançados antes do primeiro acabamento do comando de montagem. Isso parece muito provável, considerando a lentidão dos comandos de montagem de rede. O que você provavelmente precisa é de algum tipo de arquivo de memória / estado compartilhado / etc, que pode garantir que apenas um processo de montagem seja iniciado. Bem, pelo menos até o autor pam_mount trabalhar em uma correção de longo prazo para essa condição de corrida ...:)

Você pode ver o módulo pam_tally. Você poderia usar esse módulo para manter um contador de login por usuário e negar se a contagem for maior que 1. No campo de controle, você pode configurá-lo para que o módulo pam_mount seja ignorado se pam_tally falhar. Especificamente, acho que algo assim funcionaria:

auth [success=ignore default=1] pam_tally.so deny=1 onerr=succeed no_lock_time no_reset
auth optional pam_mount.so pam_mount_options

... Ou algo nesse sentido. O módulo am_tally2 também funcionaria, se você precisar de algum sistema externo para manipular o contador, digamos, quando desmontar manualmente um sistema de arquivos ou algo assim (já que o pam_tally2 vem com um binário que pode ser usado para manipular as contagens).

    
por 24.04.2010 / 16:15
1

A linha incorreta estava no meu arquivo pam_mount.conf.xml :

<mkmountpoint enable="1" remove="true" />

deve ser:

<mkmountpoint enable="1" remove="false" />

Com o valor definido como true, o módulo pam_mount.so estava tentando remover /home/$USER/ do sistema, não, como eu assumi, ./$USER no diretório /home/ .

    
por 26.04.2010 / 15:09
0

Suspeito que o pam_mount não consiga desmontar o diretório. Você poderia, por favor, confirmar se o diretório permanece montado depois que o usuário efetuou logout com um mount ?

Se for esse o caso, a única solução que conheço é usar o pam_script para executar um fechamento de umount -l /home/$USER na sessão.

Boa sorte,
João Miguel Neves

    
por 07.05.2010 / 17:48