pam_mount не работает при входе через ssh или консоль.

Вопрос или проблема

Итак, я настроил pam_mount на моем компьютере с CentOS 6 так же, как на машинах с CentOS 7 и 5.

Но когда я вхожу в систему локально или через ssh, pam_mount не может подключить мой домашний каталог. Когда я вхожу с локальным пользователем, и выполняю su к пользователю, которому нужно смонтировать домашний каталог, pam_mount работает нормально и монтирует каталог.

Ошибка, которую я получаю при подключении через ssh или входе с консоли, найдена в /var/log/messages:

Feb 13 14:27:52 centosy sshd[1224]: pam_mount(mount.c:64): Errors from underlying mount program:
Feb 13 14:27:52 centosy sshd[1224]: pam_mount(mount.c:68): mount error(13): Permission denied
Feb 13 14:27:52 centosy sshd[1224]: pam_mount(mount.c:68): Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
Feb 13 14:27:52 centosy sshd[1224]: pam_mount(pam_mount.c:521): mount of tomas failed
Feb 13 14:27:52 centosy sshd[1224]: pam_mount(pam_mount.c:172): conv->conv(...): Conversation error
Feb 13 14:27:52 centosy sshd[1224]: pam_mount(pam_mount.c:476): warning: could not obtain password interactively either
Feb 13 14:28:00 centosy sshd[1224]: pam_mount(mount.c:64): umount messages:
Feb 13 14:28:00 centosy sshd[1224]: pam_mount(mount.c:68): umount: /home/tomas: not mounted
Feb 13 14:28:00 centosy sshd[1224]: pam_mount(mount.c:722): unmount of tomas failed
Feb 13 14:33:59 centosy kernel: Status code returned 0xc000006d NT_STATUS_LOGON_FAILURE
Feb 13 14:33:59 centosy kernel: CIFS VFS: Send error in SessSetup = -13
Feb 13 14:33:59 centosy kernel: CIFS VFS: cifs_mount failed w/return code = -13

мой pam.d/system-auth:

#%PAM-1.0
# Этот файл создается автоматически.
# Изменения пользователя будут уничтожены при следующем запуске authconfig.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so
auth        optional      pam_mount.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so
session     optional      pam_mount.so
session     required      pam_mkhomedir.so skel=/etc/skel/ umask=0022

мой pam.d/password-auth:

#%PAM-1.0
# Этот файл создается автоматически.
# Изменения пользователя будут уничтожены при следующем запуске authconfig.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so
auth        optional      pam_mount.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so
session     optional      pam_mount.so
session     required      pam_mkhomedir.so skel=/etc/skel/ umask=0022

мой pam_mount.conf.xml:

?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<!--
        См. pam_mount.conf(5) для описания.
-->

<pam_mount>

            <!-- debug должен быть перед всем остальным,
                так как этот файл все еще обрабатывается в один проход
                сверху вниз -->

<debug enable="0" />

                <!-- Определения томов -->
<volume user="*" fstype="cifs" server="zentyal" path="%(DOMAIN_USER)" mountpoint="/home/%(DOMAIN_USER)" options="sec=ntlmsspi,nodev,nosuid" />

                <!-- Параметры pam_mount: Основные настройки -->

<!--
<luserconf name=".pam_mount.conf.xml" />
-->

<!-- Обратите внимание, что комментирование mntoptions даст вам значения по умолчанию.
     Вам нужно будет явно инициализировать его пустой строкой
     чтобы сбросить значения по умолчанию к нулю. -->
<mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other" />
<!--
<mntoptions deny="suid,dev" />
<mntoptions allow="*" />
<mntoptions deny="*" />
-->
<mntoptions require="nosuid,nodev" />

<logout wait="0" hup="0" term="0" kill="0" />


                <!-- Параметры pam_mount: Связанные с томом -->

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


</pam_mount>

Кто-нибудь видит ошибку и знает, как это исправить?

Вы можете следовать моей инструкции. Это работает для меня на CentOS 7.0 и 7.1, но не тестировалось на CentOS 6.X.

Шаг 1: Установите pam_mount и cifs-utils.

Шаг 2: Пожалуйста, только настройте файл /etc/pam.d/password-auth, добавьте только 2 строки (одна вверху, и одна в конце файла)

auth        required      pam_mount.so
auth        required      pam_env.so

# ... содержимое файла ...

session     optional      pam_winbind.so
session     optional      pam_mount.so

