web-dev-qa-db-ja.com

pam_mountを使用した複数のログインは、複数の(冗長な)マウントを意味します

ユーザーがログインしたときにcifs共有を自動的にマウントするようにpam_mount.soを構成しました。問題は、ユーザーが同時に複数回ログインすると、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.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>
6
Jamie

autofs を使用しないのはなぜですか?

2
Warner

次のように、「パス」(例:path = "userShares /")の末尾にスラッシュを付けるようにしてください。

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

問題は、/ etc/mtabのエントリに末尾のスラッシュが追加されることです。したがって、pam_mountが再度呼び出されると、exactの一致を確認できないため、共有が再度マウントされるため、複数のマウントがあります。

このバグを参照してください: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=586009

2
Helpful Guy

「複数の同時ログイン」がおそらく重要です。おそらく、最初のマウントコマンドが終了する前に、2番目以降のマウントコマンドが起動されている可能性があります。ネットワークマウントコマンドの実行速度が遅いことを考えると、これは非常に可能性が高いようです。おそらく必要なのは、1つのマウントプロセスのみが起動することを確認できる、ある種の共有メモリ/状態ファイルなどです。まあ、少なくとも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

...またはそれらの線に沿った何か。 am_tally2モジュールは、カウンターを操作するための外部システムが必要な場合、たとえばファイルシステムなどを手動でアンマウントする場合にも機能します(pam_tally2にはカウントの操作に使用できるバイナリが付属しているため)。

1
dannysauer

問題のある行は私のpam_mount.conf.xmlファイルにありました:

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

する必要があります:

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

値をtrueに設定すると、pam_mount.soモジュールはシステムから/home/$USER/を削除しようとしましたが、私が想定したように、./$USERディレクトリの/home/ではありませんでした。

1
Jamie

Pam_mountがディレクトリのアンマウントに失敗しているのではないかと思います。ユーザーがmountでログアウトした後も、ディレクトリがマウントされたままであるかどうかを確認してください。

その場合、私が知っている唯一の解決策は、pam_scriptを使用してセッションの終了時にumount -l /home/$USERを実行することです。

幸運を祈ります、
JoãoMiguelNeves

0
jneves