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

ДАНО:


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

ЗАДАЧА:


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

На рисунке представлена верхнеуровневая схема взаимодействия компонентов.



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

Столкнувшись с данной задачей и начав гуглить, я был удивлен тому, что подробных описаний по сборке 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
checkinstall 

Если с первого раза ./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'ом.

Комментарии (2)


  1. RicoX
    29.12.2015 23:50

    Пару замечаний к посту.

    make install

    За что же вы так систему свою ненавидите?
    Cleartext-Password

    Жесть, а чего не шифрованный? Хотя-бы так «perl -e 'print(crypt(»passme",«salt»)."\n");'" и в Crypt-Password, если уж заморачиваться не охота.


  1. shudv
    30.12.2015 11:41

    Спасибо, учту.
    Насчет Cleartext — это просто для примера.