Ситуация:
Я активировал Google Authenticator 2FA для входа по SSH в Ubuntu 16.04, но сделал это необязательным в /etc/pam.d/sshd:
auth required pam_google_authenticator.so nullok
Я установил 2FA для учетных записей, которые могут входить в систему из Интернета, но не для учетных записей, доступ к которым ограничен из той же подсети, потому что есть запущенные cronjobs, которые должны передавать данные с сервера на сервер.
Это отлично работает для любой учетной записи, кроме корень который, конечно, ограничен только одним IP-адресом, потому что производственный и резервный серверы должны обмениваться ключами SSL.
Случай A: Когда я пытаюсь войти в систему с учетной записью обычного пользователя с ключом SSH, но без 2FA: нет проблем.
Случай B: когда я пытаюсь войти в систему с root с ключом SSH, но без 2FA, я получаю эту ошибку в /var/log/auth.log:
Aug 20 23:39:59 host01 sshd[28638]: fatal: Internal error: PAM auth succeeded when it should have failed
Ваша помощь будет очень признательна.
Это ожидаемое поведение. Предполагая, что у вас было PermitRootLogin without-password
, справочная страница для PermitRootLogin
говорит:
If this option is set to prohibit-password or without-password, password and keyboard-interactive authentication are disabled for root.
PAM считается интерактивным с клавиатуры. Поэтому с PermitRootLogin without-password
PAM не должен позволять root входить в систему, что вы наблюдали.
Есть разница между without-password
и yes
для этого варианта. Вы только что это заметили. С участием yes
, вы можете войти в систему с паролями или PAM, а также с without-password
вы не можете войти с помощью этих методов. Вы все еще можете войти, например, с открытым ключом.
Изменение PermitRootLogin
к yes
решает вашу проблему, но учтите, что вся эта головная боль есть причина. Если только ты не действительно знай, что делаешь, PermitRootLogin
должен быть установлен на no
. Если вам нужно удаленно выполнять рутинные операции, войдите как пользователь сsudo
привилегии.