Сборка и настройка FreeRADIUS 3 с поддержкой SQLITE

Доброго дня, уважаемые.
Хочу поделиться с Вами решением одной творческой задачи. Надеюсь кому-то будет полезно.
Итак,

ДАНО:


маломощная железка с arm процессором и собранный под нее и установленный Debian 7 wheezy.

ЗАДАЧА:


поставить FreeRADIUS 3.0.X, настроить его на работу с БД SQLITE.Т. е., учетные записи пользователей (которых нужно аутентифицировать) RADIUS должен брать из БД SQLITE.
На рисунке представлена верхнеуровневая схема взаимодействия компонентов.

95b53cd538134b359dac6ef45f73a0f2.jpg

Почему я решил описать данное решение?

Столкнувшись с данной задачей и начав гуглить, я был удивлен тому, что подробных описаний по сборке freeradius, а тем более с поддержкой SQLITE просто нет. Поэтому решил законспектировать себе и другим на память.

РЕШЕНИЕ:


Состоит из 3 частей:
1) Сборка Freeradius 3.0.3 (я выбрал эту версию, на более поздних все будет выглядеть примерно также) с поддержкой SQLite;
2) Настройка связки Freeradius и SQLite;
3) Настройка сервера, на котором аутентифицируются пользователи (на рисунке выше — «сервер»).

1 Сборка Freeradius 3.0.3 с поддержкой SQLite


Для успешной сборки radius 3.0.3 нужно выполнить следующие шаги:
1.1 Скачать исходный код: ftp.freeradius.org/pub/freeradius/old/freeradius-server-3.0.3.tar.gz, распаковать в отдельную папку;
1.2 Установить через apt-get следующие пакеты: libtalloc2, libtalloc-dev, libssl-dev, libperl-dev, libpam0g-dev, libsqlite3-dev, libgdbm-dev (если нужна поддержка других БД, то необходимо доставить соответствующий dev пакет, например mysql-dev);
1.3 Перейти в папку с распакованным архивом с исходниками и, тривиально,

./configure
make
make install 


Если с первого раза ./configure не отработает — возможно в системе не хватает еще каких-то пакетов, читаем внимательно вывод и устанавливаем их.

2 Настройка связки Freeradius и SQLite


Для настройки связки freeradius + sqlite необходимо выполнить следующие действия:

2.1 Создать и настроить БД пользователей sqlite


2.1.1 Создать базу sqlite и схему в БД, с которой будет работать radius:

sqlite3 /etc/raddb/sqlite_rad.db < /etc/raddb/mods-config/sql/main/sqlite/schema.sql


/etc/raddb/sqlite_rad.db — это путь к файлу БД, Вы можете разместить его в любом удобном месте.
2.1.2 Создать УЗ пользователя в БД:

sqlite3 /etc/raddb/sqlite_rad.db
insert into radcheck values (‘1’,’user’,’Cleartext-Password’,’:=’,’secret’);


Приведенным выше запросом в БД мы наполняем таблицу radcheck, в которой хранится информация об УЗ пользователей следующей информацией:
Уникальный ID пользователя = 1; имя пользователя = user; атрибут УЗ = Cleartext-Password; оператор = »:=»; значение атрибута = «secret». Если по-русски, то мы задали пароль для УЗ user, который будет хранится в виде открытого текста и его значение — «secret». Подробнее про пары атрибут-значение (av pair) и операторы сравнения можно прочитать в официальной документации по radius и unlang. freeradius.org/radiusd/man/unlang.html

2.2 Настроить freeradius:


2.2.1 Конфигурационные файлы всех доступных модулей radius находятся в /etc/raddb/mods-available. Чтобы включить их, нужно создать ссылку на модуль в папке /etc/raddb/mods-enabled:

cd /etc/raddb/mods-enabled 
ln -s /etc/raddb/mods-available/sql sql


2.2.2 Редактируем /etc/raddb/mods-enabled/sql, следующим образом:

sql {
…………
driver = "rlm_sql_sqlite"
…………
        sqlite {
                filename = "/etc/raddb/sqlite_rad.db"
        }
…………
dialect = "sqlite"
………..


Переменная filename должна указывать на файл БД, созданный в пункте 2.1.1.
2.2.3 Прописываем клиента radius, т.е. тот сервер (или сетевое оборудование), пользователи которого будут аутентифицироваться через данный radius. Для этого добавляем строки в файл /etc/raddb/clients.conf:

client 192.168.0.4 {
       secret          = testing123
       shortname       = new_server
}


secret в данном случае — это секретное слово radius по которому он аутентифицирует клиента.
shortname — произвольное «короткое имя», это значение можно даже опустить.
2.2.4 Проверяем, что в секции «authorize» в файле /etc/raddb/sites-enabled/default присутствует »-sql»:

authorize {
........
-sql
........

3 Настройка клиента RADIUS


3.1 На клиенте установить пакет pam_radius:

apt-get install libpam-radius-auth


3.2 В файле /etc/pam_radius_auth.conf на клиенте добавить строку:

other-server    other-secret       3


где other-server — IP адрес сервера radius, other-secret — секретное слово из пункта 2.2.3 настройки:

192.168.0.2     testing123    3


3.3 В файле /etc/pam.d/sshd над строчками

# Standard Un*x authentication.
@include common-auth


добавить строку

auth       sufficient  pam_radius_auth.so

Вот и все. Запускаем RADIUS и наслаждаемся PROFIT’ом.

© Habrahabr.ru