LINUX.ORG.RU
ФорумAdmin

Подружить Freeradius с MySql средствами rlm_sql

 ,


1

1

Всем добрый вечер! Необходимо установить Freeradius в связке с MySql(что бы ФР подтягивал все из БД) c помощью rlm_sql. Проверить все это дело radtestom и radchek. Утонул совсем в гайдах и не получается сделать не по одному из них. Может кто-то подсказать гайды или просто помочь. Буду крайне признателен. Все это дело на убунте, если так важно.

Может кто-то подсказать гайды или просто помочь.

А чем официальное руководство не устраивает? Вроде все по делу написано. Если совсем в двух словах хотите, то можете посмотреть заметку на OpenNet. А вообще, в Сети полно материалов по этой теме - задача-то совершенно стандартная...

Serge10 ★★★★★
()
Ответ на: комментарий от Serge10

Ставил и по официальному ману и по куче гайдов из сети. Постоянно упираюсь в одно и тоже(скину логи ниже). Начинаю гуглить эти проблемы, закрываю одни - появляются другие... Я уже угуглился и не знаю, куда копать. Вот что выдает эта зараза:

Вывод «Freeradius -X»: rlm_sql (sql): rlm_sql_mysql: ERROR 1054 (Unknown column 'server' in 'field list'): 42S22 Failed to load clients from SQL /etc/freeradius/3.0/mods-enabled/sql[20]: Instantiation failed for module «sql»

