M-a-x-Z Опубликовано 21 февраля, 2011 · Жалоба Есть сабж, настроеный на использование 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 idWARNING: 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 priorityrlm_sql (sql): Released sql socket id: 1++[sql] returns ok++[expiration] returns noop++[logintime] returns noop++[pap] returns updatedFound 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 noopSending Access-Accept of id 17 to 127.0.0.1 port 58266Finished 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"... как бороться? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
voron Опубликовано 21 февраля, 2011 (изменено) · Жалоба А sqluser есть в radusergroup ? Может пригодиться http://wiki.sirmax.noname.com.ua/index.php/Simult_Chek Изменено 21 февраля, 2011 пользователем voron Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
terrible Опубликовано 21 февраля, 2011 · Жалоба После вставки в таблицу строки 3 sqltest Simultaneous-Use == 1 радтест запрещает доступ, а в логе пишет Простите, а в какую именно таблицу вы это вставляете?И вообще, что вы хотите добиться, используя параметр Simultaneous-Use ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
M-a-x-Z Опубликовано 21 февраля, 2011 · Жалоба А 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 не должен так работать.... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
terrible Опубликовано 21 февраля, 2011 · Жалоба Ваша задача решается маленькой доработкой SQL запроса и таблицы. Возможно радиус не любит этот параметр в том виде, в котором вы его задаёте. Если вы хотите сделать ограничение для всех пользователей - надо доработать только SQL запрос. Если нужно сделать выборочное ограничение количества подключений > 1 - надо доработать таблицу и SQL запрос. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
M-a-x-Z Опубликовано 21 февраля, 2011 · Жалоба Ваша задача решается маленькой доработкой 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 заложены готовые строки, в инете много мануалов по включению функции и нигде ни слова нет о доработке напильником! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
terrible Опубликовано 21 февраля, 2011 · Жалоба что-то-там/raddb/sql/mysql/dialup.conf Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
M-a-x-Z Опубликовано 22 февраля, 2011 · Жалоба А 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 idWARNING: 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 idrlm_sql (sql): Released sql socket id: 4++[sql] returns ok++[expiration] returns noop++[logintime] returns noop++[pap] returns updatedFound 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 noopSending Access-Accept of id 183 to 127.0.0.1 port 39513Finished request 29.Going to the next request Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
M-a-x-Z Опубликовано 22 февраля, 2011 · Жалоба Проблема решена путём применения костыля: файл /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)" Двойной селект я не люблю - если кто знает как проще - поделитесь секретом))) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...