Аутентификация · 6 min read · Dec 28, 2025

Настройка SSH для использования Freeradius и WiKID для двухфакторной аутентификации

Настройка SSH для использования Freeradius и WiKID для двухфакторной аутентификации

Radius — это отличный стандарт. Он достаточно мощный, чтобы выполнять множество задач, и достаточно прост, чтобы с ним было легко работать. Freeradius — это отличный сервер radius с открытым исходным кодом, который поставляется с многими дистрибутивами Linux. Он хорошо документирован и поддерживается. Сервер WiKID Strong Authentication — это коммерческая/открытая система двухфакторной аутентификации, которая использует шифрование с открытым ключом для безопасной передачи PIN-кодов и одноразовых паролей программным токенам, работающим на Blackberries, мобильных телефонах, Palms, PocketPC или, используя клиент J2SE, на Linux, Mac и Windows ПК. Вы можете рассматривать WiKID как сертификаты, но без хлопот с белыми/черными списками и более безопасно — потому что PIN-код проверяется на сервере, предотвращая оффлайн-атаки методом перебора.

Компании, которым необходимо соответствовать требованиям, таким как PCI-DSS или HIPAA, могут потребовать обеспечить безопасность своих сетей с помощью двухфакторной аутентификации и строго контролируемого доступа. Сочетание Freeradius и WiKID — это высокоэффективный способ достижения этой цели.

В этом примере я устанавливаю Freeradius на Fedora Core 7 и запускаю 3.0RC2 rpms WiKID на Centos5 (тем не менее, те же инструкции будут работать для версии 2.0 WiKID). Мы будем тестировать с SSH, однако такая же настройка должна работать для Apache, WebDAV, OpenVPN и любого другого приложения, поддерживающего PAM.

Установка и настройка Freeradius

Неважно, какой дистрибутив Linux вы используете, вероятно, существует пакет для Freeradius. Для Fedora установка через Yum проста:

yum install freeradius

Настройка Freeradius довольно проста. Однако есть много опций. Главное — изменять только минимальные элементы, которые вы понимаете. Настройки по умолчанию работают, поэтому вносите небольшие изменения и тестируйте их. Мы изменим три файла. Файл /etc/raddb/clients.conf указывает Freeradius, каких клиентов принимать. Файл proxy.conf указывает Freeradius отправлять пакеты аутентификации на сервер WiKID, а файл radiusd.conf настраивает основной сервер Freeradius.

Сначала отредактируйте файл /etc/raddb/clients.conf:

vi /etc/raddb/clients.conf
client 127.0.0.1 {
        secret          = shared_secret
        shortname       = localhost
        nastype     = other
}

Все, что вам нужно изменить на данный момент, это общий секрет, так как мы будем входить на сервер Freeradius через SSH в качестве нашего теста.

Затем проверьте, что запросы могут быть проксированы в файле radiusd.conf. Это было так на Fedora:

vi /etc/raddb/radiusd.conf
proxy_requests  = yes
$INCLUDE  ${confdir}/proxy.conf

Наконец, добавьте сервер WiKID Strong Authentication в качестве действительного прокси в proxy.conf:

vi /etc/raddb/proxy.conf
#  Эта область предназначена для запросов, которые не имеют явного префикса или суффикса области.
#  Имена пользователей, такие как "bob", будут соответствовать этой.
#
realm NULL {
        type            = radius
        authhost        = WIKIDSERVER_IP:1812
#       accthost        = WIKIDSERVER_IP:1813
        secret          = shared_secret
}

Не нужно и говорить, измените WIKIDSERVER_IP и shared_secret на IP-адрес вашего сервера WiKID и общий секрет. Он, вероятно, должен отличаться от общего секрета, используемого для клиента.

Для дополнительной безопасности вам следует ограничить права на эти файлы:

chmod a-rwx,u+r /etc/raddb/proxy.conf

chmod a-rwx,u+r /etc/raddb/clients.conf

Теперь запустите Freeradius:

service radiusd start

Настройка PAM SSH

Сначала вам нужно установить PAM Radius. На сайте PAM Radius есть отличная документация по этому поводу. В зависимости от вашего дистрибутива вы также можете найти подходящий бинарный файл. У меня не было проблем с компиляцией этого на Fedora 7:

# ./configure  
# make  
# make install

Отредактируйте /etc/pam.d/sshd, чтобы разрешить аутентификацию Radius:

vi /etc/pam.d/sshd

Перейдите ко второй строке файла, нажмите клавишу Insert или клавишу i и вставьте эту строку:

auth     sufficient   /lib/security/pam_radius_auth.so 

прямо над этой строкой:

auth     required     pam_stack.so service=system-auth

Тег “sufficient” указывает на то, что если аутентификация Radius проходит успешно, то дополнительная аутентификация не потребуется. Однако, если аутентификация Radius не проходит, будет работать имя пользователя и пароль из системы. Используйте “Required”, чтобы требовать строгую аутентификацию. Поскольку мы редактируем только файл sshd, это не повлияет на вход в терминал. PAM может сильно различаться на разных дистрибутивах Linux. Обратитесь к конкретной документации для вашей ОС.

