使用 pam_mount 进行多次登录意味着多次(冗余)挂载

使用 pam_mount 进行多次登录意味着多次(冗余)挂载

我已配置pam_mount.so为在用户登录时自动挂载 cifs 共享;问题是如果用户同时登录多次,则挂载命令会重复多次。

到目前为止这不是一个问题,但是当您查看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)

我假设我需要摆弄文件pam.d/common-authpam_mount.conf.xml完成此操作。

我该如何指导pam_mount.so以避免重复安装?


[编辑]

我的文件内容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>

答案1

为什么不使用自动文件系统

答案2

确保在“路径”后面加上斜杠(例如 path="userShares/"),如下所示:

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

问题在于 /etc/mtab 中的条目末尾添加了一个斜杠。因此,当再次调用 pam_mount 时,它无法看到精确的匹配,所以将再次挂载共享,因此您有多个挂载。

看到这个错误:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=586009

答案3

“多个同时登录”可能是关键。更有可能的是,第二个和后续的挂载命令在第一个挂载命令完成之前启动。考虑到网络挂载命令运行的速度有多慢,这似乎很有可能。您可能需要某种共享内存/状态文件/等,以确保只有一个挂载进程启动。好吧,至少在 pam_mount 作者针对该竞争条件进行长期修复之前…… :)

您可以查看 pam_tally 模块。您可以使用该模块维护每个用户的登录计数器,如果计数超过 1,则拒绝。然后,在控制字段中,您可以将其设置为如果 pam_tally 失败则跳过 pam_mount 模块。具体来说,我认为也许像这样的方法可以奏效:

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

...或者类似的东西。如果您需要一些外部系统来操纵计数器,例如,当您手动卸载文件系统或某些东西时(因为 pam_tally2 附带了一个可用于操纵计数的二进制文件),am_tally2 模块也可以工作。

答案4

我怀疑 pam_mount 无法卸载目录。您能否确认用户使用 注销后目录是否仍处于挂载状态mount

如果是这样的话,我知道的唯一解决方案就是使用 pam_script 在会话关闭时运行umount -l /home/$USER

祝你好运,
若昂·米格尔·内维斯

相关内容