pam_faillock и AD / CentOS 7.2

Если разделитель может появляться внутри полей, то на самом деле это не разделитель. Вместо этого я бы использовал что-то вроде

KEY=$(sed -n '/^key *=/ { s/^key *= *//; p }' file.conf)

: это ищет строки, начинающиеся с ключа , за которым следует любое количество пробелов и знак = , удаляет начало строки и печатает его . Как указывает dave_thompson_085 , p может быть обусловлено s :

KEY=$(sed -n 's/^key *= *//p' file.conf)

Эквивалентным AWK является

KEY=$(awk '/^key *=/ { sub("^key *= *", ""); print }' file.conf)

, и можно использовать тот же трюк комбинирования:

KEY=$(awk 'sub("^key *= *", "")' file.conf)

2
04.03.2017, 20:26
2 ответа

Ваша проблема заключается в том, что вы не настроили стек PAM соответствующим образом, в частности, количество пропусков в строках, использующих скобки. Если вы не знакомы с этим обозначением,RTFM pam.conf (5 ), в котором также перечислены скобочные эквиваленты слов «требуется», «достаточно» и т. д.

Раздел аутентификации по умолчанию для RHEL 7 с настроенным sssd выглядит следующим образом:

auth        required      pam_env.so
auth        [default=1 success=ok] pam_localuser.so
auth        [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

В строке pam_localuserуказано, что действие по умолчанию — пропустить один модуль (pam_unix, в данном случае ), но в случае успеха (, т. е. пользователь является локальным ), продолжайте работу в обычном режиме. Это сделано для того, чтобы доменные (не -локальные )пользователи не генерировали неудачную попытку входа в систему с pam_unix, а вместо этого сразу переходили к sssd(pam_sssс предварительной проверкой uid >= 1000 ).

Также обратите внимание на настройку default=die в pam_unix, что означает, что неудачный локальный вход прервет стек аутентификации прямо здесь (и даже не попытаетсяpam_sss). Точно так же success=done делает то же самое для успешных входов в систему.

Как уже упоминалось, pam_faillockне применяется к пользователям домена, но если вы используете его для локальных учетных записей и вставляете три вызова вокруг pam_unix, вам нужно будет изменить pam_localuserстроку на default=4 , так что вход в домен продолжит работать. (При default=1 он пропустит pam_faillock, но перейдет к pam_unix, что, очевидно, не удастся для учетных записей домена, и из-за default=die немедленно прервется. Установка по умолчанию = 4 приведет к переходу к pam_succeed_if, как это было раньше.)

Я не знаком с pam_faillock, поэтому не могу сказать, правильно ли вызывать его снова после pam_unix, но если это так, вам также нужно что-то сделать с success=done и default=die on pam_unix, иначе он никогда не дойдет до pam_faillockдля блокировки/разблокировки учетных записей.

Это сложный стек PAM; вы можете ознакомиться с примерами конфигураций в pam _faillock (8). Убедитесь, что вы случайно не впустили всех в (, надеюсь, pam_denyв конце позаботится об этом ),и не забудьте настроить все default=N счетчики при добавлении или удалении последующих строк.

TL;DR:[default=1]означает пропуск одной строки после(pam_unixв данном случае ). Добавление строк требует корректировки количества.

3
27.01.2020, 22:10

Это мой пароль -файл авторизации, и он работает нормально:

# Setup PAM Env
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=4000000
# Check if Local User, if fail skip to SSSD part
auth        [success=ok default=4]  pam_localuser.so

# Local User - Load pre-auth, if fail end
auth        [success=ok default=2]  pam_faillock.so preauth deny=3 unlock_time=604800 fail_interval=900

# Local User - Attempt Auth, if fail end
auth        [success=ok default=1]  pam_unix.so

# Lcaol User - Sucess, clear lock tally, end
auth        [default=done]          pam_faillock.so authsucc

# Local User - Fail, update lock tally, end
auth        [default=die]           pam_faillock.so authfail deny=3 unlock_time=604800 fail_interval=900

# SSSD User  - Ensure uid is not system uid
auth        requisite     pam_succeed_if.so debug uid >= 1000

# SSSD User  - Attempt Auth
auth        sufficient    pam_sss.so

# Catchall   - Default result if nothin passes
auth        required      pam_deny.so

account     required      pam_faillock.so
account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
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_systemd.so
session     optional      pam_oddjob_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

Пользователь AD не отображается в выходных данных блокировки после неудачного входа в систему, в отличие от локального пользователя.

ОБНОВЛЕНИЕ :Я добавил несколько комментариев, объясняющих важные шаги в конфигурации PAM. Надеюсь это поможет.

1
27.01.2020, 22:10

Теги

Похожие вопросы