Шаг 3: Настройте /etc/security/pam_mount.conf.xml

    <!-- Параметры pam_mount: Связанные с томом -->
    <mkmountpoint enable="1" remove="true" />

    <volume user="*" fstype="cifs" server="fileserver" path="общая_папка" mountpoint="/mnt/" options="sec=ntlm,nodev,nosuid" />
</pam_mount>

Запомните: Отключите SElinux.

Ответ или решение

Ваша проблема с pam_mount в CentOS 6, по сравнению с тем, как он работает на CentOS 7 и 5, представляет собой распространенный и сложный вопрос, связанный с специфическими настройками и ограничениями версии системы. Попробуем разобраться и предложить возможные решения.

Теория

pam_mount — это модуль PAM, который позволяет автоматически монтировать файловые системы при входе пользователя в систему и размонтировать их при выходе. В вашем случае вы используете pam_mount для монтирования домашних директорий с файлового сервера с использованием протокола CIFS. Это обеспечивает удобный доступ к ресурсам сетевого сервера для всех пользователей, но взаимодействие с pam_mount требует точной настройки и правильной конфигурации PAM-стека.

Проблемы с pam_mount чаще всего возникают из-за:

  1. Недостаточных разрешений: Ошибка "Permission denied" может указывать на проблемы с аутентификацией или правами доступа к сетевому ресурсу.
  2. Ошибок конфигурации PAM: Различные версии и дистрибутивы Linux могут иметь небольшие, но важные отличия в PAM-стеке, которые могут повлиять на работу pam_mount.
  3. Настройки SELinux: Включенное SELinux может блокировать нужные процессы или доступ к ресурсам, что также может привести к ошибкам монтирования.

Пример

В вашем /var/log/messages можно увидеть, что ошибка начинается с "mount error(13): Permission denied", что часто связано с неправильными учетными данными или проблемами с аутентификацией. Далее CIFS VFS сообщает "NT_STATUS_LOGON_FAILURE", что может быть связано с неправильной настройкой параметров безопасности CIFS или неверными учетными данными.

Также наблюдаются сообщения о неудачной размонтировке, что может быть результатом ошибки монтирования на первом этапе, после чего pam_mount не может выполнить операцию размонтирования.

Применение

Теперь обсудим шаги, которые вы можете предпринять для решения данной проблемы:

  1. Проверка учетных данных и прав доступа:

    • Убедитесь, что у вас есть правильные учетные данные для доступа к файловому ресурсу CIFS. Часто ошибка NT_STATUS_LOGON_FAILURE указывает на неправильные или устаревшие учетные данные.
    • Проверьте, имеют ли пользователи подходящие права доступа на CIFS-сервере для монтирования директории.
  2. Настройки pam_mount и PAM:

    • Проверьте, что добавление auth required pam_mount.so и session optional pam_mount.so в начале и в конце вашего /etc/pam.d/password-auth помогает исправить проблему, как это работает для других версий CentOS.
    • Перенесите эти строки из system-auth в password-auth, как это предлагают работать на CentOS 7.
  3. Обновление конфигурации pam_mount.conf.xml:

    • Убедитесь, что options="sec=ntlmsspi,nodev,nosuid" соответствуют специфическим требованиям вашей сети и сервера. Иногда, использование "sec=ntlm" вместо "sec=ntlmsspi" помогает решить проблемы совместимости.
    • Рассмотрите возможность добавления параметра vers=2.0 в раздел options, чтобы соответствовать версии протокола CIFS, используемой сервером.
  4. Проверка SELinux:

    • Временно отключите SELinux для диагностики: setenforce 0. Если проблема решилась, значит, необходимо отладить политику SELinux для pam_mount и CIFS.
  5. Диагностика и тестирование:

    • Используйте команды mount.cifs вручную для диагностики логов: попробуйте монтировать ресурс без pam_mount, это поможет проверить правильность определения пути, сервера, опций и учетных данных.
    • Перезапустите службы sshd и auth после каждого изменения конфигурации, чтобы убедиться, что изменения были применены.
  6. Обновление системы:

    • Убедитесь, что ваша система и все пакеты обновлены до актуальных версий. В некоторых случаях обновления могут включать фиксы для известных проблем с PAM или CIFS.

Следуя этим шагам и диагностируя каждый этап, вы сможете выявить, где происходит нарушение в процессе монтирования и исправить его. Поскольку вы успешно использовали pam_mount в других версиях CentOS, вероятно, специфическая конфигурация системы в версии 6.xx или небольшие отличия в PAM ведут к этой проблеме. Надеюсь, эти советы помогут вам настроить pam_mount должным образом.

Оцените материал
Добавить комментарий

Капча загружается...