Я пытаюсь использовать pam_mount для монтирования домашней папки каждого пользователя через sshfs, когда каждый пользователь входит в систему. Проблема, с которой я застрял, заключается в том, что когда pam_mount вызывает mount.fuse и mount.fuse использует ssh для монтирования папки sshfs, он создает файл " ~ / .ssh ". Это означает, что точка монтирования ~ / для этого пользователя становится непустой и монтировать не удается. На этом этапе вы можете указать, что есть опция под названием «непустой», которую я могу включить, которая позволит монтировать в непустую точку монтирования. Я включил его, но он не работает. Может, в моей версии sshfs это просто сломано? Может я неправильно понял смысл этой опции?
Вы можете спросить, как мне узнать, что установка не выполняется из-за непустого каталога. Я проверил свою теорию вот так. Я изменил точку монтирования на "~ / foobar". Итак, вместо того, чтобы монтировать напрямую в домашний каталог, мы теперь монтируем в папку с именем foobar в домашнем каталоге. Когда я вхожу в систему как обычный пользователь, монтирование выполняется успешно, и домашний каталог пользователя монтируется в ~ / foobar. Я выхожу из системы, и общий ресурс отключен. Итак, теперь я создаю пустой файл в этом каталоге foobar, чтобы каталог foobar не был пустым. Я снова вхожу в систему как обычный пользователь, и монтировать не удается.
Изменить: добавлена информация из /etc/security/pam_mount.conf.xml (IP-адрес сервера удален для конфиденциальности)
<fusemount>mount.fuse %(VOLUME) %(MNTPT) -o %(OPTIONS)</fusemount>
<volume fstype="fuse" path="sshfs#%(USER)@<ssh server ip>:/data/home/%(USER)" mountpoint="/home/%(USER)" options="nonempty" ssh="1"/>
Изменить: (вывод audit.log на стороне ssh / файлового сервера)
type=CRED_DISP msg=audit(1314290438.255:1490): user pid=5817 uid=0 auid=16777308 ses=203 subj=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=PAM:setcred acct="<ssh username>" exe="/usr/sbin/sshd" hostname=<client ip> addr=<client ip> terminal=ssh res=success'
Изменить: я просто подумал, что хотел бы упомянуть, что я попытался выполнить в основном ту же команду, которую настроен pam_mount для выполнения в пустом каталоге, а затем в непустом каталоге. Кажется, работает, когда каталог не пуст. Итак, теперь моя теория заключается в том, что pam_mount неправильно передает параметр non_empty или что-то еще происходит ... Опять же, хотя я не думаю, что это проблема аутентификации, поскольку на стороне сервера аутентификация считается успешной. Я говорю о следующей команде:
mount.fuse sshfs#<ssh user>@<ssh/file server ip>:/data/home/<ssh user> <mount point> -o "nonempty"
Хорошо, я понял это. Если в pam_mount.conf.xml ничего не указано для монтирования файловых систем fuse, таких как sshfs, то предполагается, что это должно быть настроено следующим образом.
<fusemount>mount.fuse %(VOLUME) %(MNTPT) -o %(OPTIONS)</fusemount>
Таким образом, у меня явно ничего не было установлено, пока я не начал возиться с изменением этого значения по умолчанию, чтобы делать такие вещи, как удаление любых файлов в точке монтирования или обмануть ssh, заставляя думать, что дом находится в другом месте, поэтому он не будет создавать папку .ssh под домом. Оба они потерпели неудачу по другим причинам. Наконец, я вернулся к значениям по умолчанию, а затем заменил исполняемый файл mount.fuse сценарием bash для регистрации всех аргументов и переменных среды, с которыми он выполнялся. Когда я это сделал, я обнаружил проблему. Между -o и непустым пробелом не было. Итак, в результате аргумент был -ononempty, что, вероятно, привело к сбою монтирования или, по крайней мере, непустой параметр не был применен. Следовательно, по умолчанию, если вы ничего не указываете, должно быть что-то вроде этого:
<fusemount>mount.fuse %(VOLUME) %(MNTPT) -o%(OPTIONS)</fusemount>
Итак, я, наконец, явно указал, что должно быть по умолчанию, см. Выше. И это сработало !!! Возможно, это ошибка в pam_mount. Я использую pam_mount-2.5-1.fc12.x86_64 на Centos6. Надеюсь, кто-то еще найдет эту информацию полезной. Спасибо всем, кто комментировал.