Отредактируйте или создайте ваш файл /etc/raddb/server:

vi /etc/raddb/server

Под строкой:

127.0.0.1   secret        1

Добавьте эту строку:

localhost   shared_secret     1

Наконец, я убедился, что аутентификация PublicKey была отключена в /etc/sshd/sshd_config:

PubkeyAuthentication no

Настройка сервера WiKID

Теперь мы настроим сервер WiKID для обработки одноразовых паролей от Freeradius. Мы предполагаем, что вам также нужно настроить новый домен WiKID. Если у вас уже есть один, вы можете пропустить эту часть. Дополнительная документация по установке WiKID доступна здесь.

Войдите на сервер WiKID и нажмите на вкладку Domains.

Нажмите на Create a New Domain.

Введите запрашиваемую информацию. Код сервера домена — это IP-адрес сервера WiKID с нулями в начале. Итак, если внешний IP-адрес 216.239.51.99, код сервера WiKID будет 216239051099. Нажмите “Create”. (Очевидно, если у вас уже есть настроенный домен, вы можете пропустить этот шаг.)

Нажмите на вкладку Network Clients и на “Create a new Network Client”.

Введите запрашиваемую информацию. Для IP-адреса используйте IP-адрес сервера Freeradius. Выберите Radius и домен, который вы только что создали. Нажмите “Add”, когда закончите.

На следующей странице введите общий секрет, который вы ввели в файле /etc/raddb/proxy.conf сервера Freeradius. Не нужно вводить никакую информацию в разделе “Return Attributes”.

Важно: С терминала WiKID или через SSH вам нужно будет выполнить “wikidctl stop”, а затем “wikidcl start”, чтобы загрузить новую конфигурацию на сервер WiKID Radius. (Пользователи WiKID 2.0 просто выполняют “stop” и “start”.)

Тестирование Freeradius с одноразовыми паролями

Скачайте и установите клиент WiKID Token. Вы можете вручную подтвердить себя как пользователя через веб-интерфейс WiKIDAdmin. После подтверждения выберите домен, связанный с ресурсом Freeradius:

token1.jpg

Введите PIN:

token2.jpg

И вы получите одноразовый пароль. OTP ограничен по времени, но время можно установить на сервере WiKID на любое значение:

token3.jpg

Теперь выполните ssh на вашем сервере Freeradius:

ssh user@freeradius_server

Когда будет предложено, введите одноразовый пароль WiKID — он должен автоматически быть скопирован в ваш буфер обмена, поэтому ctrl-c или shift-ins должны сработать. Вам должен быть предоставлен доступ. Если нет, есть несколько журналов для проверки. Сначала проверьте /var/log/secure на вашем сервере Freeradius, чтобы увидеть, почему пользователь был отклонен. Если вы видите “Все серверы RADIUS не ответили.”, убедитесь, что radiusd работает на порту 1812. Проверьте журналы Freeradius по адресу /var/log/radius/radius.log и журнал RADIUS WiKID по адресу /opt/WiKID/log/radius.log на сервере WiKID.

Альтернативная конфигурация: Freeradius в качестве резервного

Одно из преимуществ использования PAM Radius заключается в том, что серверы могут быть связаны в файле /etc/raddb/server. Если верхние серверы не отвечают, следующий сервер попытается аутентифицировать пользователя. Чтобы прояснить: если первый сервер отвечает с ошибкой аутентификации, пользователь отклоняется. Только если нет ответа второй сервер radius будет проверен. Эта резервная возможность может быть особенно полезной, если ваш сервер WiKID находится в удаленном дата-центре. Настроив PAM на прямое взаимодействие с WiKID и резервное копирование на Freeradius, вы создаете решение для аварийного восстановления в случае аппаратного сбоя.

Сначала измените файл /etc/raddb/server, чтобы он указывал на сервер WiKID первым, а затем на сервер Freeradius, работающий на localhost:

# server[:port] shared_secret      timeout (s)
127.0.0.1:1812        shared_secret        1
WIKIDSERVER_IP:1812   shared_secret      3
localhost:1812        shared_secret          2

Мне пришлось внести некоторые небольшие изменения, чтобы заставить Freeradius работать с /etc/passwd. Сначала мне пришлось изменить группу radiusd в /etc/raddb/radiusd.conf на shadow:

user = radiusd
group = shadow

Затем мне пришлось предоставить группе shadow права на /etc/passwd:

chgrp shadow /etc/shadow

chmod g+r /etc/shadow

Теперь, если сервер WiKID по какой-то причине выйдет из строя, у вас будет автоматический резервный доступ к вашему файлу /etc/passwd.

Заключение

Radius — это отличный стандарт для аутентификации удаленных пользователей. Сочетание Freeradius с WiKID Strong Authentication создает мощное, гибкое и безопасное решение.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.