Модули PAM
могут обеспечить уровень гибкости, который позволит достичь почти именно того, что вы хотите. Основываясь на вашем ответе в комментарии, вы были бы счастливы разрешить su
предложить три попытки, прежде чем они потерпят неудачу. Это то, что я предлагаю здесь.
Я настоятельно рекомендую делать резервную копию каждого PAM
файла конфигурации, который вы изменяете, и чтобы у вас уже была открыта корневая оболочка, готовая отменить сломанные изменения. После любого изменения в PAM
очень важно проверить, можете ли вы войти в систему и получить root-доступ. Если вы ошиблись, вы можете полностью промыть всю систему.
Файлы PAM
находятся в /etc/pam.d
, и вам потребуется root-доступ для их изменения.
Файл su
в Debian 8 содержит одну строку аутентификации и ссылку на включаемый файл common-auth
. Собирая их вместе, мы получаем следующее:
auth sufficient pam_rootok.so
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
Самое интересное - это вызов pam_unix.so
, который выполняет аутентификацию по базе данных паролей ( / etc / passwd
и / etc / тень
). Компонент [success = N]
сообщает PAM
, что если модуль возвращает статус успеха, он должен пропустить следующие N модулей.Поэтому, если вы получите успешный возврат от pam_unix.so
, конфигурация пропустит модуль отказа pam_deny.so
.
Мы можем использовать этот подход для создания еще двух попыток аутентификации, например:
auth sufficient pam_rootok.so
auth [success=3 default=ignore] pam_unix.so nullok_secure
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
Итак, работа выполнена.
Обратите внимание: если вы используете SAMBA или какую-либо другую схему внешней аутентификации, вам нужно будет немного скорректировать изменения. На одной из моих систем есть такая дополнительная проверка через pam_winbind.so
. Это также должно быть воспроизведено, поэтому вы должны перейти от этого:
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth requisite pam_deny.so
к этому:
auth [success=6 default=ignore] pam_unix.so nullok_secure
auth [success=5 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth [success=4 default=ignore] pam_unix.so nullok_secure
auth [success=3 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth requisite pam_deny.so