2016-03-15 2 views
1

Я столкнулся с тупиком при попытке настроить персонализированные атрибуты в качестве элемента ответа (я хочу, чтобы пользовательская информация была добавлена ​​в пакет «accept accept»). При попытке достичь этого я наткнулся на эту запись:freeradius (MySQL config) добавление пользовательских атрибутов к элементу ответа

# If you want to add entries to the dictionary file, 
# which are NOT going to be placed in a RADIUS packet, 
# add them to the 'dictionary.local' file. 
# 
# The numbers you pick should be between 3000 and 4000. 
# These attributes will NOT go into a RADIUS packet. 
# 
# If you want that, you will need to use VSAs. This means 
# requesting allocation of a Private Enterprise Code from 
# http://iana.org. We STRONGLY suggest doing that only if 
# you are a vendor of RADIUS equipment. 
# 
# See RFC 6158 for more details. 
# http://ietf.org/rfc/rfc6158.txt 

Так что я понимаю, как обычный подход должен быть.

Однако моя инфраструктура настроена поэтапно, и данный сервер радиуса уже размещен на «внутри», поэтому я не понимаю, почему я не могу установить или перезаписать неиспользуемые атрибуты на обоих концах этот второй этап внутренней аутентификации.

Обход вокруг меня нашел несколько тем о том, как установить этот тип вещей с помощью подхода, основанного на файлах, на версии 1.x Freeradius, не столько для каких-либо новых версий.

Является ли то, что я предлагаю по-прежнему с помощью freeradius-server-3.0.10? И если да, то как я должен это реализовать?

Текущее состояние: Я добавил свой атрибут «факультет» в словарь и соответствующий DB, заставляя сервер определения радиуса (отображающей множество целое число от БД в строку набора в каталоге, т.е. Ei & МЕХ.) найти и оценить атрибут, установленный в «radreply» (здесь:: = MECH) и «radgroupreply» (здесь + = EI).

... 
rlm_sql (sql1): Reserved connection (5) 
(1) sql1: EXPAND SELECT id, username, attribute, value, op FROM radcheck WHERE username = '%{SQL-User-Name}' AND active > '0' AND active < '3' ORDER BY id(1) sql1: --> SELECT id, username, attribute, value, op FROM radcheck WHERE username = '*username*' AND active > '0' AND active < '3' ORDER BY id 
(1) sql1: Executing select query: SELECT id, username, attribute, value, op FROM radcheck WHERE username = '*username*' AND active > '0' AND active < '3'ORDER BY id 
(1) sql1: User found in radcheck table 
(1) sql1: Conditional check items matched, merging assignment check items 
(1) sql1: Cleartext-Password := "*password*" 
(1) sql1: EXPAND SELECT id, username, attribute, value, op FROM radreply WHERE username = '%{SQL-User-Name}' ORDER BY id 
(1) sql1: --> SELECT id, username, attribute, value, op FROM radreply WHERE username = '*username*' ORDER BY id 
(1) sql1: Executing select query: SELECT id, username, attribute, value, op FROM radreply WHERE username = '*username*' ORDER BY id 
(1) sql1: User found in radreply table, merging reply items 
(1) sql1: faculty := MECH 
(1) sql1: EXPAND SELECT groupname FROM radusergroup WHERE username = '%{SQL-User-Name}' ORDER BY priority 
(1) sql1: --> SELECT groupname FROM radusergroup WHERE username = '*username*' ORDER BY priority 
(1) sql1: Executing select query: SELECT groupname FROM radusergroup WHERE username = '*username*' ORDER BY priority 
(1) sql1: User found in the group table 
(1) sql1: EXPAND SELECT id, groupname, attribute, Value, op FROM radgroupcheck WHERE groupname = '%{sql1-SQL-Group}' ORDER BY id 
(1) sql1: --> SELECT id, groupname, attribute, Value, op FROM radgroupcheck WHERE groupname = 'vid100' ORDER BY id 
(1) sql1: Executing select query: SELECT id, groupname, attribute, Value, op FROM radgroupcheck WHERE groupname = 'vid100' ORDER BY id 
(1) sql1: Group "vid100": Conditional check items matched 
(1) sql1: Group "vid100": Merging assignment check items 
(1) sql1: EXPAND SELECT id, groupname, attribute, value, op FROM radgroupreply WHERE groupname = '%{sql1-SQL-Group}' ORDER BY id 
(1) sql1: --> SELECT id, groupname, attribute, value, op FROM radgroupreply WHERE groupname = 'vid100' ORDER BY id 
(1) sql1: Executing select query: SELECT id, groupname, attribute, value, op FROM radgroupreply WHERE groupname = 'vid100' ORDER BY id 
(1) sql1: Group "vid100": Merging reply items 
(1) sql1: Tunnel-Type = VLAN 
(1) sql1: Tunnel-Medium-Type = IEEE-802 
(1) sql1: Tunnel-Private-Group-Id = "100" 
(1) sql1: faculty += EI 
rlm_sql (sql1): Released connection (5) 
... 

Острое наблюдатель будет также заметить некоторые изменения в «radcheck» запрос, но это изменение не связано с темой под рукой. Итак, сервер получает информацию, однако я еще не нашел способ включить ее в ответ.

(1) Sent Access-Accept Id 81 from **IP-Radius-server**:*port* to **IP-supplicant**:*port* length 0 
(1) Tunnel-Type = VLAN 
(1) Tunnel-Medium-Type = IEEE-802 
(1) Tunnel-Private-Group-Id = "100" 
(1) Finished request 

Любая помощь или указатели будут оценены :) Felix

ответ

1

Вы должны определить свой собственный атрибут в качестве (конкретного атрибута Vendor) VSA. Атрибуты выше 255 в стандартном словаре RADIUS не будут закодированы в прокси-запросах или в ответах, потому что поле атрибута имеет ширину всего 1 байт.

Если вы хотите сделать это правильно, вам необходимо запросить у вашей организации IANA PEN (Private Enterprise Number) http://pen.iana.org/pen/PenApplication.page (после проверки еще не назначено http://www.iana.org/assignments/enterprise-numbers/enterprise-numbers).

Затем вы можете определить свой собственный словарь поставщиков и добавить свои собственные атрибуты с номерами от 1-255.

Вот хороший короткий вы можете использовать в качестве примера: https://github.com/FreeRADIUS/freeradius-server/blob/v3.1.x/share/dictionary.bt

Вам не нужен отдельный файл словаря поставщика, вам просто нужно скопировать соответствующие строки в raddb/dictionary.

Если вы не заботитесь об этом, просмотрите задания PEN, чтобы найти несуществующую компанию и использовать их PEN.

4

Кому подобные проблемы. Я придумал обходное решение, которое работает для меня.

Как описано выше, действительно очень сложно создать пользовательский атрибут. Что вы можете использовать, это атрибут 18 (Reply-Message) для передачи информации.

Я пошел об этом, добавив: .../raddb/sites-available/default в разделе «пост-авторизация».

if (&reply:faculty && &request:NAS-IP-Address == *IP-WEBSERVER*) { 
    update reply { 
     Reply-Message += "Faculty: %{reply:faculty}" 
    } 
} 

который добавляет «факультет» информацию, если она может быть найдена в одном radreply или radgroupreply тогда и только тогда, когда мольба приходит через sepcified «веб-сервер». Используя арифметику оператора freeradius, вы также можете весить ответ (для меня: radreply: = radgroupreply + =).

Это хорошо работает для freeradius3.0.10.

Я считаю эту проблему закрытой - Felix

+0

Да, или класс, что означает, что он также будет доступен в учетных пакетах. –

Смежные вопросы