Я только что подключил свою рабочую станцию Arch Linux к Samba AD, которую настроил для нашей компании. Я протестировал его, и он работал, по крайней мере, я так думал. Он принял мой пароль, создал мой домашний адрес и все остальное и вошел в систему. Я забыл проверить, что это не стал бы принять. Оказывается, пока имя пользователя действительное (AD или локальное, не имеет значения), он будет принимать любой пароль. Может ли кто-нибудь указать мне на то, что я сделал не так?
Я использую SSSD для управления подключением AD. Вот мой /etc/pam.d/system-auth
:
#%PAM-1.0
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_sss.so use_first_pass
auth required pam_env.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session optional pam_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
Давайте подробно проанализируем раздел аутентификации вашей конфигурации PAM.
auth sufficient pam_unix.so nullok try_first_pass
В первой строке говорится: «Если этот тест прошел успешно, прекратите дальнейшие проверки и примите логин; если он не удастся, продолжайте проверку. Проверьте пользователей / пароли, настроенные в /etc/passwd
и /etc/shadow
.Если пользователь существует и поле пароля пусто, пользователю разрешен вход. "Это проверка аутентификации для учетных записей локальных пользователей.
auth requisite pam_succeed_if.so uid >= 500 quiet
Во второй строке говорится: «Если этот тест завершится неудачно, прекратите дальнейшие проверки и отклоните вход в систему; в случае успеха продолжайте проверку. Значение UID пользователя должно быть 500 или больше». Это предотвращает вход в системные учетные записи с использованием паролей в AD или другой общей базе данных пользователей.
auth sufficient pam_sss.so use_first_pass
В третьей строке говорится: «Если этот тест прошел успешно, прекратите дальнейшие проверки и примите логин; если он не удастся, продолжайте проверку. Проверьте с помощью SSSD». Это проверка для учетных записей AD.
auth required pam_env.so
В четвертой строке говорится: «Если эта строка не работает, отклоните вход в систему; но в любом случае продолжайте проверять до конца этого раздела. Установите любые переменные среды, описанные в /etc/security/pam_env.conf
и / или /etc/environment
. "
Теперь подумайте, что произойдет, если пользователь существует (либо в AD, либо в локальном /etc/passwd
), но проверка пароля не выполняется. Первый, pam_unix.so
терпит неудачу; но это не может вызвать отказ, потому что это помешает вам использовать какие-либо учетные записи пользователей на основе AD.
Итак, процесс переходит ко второй строке. Если у пользователя есть действительное сопоставление UID, а номер UID равен 500 или больше, это тоже будет успешным. Единственный способ, которым это не удалось бы, - это если бы UID был меньше 500.
Третья строка выполняет проверку AD; это тоже не удается. Но опять же, "достаточно" используется, чтобы разрешить настройку любых других методов аутентификации после этого, поэтому процесс продолжается, как и с pam_unix.so
.
На этом этапе должна быть успешно выполнена четвертая строка, чтобы позволить пользователю войти. Но это просто установка переменных среды. man pam_env
говорит мне pam_env.so
модуль вернет значение PAM_SUCCESS, если переменные среды были успешно установлены. Но поскольку это последний модуль PAM в этом стеке, и ни один из других модулей до сих пор не подвергал абсолютному отклонению, результат этого модуля станет общим результатом фазы аутентификации.
Чтобы исправить это, на этапе аутентификации требуется pam_deny.so
в самом конце, чтобы остановить любые попытки входа в систему, когда все фактические механизмы аутентификации не смогли принять пользователя.
Так же pam_env.so
вероятно, должно произойти раньше в процессе, чтобы инициализация переменной среды происходила одинаково для всех допустимых пользователей. Если это не сработает в начале auth
фаза, затем pam_env.so
вероятно, следует пойти в session
вместо фазы; man pam_env
говорит, что он будет работать в любом auth
или session
фазы.
Итак, мое первоначальное предложение - изменить auth
раздел вашей конфигурации PAM на это:
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_sss.so use_first_pass
auth requisite pam_deny.so
Итак, функциональность будет:
Если окажется, что pam_env.so
вызывает проблемы при размещении в начале auth
фаза, вы можете просто прокомментировать ее; похоже, что раньше он пропускался при любом действительном входе в систему.
Как всегда при изменении конфигурации PAM, сначала откройте сеанс в системе и убедитесь, что он sudo
'd root или иным образом имеет полные права root: затем сделайте резервную копию текущей конфигурации. Сделайте изменение но не выходи из системы чтобы проверить это: вместо этого проверьте его, открыв другой сеанс. В случае сбоя у вас все еще есть вход в исходный сеанс, поэтому при необходимости вы можете легко восстановить старую конфигурацию. Если это производственная система или иная критическая, откройте два корневые сеансы перед внесением изменений, просто для защиты от ошибок, связанных с тем, что пальцы работают быстрее, чем мозг.