多个login与pam_mount意味着多个(冗余)安装

我已经configurationpam_mount.so在用户login时自动挂载一个cifs共享; 问题是如果用户同时login多次,mount命令会重复多次。

到目前为止,这不是一个问题,但是当您查看一个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_mount.conf.xml pam.d/common-auth文件或pam_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> 

为什么不使用autofs ?

确保你把“path”(例如path=“userShares /”)的尾部斜线如下所示:

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

问题在于,在/ etc / mtab中的条目中添加了斜线。 所以,当再次调用pam_mount时,它看不到完全匹配,所以将再次挂载共享,因此您有多个挂载。

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

“多个同时login”可能是关键。 发生的情况很可能是第二个和后续的mount命令在第一个mount命令完成之前启动。 这看起来很可能,networking安装命令的运行速度很慢。 你可能需要的是一些共享内存/状态文件/等,可以确保只有一个挂载过程将启动。 那么,至less,直到pam_mount作者长期修复这种竞争条件… 🙂

你可以看看pam_tally模块。 您可以使用该模块为每个用户维护一个login计数器,并拒绝计数是否超过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 

…或类似的规定。 am_tally2模块也可以工作,如果你需要一些外部系统来操作计数器,比如手动卸载一个文件系统或者其他东西(因为pam_tally2带有一个可以用来操纵计数的二进制文件)。

有问题的行在我的pam_mount.conf.xml文件中:

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

应该:

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

将值设置为true时, pam_mount.so模块试图从系统中除去/home/$USER/ ,而不是像我所设想的./$USER/home/目录中./$USER

我怀疑,pam_mount是无法卸载目录。 您可以确认在用户使用mount注销之后,目录是否保持mount

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

祝你好运,
JoãoMiguel Neves