Вывод «systemctl status freeradius.service»: ● freeradius.service - FreeRADIUS multi-protocol policy server Loaded: loaded (/lib/systemd/system/freeradius.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Sat 2019-04-27 16:53:10 UTC; 1s ago Docs: man:radiusd(8) man:radiusd.conf(5) http://wiki.freeradius.org/ http://networkradius.com/doc/ Process: 8232 ExecStartPre=/usr/sbin/freeradius $FREERADIUS_OPTIONS -Cxm -lstdout (code=exited, status=1/FAILURE)

апр 27 16:53:10 test systemd[1]: freeradius.service: Control process exited, code=exited, status=1/FAILURE апр 27 16:53:10 test systemd[1]: freeradius.service: Failed with result 'exit-code'. апр 27 16:53:10 test systemd[1]: Failed to start FreeRADIUS multi-protocol policy server.

Madball
() автор топика
Ответ на: комментарий от Madball

Unknown column 'server' in 'field list'

Эта ошибка говорит о том, что у Вас неверная структура таблиц в базе данных. Возможно, потому, что Вы брали за образец устаревший вариант. Ищите описание актуальной структуры базы, соответствующей Вашей версии freeradius.

Serge10 ★★★★★
()

Может кто-то подсказать гайды или просто помочь

могу подсказать. буквально вчера ставил MySQL. первая попытка закончилась необыкновенно информативным плюсовым сообщением ERROR_... вторая на последней стадии полезла в инет себя обновлять и вообще зависла. вывод: это дрянь. Postrges поставился без всяких проблем

PatrickKilpatrick
()
Последнее исправление: PatrickKilpatrick (всего исправлений: 2)
Ответ на: комментарий от PatrickKilpatrick

В общем решил попробовать на другой системе и накатил Дебиан. Все завелось без проблем. Единственное - вывод freeradius -X ругается на следующее:

>>Failed binding to auth address * port 1812 bound to server default: Address already in use
/etc/freeradius/3.0/sites-enabled/default[59]: Error binding to port for 0.0.0.0 port 1812

Следующим пунктом моей задачи - проверить всю эту шляпу radtest'ом . Локально(добавляя пользователя в конфиг фрирадиуса все проходит). Но с БД он не в какую не хочет ничего забирать и возвращает:

Sent Access-Request Id 181 from 0.0.0.0:55124 to 127.0.0.1:1812 length 78
        User-Name = "testuser"
        User-Password = "12345"
        NAS-IP-Address = 127.0.1.1
        NAS-Port = 1812
        Message-Authenticator = 0x00
        Cleartext-Password = "12345"
Received Access-Reject Id 181 from 127.0.0.1:1812 to 0.0.0.0:0 length 20
(0) -: Expected Access-Accept got Access-Reject

И снова ступор. Куда копать?? К БД же он вроде подключается модулем rlm_sql. Ошибок при дебаге нету.

Madball
() автор топика
Ответ на: комментарий от PatrickKilpatrick

А где это поменять\посмотреть? Что-то никак не найду.

Madball
() автор топика
Ответ на: комментарий от PatrickKilpatrick

Есть подозрения, что я не правильно наполняю БД и ему не хватает инфы, которую он забирает из БД. Я пользовался только:

mysql> INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('testsql', 'Password', 'test123');

Коннект к БД есть, это видно в логе при freeradius -X

Madball
() автор топика
Ответ на: комментарий от Madball

Удалось побороть. Мой косяк и затуп. Для того, чтобы запустить freeradius -X и все работало как надо, надо остановить полностью все связанное с фрирадиусом и потом уже запустить дебаг. Все заработало. Сейчас столкнулся со след проблемой при radtest. Вот вывод freeradius -X при радтесте:

(3) Received Access-Request Id 2 from 127.0.0.1:60826 to 127.0.0.1:18129 length 77
(3)   User-Name = "beyonce"
(3)   User-Password = "putaringonit"
(3)   NAS-IP-Address = 127.0.1.1
(3)   NAS-Port = 0
(3)   Message-Authenticator = 0xba06dc9c26ab3faae9ba4793d3d7f4da
(3) # Executing section authorize from file /etc/freeradius/3.0/sites-enabled/default
(3)   authorize {
(3)     policy filter_username {
(3)       if (&User-Name) {
(3)       if (&User-Name)  -> TRUE
(3)       if (&User-Name)  {
(3)         if (&User-Name =~ / /) {
(3)         if (&User-Name =~ / /)  -> FALSE
(3)         if (&User-Name =~ /@[^@]*@/ ) {
(3)         if (&User-Name =~ /@[^@]*@/ )  -> FALSE
(3)         if (&User-Name =~ /\.\./ ) {
(3)         if (&User-Name =~ /\.\./ )  -> FALSE
(3)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {
(3)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))   -> FALSE
(3)         if (&User-Name =~ /\.$/)  {
(3)         if (&User-Name =~ /\.$/)   -> FALSE
(3)         if (&User-Name =~ /@\./)  {
(3)         if (&User-Name =~ /@\./)   -> FALSE
(3)       } # if (&User-Name)  = notfound
(3)     } # policy filter_username = notfound
(3)     [preprocess] = ok
(3)     [chap] = noop
(3)     [mschap] = noop
(3)     [digest] = noop
(3) suffix: Checking for suffix after "@"
(3) suffix: No '@' in User-Name = "beyonce", looking up realm NULL
(3) suffix: No such realm "NULL"
(3)     [suffix] = noop
(3) eap: No EAP-Message, not doing EAP
(3)     [eap] = noop
(3)     [files] = noop
(3) sql: EXPAND %{User-Name}
(3) sql:    --> beyonce
(3) sql: SQL-User-Name set to 'beyonce'
rlm_sql (sql): Reserved connection (1)
(3) sql: EXPAND SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' ORDER BY id
(3) sql:    --> SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'beyonce' ORDER BY id
(3) sql: Executing select query: SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'beyonce' ORDER BY id
(3) sql: User found in radcheck table
(3) sql: Conditional check items matched, merging assignment check items
(3) sql:   User-Password := "putaringonit"
(3) sql: EXPAND SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id
(3) sql:    --> SELECT id, username, attribute, value, op FROM radreply WHERE username = 'beyonce' ORDER BY id
(3) sql: Executing select query: SELECT id, username, attribute, value, op FROM radreply WHERE username = 'beyonce' ORDER BY id
(3) sql: EXPAND SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority
(3) sql:    --> SELECT groupname FROM radusergroup WHERE username = 'beyonce' ORDER BY priority
(3) sql: Executing select query: SELECT groupname FROM radusergroup WHERE username = 'beyonce' ORDER BY priority
(3) sql: User not found in any groups
rlm_sql (sql): Released connection (1)
(3)     [sql] = ok
(3)     [expiration] = noop
(3)     [logintime] = noop
(3) pap: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(3) pap: WARNING: !!! Ignoring control:User-Password.  Update your        !!!
(3) pap: WARNING: !!! configuration so that the "known good" clear text !!!
(3) pap: WARNING: !!! password is in Cleartext-Password and NOT in        !!!
(3) pap: WARNING: !!! User-Password.                                      !!!
(3) pap: WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(3) pap: WARNING: No "known good" password found for the user.  Not setting Auth-Type
(3) pap: WARNING: Authentication will fail unless a "known good" password is available
(3)     [pap] = noop
(3)   } # authorize = ok
(3) ERROR: No Auth-Type found: rejecting the user via Post-Auth-Type = Reject
(3) Failed to authenticate the user
(3) Using Post-Auth-Type Reject
(3) # Executing group from file /etc/freeradius/3.0/sites-enabled/default
(3)   Post-Auth-Type REJECT {
(3) sql: EXPAND .query
(3) sql:    --> .query
(3) sql: Using query template 'query'
rlm_sql (sql): Reserved connection (7)
(3) sql: EXPAND %{User-Name}
(3) sql:    --> beyonce
(3) sql: SQL-User-Name set to 'beyonce'
(3) sql: EXPAND INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ( '%{SQL-User-Name}', '%{%{User-Password}:-%{Chap-Password}}', '%{reply:Packet-Type}', '%S')
(3) sql:    --> INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ( 'beyonce', 'putaringonit', 'Access-Reject', '2019-04-28 13:28:58')
(3) sql: Executing query: INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ( 'beyonce', 'putaringonit', 'Access-Reject', '2019-04-28 13:28:58')
(3) sql: SQL query returned: success
(3) sql: 1 record(s) updated
rlm_sql (sql): Released connection (7)
(3)     [sql] = ok
(3) attr_filter.access_reject: EXPAND %{User-Name}
(3) attr_filter.access_reject:    --> beyonce
(3) attr_filter.access_reject: Matched entry DEFAULT at line 11
(3)     [attr_filter.access_reject] = updated
(3)     [eap] = noop
(3)     policy remove_reply_message_if_eap {
(3)       if (&reply:EAP-Message && &reply:Reply-Message) {
(3)       if (&reply:EAP-Message && &reply:Reply-Message)  -> FALSE
(3)       else {
(3)         [noop] = noop
(3)       } # else = noop
(3)     } # policy remove_reply_message_if_eap = noop
(3)   } # Post-Auth-Type REJECT = updated
(3) Delaying response for 1.000000 seconds
Waking up in 0.3 seconds.
Waking up in 0.6 seconds.
(3) Sending delayed response
(3) Sent Access-Reject Id 2 from 127.0.0.1:18129 to 127.0.0.1:60826 length 20
Waking up in 3.9 seconds.
(3) Cleaning up request packet ID 2 with timestamp +162
Ready to process requests

Madball
() автор топика
Ответ на: комментарий от PatrickKilpatrick

Вот, что у меня в таблице, после insert into radcheck:

MariaDB [radius]> select * from radcheck;
+----+----------+---------------+----+----------------------------------+
| id | username | attribute     | op | value                            |
+----+----------+---------------+----+----------------------------------+
|  1 | test     | MD5-Password  | := | fcea920f7412b5da7be0cf42b8c93759 |
|  2 | beyonce  | User-Password | := | putaringonit                     |
+----+----------+---------------+----+----------------------------------+
2 rows in set (0.00 sec)

MariaDB [radius]>

Madball
() автор топика
Ответ на: комментарий от PatrickKilpatrick
MariaDB [(none)]> SHOW COLUMNS FROM radius.radcheck;
+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| id        | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| username  | varchar(64)      | NO   | MUL |         |                |
| attribute | varchar(64)      | NO   |     |         |                |
| op        | char(2)          | NO   |     | ==      |                |
| value     | varchar(253)     | NO   |     |         |                |
+-----------+------------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

MariaDB [(none)]>
Madball
() автор топика
Ответ на: комментарий от Madball

Получается что Cleartext-Password нужно использовать вместо User-Password. Пытаюсь понять, где это поменять надо

Madball
() автор топика
Ответ на: комментарий от Madball

Поменял, теперь вот такой вывод:

(5) Received Access-Request Id 6 from 127.0.0.1:44539 to 127.0.0.1:18129 length 74
(5)   User-Name = "test"
(5)   User-Password = "test123"
(5)   NAS-IP-Address = 127.0.1.1
(5)   NAS-Port = 0
(5)   Message-Authenticator = 0xe320dbf41cb7d6316a2016657c942572
(5) # Executing section authorize from file /etc/freeradius/3.0/sites-enabled/default
(5)   authorize {
(5)     policy filter_username {
(5)       if (&User-Name) {
(5)       if (&User-Name)  -> TRUE
(5)       if (&User-Name)  {
(5)         if (&User-Name =~ / /) {
(5)         if (&User-Name =~ / /)  -> FALSE
(5)         if (&User-Name =~ /@[^@]*@/ ) {
(5)         if (&User-Name =~ /@[^@]*@/ )  -> FALSE
(5)         if (&User-Name =~ /\.\./ ) {
(5)         if (&User-Name =~ /\.\./ )  -> FALSE
(5)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {
(5)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))   -> FALSE
(5)         if (&User-Name =~ /\.$/)  {
(5)         if (&User-Name =~ /\.$/)   -> FALSE
(5)         if (&User-Name =~ /@\./)  {
(5)         if (&User-Name =~ /@\./)   -> FALSE
(5)       } # if (&User-Name)  = notfound
(5)     } # policy filter_username = notfound
(5)     [preprocess] = ok
(5)     [chap] = noop
(5)     [mschap] = noop
(5)     [digest] = noop
(5) suffix: Checking for suffix after "@"
(5) suffix: No '@' in User-Name = "test", looking up realm NULL
(5) suffix: No such realm "NULL"
(5)     [suffix] = noop
(5) eap: No EAP-Message, not doing EAP
(5)     [eap] = noop
(5)     [files] = noop
(5) sql: EXPAND %{User-Name}
(5) sql:    --> test
(5) sql: SQL-User-Name set to 'test'
rlm_sql (sql): Reserved connection (9)
(5) sql: EXPAND SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' ORDER BY id
(5) sql:    --> SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'test' ORDER BY id
(5) sql: Executing select query: SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'test' ORDER BY id
(5) sql: User found in radcheck table
(5) sql: Conditional check items matched, merging assignment check items
(5) sql:   MD5-Password := 0x6663656139323066373431326235646137626530636634326238633933373539
(5) sql:   Cleartext-Password := "test123"
(5) sql: EXPAND SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id
(5) sql:    --> SELECT id, username, attribute, value, op FROM radreply WHERE username = 'test' ORDER BY id
(5) sql: Executing select query: SELECT id, username, attribute, value, op FROM radreply WHERE username = 'test' ORDER BY id
(5) sql: EXPAND SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority
(5) sql:    --> SELECT groupname FROM radusergroup WHERE username = 'test' ORDER BY priority
(5) sql: Executing select query: SELECT groupname FROM radusergroup WHERE username = 'test' ORDER BY priority
(5) sql: User not found in any groups
rlm_sql (sql): Released connection (9)
rlm_sql (sql): Need 1 more connections to reach 10 spares
rlm_sql (sql): Opening additional connection (10), 1 of 30 pending slots used
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Connected to database 'radius' on Localhost via UNIX socket, server version 10.1.38-MariaDB-0+deb9u1, protocol version 10
(5)     [sql] = ok
(5)     [expiration] = noop
(5)     [logintime] = noop
(5) pap: Normalizing MD5-Password from hex encoding, 32 bytes -> 16 bytes
(5)     [pap] = updated
(5)   } # authorize = updated
(5) Found Auth-Type = PAP
(5) # Executing group from file /etc/freeradius/3.0/sites-enabled/default
(5)   Auth-Type PAP {
(5) pap: Login attempt with password
(5) pap: Comparing with "known-good" MD5-Password
(5) pap: ERROR: MD5 digest does not match "known good" digest
(5) pap: Passwords don't match
(5)     [pap] = reject
(5)   } # Auth-Type PAP = reject
(5) Failed to authenticate the user
(5) Using Post-Auth-Type Reject
(5) # Executing group from file /etc/freeradius/3.0/sites-enabled/default
(5)   Post-Auth-Type REJECT {
(5) sql: EXPAND .query
(5) sql:    --> .query
(5) sql: Using query template 'query'
rlm_sql (sql): Reserved connection (8)
(5) sql: EXPAND %{User-Name}
(5) sql:    --> test
(5) sql: SQL-User-Name set to 'test'
(5) sql: EXPAND INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ( '%{SQL-User-Name}', '%{%{User-Password}:-%{Chap-Password}}', '%{reply:Packet-Type}', '%S')
(5) sql:    --> INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ( 'test', 'test123', 'Access-Reject', '2019-04-28 14:05:06')
(5) sql: Executing query: INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ( 'test', 'test123', 'Access-Reject', '2019-04-28 14:05:06')
(5) sql: SQL query returned: success
(5) sql: 1 record(s) updated
rlm_sql (sql): Released connection (8)
(5)     [sql] = ok
(5) attr_filter.access_reject: EXPAND %{User-Name}
(5) attr_filter.access_reject:    --> test
(5) attr_filter.access_reject: Matched entry DEFAULT at line 11
(5)     [attr_filter.access_reject] = updated
(5)     [eap] = noop
(5)     policy remove_reply_message_if_eap {
(5)       if (&reply:EAP-Message && &reply:Reply-Message) {
(5)       if (&reply:EAP-Message && &reply:Reply-Message)  -> FALSE
(5)       else {
(5)         [noop] = noop
(5)       } # else = noop
(5)     } # policy remove_reply_message_if_eap = noop
(5)   } # Post-Auth-Type REJECT = updated
(5) Delaying response for 1.000000 seconds
Waking up in 0.3 seconds.
Waking up in 0.6 seconds.
(5) Sending delayed response
(5) Sent Access-Reject Id 6 from 127.0.0.1:18129 to 127.0.0.1:44539 length 20
Waking up in 3.9 seconds.
(5) Cleaning up request packet ID 6 with timestamp +2330
Ready to process requests

Madball
() автор топика
Ответ на: комментарий от Madball

проблема в том, что я только сейчас заметил, что у тебя не MySQL, а MariaDB, с которой я никогда не имел дела. а я тут с умным видом даю советы. пардон.

PatrickKilpatrick
()
Ответ на: комментарий от PatrickKilpatrick

проблема в том, что я только сейчас заметил, что у тебя не MySQL, а MariaDB, с которой я никогда не имел дела.

Простите, а в чем разница между «Мусей» и «Манькой» или PG или m$sql в такой банальщине?

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.