Вопрос или проблема
Итак, я настроил 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 чаще всего возникают из-за:
- Недостаточных разрешений: Ошибка "Permission denied" может указывать на проблемы с аутентификацией или правами доступа к сетевому ресурсу.
- Ошибок конфигурации PAM: Различные версии и дистрибутивы Linux могут иметь небольшие, но важные отличия в PAM-стеке, которые могут повлиять на работу pam_mount.
- Настройки SELinux: Включенное SELinux может блокировать нужные процессы или доступ к ресурсам, что также может привести к ошибкам монтирования.
Пример
В вашем /var/log/messages можно увидеть, что ошибка начинается с "mount error(13): Permission denied", что часто связано с неправильными учетными данными или проблемами с аутентификацией. Далее CIFS VFS сообщает "NT_STATUS_LOGON_FAILURE", что может быть связано с неправильной настройкой параметров безопасности CIFS или неверными учетными данными.
Также наблюдаются сообщения о неудачной размонтировке, что может быть результатом ошибки монтирования на первом этапе, после чего pam_mount не может выполнить операцию размонтирования.
Применение
Теперь обсудим шаги, которые вы можете предпринять для решения данной проблемы:
-
Проверка учетных данных и прав доступа:
- Убедитесь, что у вас есть правильные учетные данные для доступа к файловому ресурсу CIFS. Часто ошибка NT_STATUS_LOGON_FAILURE указывает на неправильные или устаревшие учетные данные.
- Проверьте, имеют ли пользователи подходящие права доступа на CIFS-сервере для монтирования директории.
-
Настройки 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.
- Проверьте, что добавление
-
Обновление конфигурации pam_mount.conf.xml:
- Убедитесь, что
options="sec=ntlmsspi,nodev,nosuid"
соответствуют специфическим требованиям вашей сети и сервера. Иногда, использование "sec=ntlm" вместо "sec=ntlmsspi" помогает решить проблемы совместимости. - Рассмотрите возможность добавления параметра
vers=2.0
в раздел options, чтобы соответствовать версии протокола CIFS, используемой сервером.
- Убедитесь, что
-
Проверка SELinux:
- Временно отключите SELinux для диагностики:
setenforce 0
. Если проблема решилась, значит, необходимо отладить политику SELinux для pam_mount и CIFS.
- Временно отключите SELinux для диагностики:
-
Диагностика и тестирование:
- Используйте команды
mount.cifs
вручную для диагностики логов: попробуйте монтировать ресурс без pam_mount, это поможет проверить правильность определения пути, сервера, опций и учетных данных. - Перезапустите службы sshd и auth после каждого изменения конфигурации, чтобы убедиться, что изменения были применены.
- Используйте команды
-
Обновление системы:
- Убедитесь, что ваша система и все пакеты обновлены до актуальных версий. В некоторых случаях обновления могут включать фиксы для известных проблем с PAM или CIFS.
Следуя этим шагам и диагностируя каждый этап, вы сможете выявить, где происходит нарушение в процессе монтирования и исправить его. Поскольку вы успешно использовали pam_mount в других версиях CentOS, вероятно, специфическая конфигурация системы в версии 6.xx или небольшие отличия в PAM ведут к этой проблеме. Надеюсь, эти советы помогут вам настроить pam_mount должным образом.