Я настроил 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-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>
Убедитесь, что вы поставили завершающую косую черту для "пути" (например, path = "userShares /") следующим образом:
<volume user="*" server="srv1" path="UserShares/" mountpoint="home" fstype="cifs" />
Проблема в том, что к записи в / etc / mtab добавляется завершающая косая черта. Поэтому, когда pam_mount вызывается снова, он не видит точный match, поэтому общий ресурс будет снова установлен, следовательно, у вас будет несколько подключений.
Смотрите эту ошибку: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=586009
Почему бы не использовать autofs?
Оскорбительная строка была в моем pam_mount.conf.xml
файл:
<mkmountpoint enable="1" remove="true" />
должно быть:
<mkmountpoint enable="1" remove="false" />
Если установлено значение true, pam_mount.so
модуль пытался удалить /home/$USER/
из системы, а не, как я предполагал, ./$USER
в /home/
каталог.
«Несколько одновременных входов в систему», вероятно, является ключевым. Скорее всего, происходит то, что вторая и последующие команды монтирования запускаются до завершения первой команды монтирования. Это кажется очень вероятным, учитывая, насколько медленно выполняются команды сетевого монтирования. Что вам, вероятно, понадобится, так это своего рода общая память / файл состояния / и т.д., который может гарантировать, что будет запущен только один процесс монтирования. Ну, по крайней мере, до тех пор, пока автор pam_mount не займется долгосрочным исправлением этого состояния гонки ... :)
Вы можете посмотреть модуль pam_tally. Вы можете использовать этот модуль для поддержания счетчика входа в систему для каждого пользователя и запретить, если счетчик больше 1. В поле управления вы можете настроить его так, чтобы модуль pam_mount пропускался, если pam_tally не работает. В частности, я думаю, что может сработать что-то вроде этого:
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 не может размонтировать каталог. Не могли бы вы подтвердить, остается ли каталог смонтированным после выхода пользователя из системы с помощью mount
?
Если это так, единственное известное мне решение - использовать pam_script для запуска umount -l /home/$USER
при закрытии сеанса.
Удачи,
Жуан Мигель Невеш