Для настройки двух факторной авторизации для пользователя root мы будем использовать Google Authenticator. Данное приложение доступно для всех платформ и имеет временную зависимость. Таким образом даже в случае если доступ к сервисам google будет невозможен - главное чтобы было синхронизировано время, тогда все будет корректно работать.
В нашем примере мы сделаем так, чтобы обычный пользователь заходил в ssh используя пароль, как и обычно, а при попытке повысить привилегии до пользователя root используя команду su - , сначала требовалось ввести пароль и потом код из приложения Google Authenticator.
При этом запретим в ssh заходить от пользователя root, чтобы принудительно заставить использовать для данного пользователя двухфакторную авторизацию.
1. Установим необходимые пакеты:
apt install libpam-google-authenticator
2. Произведем первую настройку:
./google-authenticator
2.1 В итоге будет предложено ввести код из приложения, также как альтернативу google приложению Вы можете использовать FreeOTP.
2.2 Настроим службу SSH:
nano /etc/ssh/sshd_config
PermitRootLogin no
UsePAM yes
ChallengeResponseAuthentication yes
Перезапустим службу чтобы настройки вступили в силу:
systemctl restart ssh
2.3 Настроим запрос кода после ввода пароля для команды su -
Добавим строки, чтобы файл выглядел так:
nano /etc/pam.d/su
...
auth sufficient pam_rootok.so
...
auth required pam_unix.so no_warn try_first_pass
auth required pam_google_authenticator.so
...
3. Готово, можно проверить работу, после логина под обычным пользователем и попыткой переключиться в root командой su после ввода пароля будет запрошен код из приложения.
Также:
3.1 Если Вы хотите делать запрос кода при попытке подключится к ssh, то Вам нужно будет добавить данные строки в файл:
nano /etc/pam.d/sshd
...
@include common-auth
...
auth required pam_unix.so no_warn try_first_pass
auth required pam_google_authenticator.so
...
В случае использования пользователя root, разрешить логин в настройках ssh, в случае другого пользователя запустить команду:
./google-authenticator
из-под обычного пользователя и настроить аналогично как мы описали это для пользователя root.