Вопрос или проблема
Я попытался отредактировать файл /etc/pam.d/su
, чтобы достичь следующего:
-
Когда текущий пользователь
userX
выполняетsu userM
, пароль не требуется. Я использовал следующую конфигурацию:auth [success=ignore default=1] pam_succeed_if.so user = userM auth sufficient pam_succeed_if.so use_uid user = userX
-
Когда текущий пользователь
userY
выполняетsu userN
, пароль не требуется. Я использовал следующую конфигурацию:auth [success=ignore default=1] pam_succeed_if.so user = userN auth sufficient pam_succeed_if.so use_uid user = userY
Странная проблема заключается в том, что если я настраиваю только userX --> userM
или только userY --> userN
, оба работают как ожидается.
Однако, когда я настраиваю обе секции одновременно, работает только последняя конфигурация (userY --> userN
). При попытке выполнить su
с userX
я получаю следующую ошибку:
su: failed to user credentials: The return value should be ignored by PAM dispatch
Сделал ли я ошибку в конфигурации где-то?
Ответ или решение
Конфигурация PAM (Pluggable Authentication Modules), касающаяся управления доступом для командного доступа с помощью su
, может быть сложной. Ваша проблема заключается в том, что при попытке настроить одновременный доступ для пользователя userX
к userM
и пользователя userY
к userN
, один из этих конфигурационных блоков не работает как ожидается. Давайте рассмотрим возможные причины и решения для вашей ситуации.
Понимание текущей конфигурации
Ваши конфигурации выглядят следующим образом:
-
Для перехода от
userX
кuserM
:auth [success=ignore default=1] pam_succeed_if.so user = userM auth sufficient pam_succeed_if.so use_uid user = userX
-
Для перехода от
userY
кuserN
:auth [success=ignore default=1] pam_succeed_if.so user = userN auth sufficient pam_succeed_if.so use_uid user = userY
Объяснение компонентов конфигурации
auth [success=ignore default=1] pam_succeed_if.so user = userM
: Если текущий пользователь являетсяuserM
, пропустите проверку и продолжите к следующему модулю.auth sufficient pam_succeed_if.so use_uid user = userX
: Если текущий пользовательuserX
, разрешите доступ, не требуя пароля.
Анализ проблемы
Странное поведение, которое вы наблюдаете, может быть связано с тем, что PAM обрабатывает модули в последовательности. Когда оба правила включены, первое правило для userY
может блокировать доступ к userX
.
Причины проблемы:
-
Порядок модулей: PAM обрабатывает правила сверху вниз. Если один из модулей возвращает неудачу до того, как будет достигнут модуль, обеспечивающий доступ для другого пользователя, второй пользователь получит сообщение об ошибке.
-
Стандартное поведение PAM: При использовании модуля
pam_succeed_if.so
возможно, что конфигурация не возвращает ожидаемое значение при наличии нескольких условий в одном контексте, что может вызвать конфликт. -
Конфликт условий: Возможно, в вашем сценарии конфигурирование обеих проверок сразу может привести к тому, что PAM не может корректно определить, какой из условий должен сработать.
Решение проблемы
Для решения этой проблемы попробуйте изменить порядок и структуру конфигураций следующим образом:
auth [success=ignore default=1] pam_succeed_if.so user = userM
auth [success=ignore default=2] pam_succeed_if.so user = userN
auth sufficient pam_succeed_if.so use_uid user = userX
auth sufficient pam_succeed_if.so use_uid user = userY
Дополнительные рекомендации
-
Тестирование конфигурации: Вы можете протестировать свою конфигурацию, подключаясь под каждым пользователем и проверяя доступ. Это поможет выявить, работает ли намеренная логика.
-
Логи PAM: Проверьте журналы системы (например,
/var/log/auth.log
или/var/log/secure
в зависимости от дистрибутива) для получения более подробной информации о причинах отказов. -
Обратитесь к документации: Ознакомьтесь с документацией по PAM, особенно с разделами, касающимися модуля
pam_succeed_if.so
, чтобы лучше понять, как работает его логика.
Заключение
Настройка PAM требует внимания к деталям и понимания порядка обработки модулей. Попробуйте предложенные изменения, проверьте логи для более глубокого анализа и не стесняйтесь экспериментировать с конфигурациями, чтобы достичь нужного результата. Если проблема сохранится, возможно, стоит рассмотреть альтернативные подходы к аутентификации или обратиться за помощью к сообществу специалистов.