Перейти к содержимому
Калькуляторы

FreeRadius (Ubuntu) Simultaneous-Use

Есть сабж, настроеный на использование MySQL. В таблице radcheck (стандартная структура)

есть следующая запись:

5 sqltest User-Password == 12345

 

При использовании radtest авторизация проходит нормально.

 

rad_recv: Access-Request packet from host 127.0.0.1 port 58266, id=17, length=59

User-Name = "sqltest"

User-Password = "12345"

NAS-IP-Address = 127.0.1.1

NAS-Port = 1812

+- entering group authorize {...}

++[preprocess] returns ok

++[chap] returns noop

++[mschap] returns noop

[suffix] No '@' in User-Name = "sqltest", looking up realm NULL

[suffix] No such realm "NULL"

++[suffix] returns noop

[eap] No EAP-Message, not doing EAP

++[eap] returns noop

++[unix] returns notfound

   expand: %{User-Name} -> sqltest

[sql] sql_set_user escaped user --> 'sqltest'

rlm_sql (sql): Reserving sql socket id: 1

[sql] expand: SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'sqltest' ORDER BY id

WARNING: Found User-Password == "...".

WARNING: Are you sure you don't mean Cleartext-Password?

WARNING: See "man rlm_pap" for more information.

[sql] User found in radcheck table

[sql] expand: SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radreply WHERE username = 'sqltest' ORDER BY id

[sql] expand: SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority -> SELECT groupname FROM radusergroup WHERE username = 'sqltest' ORDER BY priority

rlm_sql (sql): Released sql socket id: 1

++[sql] returns ok

++[expiration] returns noop

++[logintime] returns noop

++[pap] returns updated

Found Auth-Type = PAP

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!! Replacing User-Password in config items with Cleartext-Password. !!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!! Please update your configuration so that the "known good" !!!

!!! clear text password is in Cleartext-Password, and not in User-Password. !!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

+- entering group PAP {...}

[pap] login attempt with password "12345"

[pap] Using clear text password "12345"

[pap] User authenticated successfully

++[pap] returns ok

+- entering group post-auth {...}

++[exec] returns noop

Sending Access-Accept of id 17 to 127.0.0.1 port 58266

Finished request 12.

Going to the next request

Получаем доступ разрешён.

 

 

После вставки в таблицу строки

3 sqltest Simultaneous-Use == 1

 

радтест запрещает доступ, а в логе пишет

 

rad_recv: Access-Request packet from host 127.0.0.1 port 56386, id=110, length=59

User-Name = "sqltest"

User-Password = "12345"

NAS-IP-Address = 127.0.1.1

NAS-Port = 1812

+- entering group authorize {...}

++[preprocess] returns ok

++[chap] returns noop

++[mschap] returns noop

[suffix] No '@' in User-Name = "sqltest", looking up realm NULL

[suffix] No such realm "NULL"

++[suffix] returns noop

[eap] No EAP-Message, not doing EAP

++[eap] returns noop

++[unix] returns notfound

[sql] expand: %{User-Name} -> sqltest

[sql] sql_set_user escaped user --> 'sqltest'

rlm_sql (sql): Reserving sql socket id: 0

[sql] expand: SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'sqltest' ORDER BY id

[sql] expand: SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority -> SELECT groupname FROM radusergroup WHERE username = 'sqltest' ORDER BY priority

rlm_sql (sql): Released sql socket id: 0

[sql] User sqltest not found

++[sql] returns notfound

++[expiration] returns noop

++[logintime] returns noop

[pap] WARNING! No "known good" password found for the user. Authentication may fail because of this.

++[pap] returns noop

No authenticate method (Auth-Type) configuration found for the request: Rejecting the user

Failed to authenticate the user.

Using Post-Auth-Type Reject

+- entering group REJECT {...}

[attr_filter.access_reject] expand: %{User-Name} -> sqltest

attr_filter: Matched entry DEFAULT at line 11

++[attr_filter.access_reject] returns updated

Delaying reject of request 13 for 1 seconds

Going to the next request

Waking up in 0.9 seconds.

Sending delayed reject for request 13

Sending Access-Reject of id 110 to 127.0.0.1 port 56386

Waking up in 4.9 seconds.

Cleaning up request 13 ID 110 with timestamp +12664

Ready to process requests.

Больше всего поражает строка "[sql] User sqltest not found"... как бороться?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А sqluser есть в radusergroup ? Может пригодиться http://wiki.sirmax.noname.com.ua/index.php/Simult_Chek

Изменено пользователем voron

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

После вставки в таблицу строки

3 sqltest Simultaneous-Use == 1

 

радтест запрещает доступ, а в логе пишет

Простите, а в какую именно таблицу вы это вставляете?

И вообще, что вы хотите добиться, используя параметр Simultaneous-Use ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А sqluser есть в radusergroup ? Может пригодиться http://wiki.sirmax.noname.com.ua/index.php/Simult_Chek
м.б. sqltest? В группах нет - я эту таблицу не трогал т.к. нигде не сказано что этот параметр должен присваиваться именно группе. По приведённой ссылке параметр присваивается пользователю в таблицу радчек:

 

mysql> select * from radcheck where username='test';

+-------+-----------+------------------+----+-----------+

| id | UserName | Attribute | op | Value |

