Сегодня я расскажу как настроить двухэтапную аутентификацию для пользователя root на вашем сервере по временному одноразовому паролю, что будет генерировать приложение на телефоне или же простая консоль. Смысл в том, что при переходе в суперпользователя на вашем сервере вначале будет запрошен временный (одноразовый) пароль и только затем — пароль рута. Это поможет вам более качественно защитить ваш сервер от несанкционированного доступа.
Начнём с установки OATH Toolkit что уже есть в репозитории Debian.
apt-get install oathtool libpam-oath
Далее нам потребуется сгенерировать случайную строку (секретную фразу) на основе которой и будут генерироваться случайные временные одноразовые ключи. Поэтому стоит держать эту строку в секрете.
head -c 4096 /dev/urandom | md5sum | awk '{print $1}'
6819c89679c56508fec770362e312c4e
В данном примере секретная фраза это 6819c89679c56508fec770362e312c4e.
Теперь нам необходимо создать файл (/etc/users.oath
) с описанием алгоритмов работы, пользователя и его секретной фразы.
echo "HOTP/T30 root - 6819c89679c56508fec770362e312c4e" > /etc/users.oath
chown root:root /etc/users.oath
chmod 600 /etc/users.oath
Далее – редактирование файла /etc/pam.d/su
.
Вам необходимо дописать после
auth sufficient pam_rootok.so
строку
auth requisite pam_oath.so usersfile=/etc/users.oath window=10 digits=6
Где
usersfile
– путь к файлу с описанием пользователей и их секретных фраз,
window
– размер “окна”. Поскольку временный одноразовый ключ создаётся относительно времени, то окно – это расхождение серверного времени от времени клиента/приложения. Одно “окно” – 30 секунд. Т.е. мы задали максимальное расхождение ключей в 5 минут.
digits
– необходимое количество цифр во временном одноразовом ключе.
Теперь пробуем получить одноразовый временный пароль с нашей секретной фразой:
oathtool --verbose --totp 6819c89679c56508fec770362e312c4e
На что получим что-то следующее:
Hex secret: 6819c89679c56508fec770362e312c4e
Base32 secret: NAM4RFTZYVSQR7WHOA3C4MJMJY======
Digits: 6
Window size: 0
Step size (seconds): 30
Start time: 1970-01-01 00:00:00 UTC (0)
Current time: 2014-04-15 05:36:28 UTC (1397540188)
Counter: 0x2C6D360 (46584672)
385762
385762 – это и есть наш одноразовый временный пароль, а вот строку Base32 secret мы будем использовать когда будем настраивать приложение для телефона (только вводить мы будем этот код без знаков “=”, т.е. как NAM4RFTZYVSQR7WHOA3C4MJMJY).
У Google есть отличная программа для генерирования временных (одноразовых) ключей – Google Authenticator
На официальной странице детально расписано как установить это приложение для телефонов на базе Android, iOS, Blackberry и т.п. поэтому на этом шаге я останавливаться не буду.
И наконец тестируем!
Подключаемся к серверу другим соединением (на всякий случай не закрывайте сессию root!) и пробуем сделать su
Система должна нас вначале спросить одноразовый временный пароль.
$ su
One-time password (OATH) for `root':
Генерируем одноразовый временный пароль либо через консоль с помощью команды oathtool
, либо через приложение на вашем телефоне и вводим его.
Если вы всё сделали правильно, то после ввода временного пароля система вам предложит ввести пароль рута.
Это всё. Удачи!