Доброго дня, уважаемые.
Хочу поделиться с Вами решением одной творческой задачи. Надеюсь кому-то будет полезно.
Итак,
маломощная железка с arm процессором и собранный под нее и установленный Debian 7 wheezy.
поставить FreeRADIUS 3.0.X, настроить его на работу с БД SQLITE. Т.е., учетные записи пользователей (которых нужно аутентифицировать) RADIUS должен брать из БД SQLITE.
На рисунке представлена верхнеуровневая схема взаимодействия компонентов.
Почему я решил описать данное решение?
Столкнувшись с данной задачей и начав гуглить, я был удивлен тому, что подробных описаний по сборке freeradius, а тем более с поддержкой SQLITE просто нет. Поэтому решил законспектировать себе и другим на память.
Состоит из 3 частей:
1) Сборка Freeradius 3.0.3 (я выбрал эту версию, на более поздних все будет выглядеть примерно также) с поддержкой SQLite;
2) Настройка связки Freeradius и SQLite;
3) Настройка сервера, на котором аутентифицируются пользователи (на рисунке выше — «сервер»).
Для успешной сборки 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 не отработает – возможно в системе не хватает еще каких-то пакетов, читаем внимательно вывод и устанавливаем их.
Для настройки связки freeradius + sqlite необходимо выполнить следующие действия:
2.1.1 Создать базу sqlite и схему в БД, с которой будет работать radius:
/etc/raddb/sqlite_rad.db – это путь к файлу БД, Вы можете разместить его в любом удобном месте.
2.1.2 Создать УЗ пользователя в БД:
Приведенным выше запросом в БД мы наполняем таблицу radcheck, в которой хранится информация об УЗ пользователей следующей информацией:
Уникальный ID пользователя = 1; имя пользователя = user; атрибут УЗ = Cleartext-Password; оператор = “:=”; значение атрибута = “secret”. Если по-русски, то мы задали пароль для УЗ user, который будет хранится в виде открытого текста и его значение – “secret”. Подробнее про пары атрибут-значение (av pair) и операторы сравнения можно прочитать в официальной документации по radius и unlang. freeradius.org/radiusd/man/unlang.html
2.2.1 Конфигурационные файлы всех доступных модулей radius находятся в /etc/raddb/mods-available. Чтобы включить их, нужно создать ссылку на модуль в папке /etc/raddb/mods-enabled:
2.2.2 Редактируем /etc/raddb/mods-enabled/sql, следующим образом:
Переменная filename должна указывать на файл БД, созданный в пункте 2.1.1.
2.2.3 Прописываем клиента radius, т.е. тот сервер (или сетевое оборудование), пользователи которого будут аутентифицироваться через данный radius. Для этого добавляем строки в файл /etc/raddb/clients.conf:
secret в данном случае – это секретное слово radius по которому он аутентифицирует клиента.
shortname – произвольное «короткое имя», это значение можно даже опустить.
2.2.4 Проверяем, что в секции «authorize» в файле /etc/raddb/sites-enabled/default присутствует «-sql»:
3.1 На клиенте установить пакет pam_radius:
3.2 В файле /etc/pam_radius_auth.conf на клиенте добавить строку:
где other-server – IP адрес сервера radius, other-secret – секретное слово из пункта 2.2.3 настройки:
3.3 В файле /etc/pam.d/sshd над строчками
добавить строку
Вот и все. Запускаем RADIUS и наслаждаемся PROFIT'ом.
Хочу поделиться с Вами решением одной творческой задачи. Надеюсь кому-то будет полезно.
Итак,
ДАНО:
маломощная железка с 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'ом.
RicoX
Пару замечаний к посту.
За что же вы так систему свою ненавидите?
Жесть, а чего не шифрованный? Хотя-бы так «perl -e 'print(crypt(»passme",«salt»)."\n");'" и в Crypt-Password, если уж заморачиваться не охота.