+-------+-----------+------------------+----+-----------+

| 9295 | test | Pool-Name | := | ippool_1 |

| 9294 | test | Password | == | password |

| 9293 | test | Auth-Type | := | MS-CHAP |

| 9296 | test | Simultaneous-Use | := | 1 |

+-------+-----------+------------------+----+-----------+

4 rows in set (0.00 sec)

 

Простите, а в какую именно таблицу вы это вставляете?

И вообще, что вы хотите добиться, используя параметр Simultaneous-Use ?

1. Как и положено, в радчек.

2. Этот параметр позволяет ограничить количество одновременных сессий, чего я и хочу добиться (Разве его можно применить для чего-то ещё?)

 

В дебаге радиуса указано, какой селект выполняется. В обоих случаях он идентичен, однако во втором случае возвращает 0 строк! Может я чего-то не знаю но sql не должен так работать....

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша задача решается маленькой доработкой SQL запроса и таблицы.

Возможно радиус не любит этот параметр в том виде, в котором вы его задаёте.

Если вы хотите сделать ограничение для всех пользователей - надо доработать только SQL запрос.

Если нужно сделать выборочное ограничение количества подключений > 1 - надо доработать таблицу и SQL запрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша задача решается маленькой доработкой SQL запроса и таблицы.

Возможно радиус не любит этот параметр в том виде, в котором вы его задаёте.

Если вы хотите сделать ограничение для всех пользователей - надо доработать только SQL запрос.

Если нужно сделать выборочное ограничение количества подключений > 1 - надо доработать таблицу и SQL запрос.

В принципе можно всех. Какую доработку надо внести? Я не могу найти в каком файле задаётся "SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radreply WHERE username = 'sqltest' ORDER BY id"

 

я бы модифицировал так: "SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radreply WHERE username = 'sqltest' AND attribute= 'User-Password' ORDER BY id"...

 

 

Только почему фрирадиус не любит этот параметр? Для его активации в кофиге dialup.conf заложены готовые строки, в инете много мануалов по включению функции и нигде ни слова нет о доработке напильником!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А sqluser есть в radusergroup ? Может пригодиться http://wiki.sirmax.noname.com.ua/index.php/Simult_Chek

Добавил параметр в группу - теперь авторизация проходит успешно, но учёт количества сессий не производится.

 

rad_recv: Access-Request packet from host 127.0.0.1 port 39513, id=183, length=59

User-Name = "sqltest"

User-Password = "12345"

NAS-IP-Address = 127.0.1.1

NAS-Port = 1812

+- entering group authorize {...}

++[preprocess] returns ok

++[chap] returns noop

++[mschap] returns noop

[suffix] No '@' in User-Name = "sqltest", looking up realm NULL

[suffix] No such realm "NULL"

++[suffix] returns noop

[eap] No EAP-Message, not doing EAP

++[eap] returns noop

++[unix] returns notfound

   expand: %{User-Name} -> sqltest

[sql] sql_set_user escaped user --> 'sqltest'

rlm_sql (sql): Reserving sql socket id: 4

[sql] expand: SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radcheck WHERE username = 'sqltest' ORDER BY id

WARNING: Found User-Password == "...".

WARNING: Are you sure you don't mean Cleartext-Password?

WARNING: See "man rlm_pap" for more information.

[sql] User found in radcheck table

[sql] expand: SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id -> SELECT id, username, attribute, value, op FROM radreply WHERE username = 'sqltest' ORDER BY id

[sql] expand: SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority -> SELECT groupname FROM radusergroup WHERE username = 'sqltest' ORDER BY priority

[sql] expand: SELECT id, groupname, attribute, Value, op FROM radgroupcheck WHERE groupname = '%{Sql-Group}' ORDER BY id -> SELECT id, groupname, attribute, Value, op FROM radgroupcheck WHERE groupname = 'Main' ORDER BY id

rlm_sql (sql): Released sql socket id: 4

++[sql] returns ok

++[expiration] returns noop

++[logintime] returns noop

++[pap] returns updated

Found Auth-Type = PAP

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!! Replacing User-Password in config items with Cleartext-Password. !!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!! Please update your configuration so that the "known good" !!!

!!! clear text password is in Cleartext-Password, and not in User-Password. !!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

+- entering group PAP {...}

[pap] login attempt with password "12345"

[pap] Using clear text password "12345"

[pap] User authenticated successfully

++[pap] returns ok

+- entering group post-auth {...}

++[exec] returns noop

Sending Access-Accept of id 183 to 127.0.0.1 port 39513

Finished request 29.

Going to the next request

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проблема решена путём применения костыля:

 

файл /etc/freeradius/sql/mysql/dialup.conf

 

строка authorize_check_query = ....

заменяется на:

 

authorize_check_query =" SELECT id, username, attribute, value, op FROM ( \

SELECT id, radcheck.username, attribute, value, op, radacctid, acctstoptime \

FROM radcheck LEFT JOIN radacct ON radcheck.username=radacct.username \

WHERE radcheck.username='%{SQL-User-Name}' AND attribute='User-Password' ORDER BY radacctid DESC LIMIT 1) AS qwe \

WHERE ISNULL(radacctid) OR !ISNULL(acctstoptime)"

Двойной селект я не люблю - если кто знает как проще - поделитесь секретом)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.