Аутентификация и хранение учетных записей
Атрибуты аутентификации
Атрибуты имеют следующий формат:
Поле Type
Поле Type имеет длину один октет. Возможные типы стандартизованы и перечислены в соответствующих RFC. Как RADIUS-сервер, так и клиент могут игнорировать атрибуты, тип которых они не знают.
Основные типы атрибутов следующие:
1 User-Name 2 User-Password 3 CHAP-Password 4 NAS-IP-Address 5 NAS-Port 6 Service-Type 7 Framed-Protocol 8 Framed-IP-Address 9 Framed-IP-Netmask 10 11 12 Framed-MTU 13 Framed-Compression 14 Logon-IP-Host 15 Login-Service 16 Login-TCP-Port 17 18 Reply-Message 19 Callback-Number 20 Callback-Id 21 22 Framed-Route 23 Framed-IPX-Network 24 State 25 Class 26 Vendor-Specific 27 Session-Timeout 28 Idle-Timeout 29 Termination-Action 30 Called-Station-Id 31 Calling-Station-Id 32 NAS-Identifier 33 Proxy-State 34 -59 60 CHAP-Challenge 61 NAS-Port-Type 62 Port-Limit 63 Login-LAT-Port
Атрибут User-Name
Атрибут содержит имя аутентифицируемого пользователя. Он обязательно указывается в пакетах Access-Request.
Он может быть послан в пакете Access-Request, в этом случае клиент должен использовать это имя во всех пакетах Accounting-Request данной сессии. Если в Access-Request включен ServiceType=Rlogin и атрибут User-Name, NAS может использовать возвращаемое значение User-Name при выполнении сервиса Rlogin в UNIX-системах. Значением атрибута может быть текст, идентификатор сетевого доступа или DN прото-кола LDAP.
Атрибут User-Password
В данном атрибуте указывается пароль аутентифицируемого пользователя или введенная пользователем информация при получении пакета Access-Challenge. Атрибут используется только в пакетах Access-Request.
Пароль передается в скрытом виде. Первым делом к паролю добавляются символы заполнения, чтобы длина пароля стала кратной 16 октетам. Затем используется хэш-функция MD5, на вход которой подаются разделяемый секрет и аутентификатор запроса. Затем выполняется операция XOR этого значения с первыми 16 октетами пароля, полученное значение помещается в первые 16 октет поля String атрибута User-Password.
Если пароль длиннее 16 символов, второй раз используется хэш-функция MD5, на вход которой подается разделяемый секрет, за которым следует результат первого XOR. После этого выполняется XOR результата второго использования MD5 и вторых 16 октетов пароля. При необходимости данная операция повторяется нужное число раз.
Обозначим разделяемый секрет – S, псевдослучайный 128-битный аутентификатор запроса – RA. 16-октетные части пароля – р1, р2 и т.д.
b1 = MD5 (S + RA) c(1) = p1 xor b1 b2 = MD5 (S + c(1)) c(2) = p2 xor b2 String содержит с(1) + с(2) + ….., где + обозначает конкатенацию.
Атрибут СНАР-Password
В данном атрибуте указывается ответ на запрос, предоставленный протоколом СНАР, в ответ на Вызов (Challenge). Атрибут используется только в пакетах Access-Request.
Значение Вызова СНАР берется из атрибута CHAP-Challenge, если он присутствует в пакете, в противном случае используется поле Аутентификатора запроса.
Атрибут NAS-IP-Address
Данный атрибут определяет IP-адрес NAS, который запросил аутентификацию пользователя. Этот IP-адрес должен быть уникальным у данного RADIUS-сервера. NAS-IP-Address используется только в пакетах Access-Request. В пакете Access-Request должен присутствовать либо NAS-IP-Address, либо NAS-Identifier.
Заметим, что NAS-IP-Address не должен использоваться для выбора разделяемого секрета, который используется для аутентификации запроса. Для выбора разделяемого секрета должен использоваться IP-адрес источника пакета Access-Request.
Атрибут NAS-Port
Атрибут определяет номер физического порта NAS, который аутентифицирует пользователя. Атрибут используется только в пакетах Access-Request. Заметим, что это порт физического соединения NAS, а не ТСР или UDP номер порта. В пакете Access-Request должен присутствовать либо NAS-Port, либо NAS-Port-Type.
Атрибут Service-Type
Данный атрибут определяет тип сервиса, который запросил пользователь, или тип сервиса, который будет предоставлен. Он может использоваться в пакетах Access-Request и Access-Accept. Не требуется, чтобы NAS мог реализовывать все типы сервисов, неизвестные или не поддерживаемые сервисы игнорируются и должны рассматриваться как Access-Reject.
Следующие типы сервисов могут использоваться в Access-Request. При использовании в Access-Request они могут рассматриваться как подсказка RADIUS-серверу какой тип сервиса требуется пользователю. Но при этом не требуется, чтобы сервер следовал этой подсказке.
Login | Пользователь должен войти на хост. |
---|---|
Framed | Для соединения с пользователем должен использоваться такой протокол, как РРР или SLIP. |
Callback Login | Пользователь должен быть отсоединен, затем должен быть сделан обратный вызов, после чего пользователь должен быть снова подсоединен к хосту. |
Callback Framed | Пользователь должен быть отсоединен, затем должен быть сделан обратный вызов, после чего должен начать выполняться такой протокол, как РРР или SLIP. |
Outbound | Пользователю должен быть предоставлен доступ к внешним устройствам. |
Administrative | Пользователю должен быть предоставлен доступ к административному интерфейсу NAS, с которого могут выполняться привилегированные команды. |
NAS prompt | Пользователю должно быть выдано приглашение для ввода непривилегированных команд NAS. |
Authenticate Only | Требуется только аутентификация, в Access-Request не должно возвращаться никакой авторизационной информации (обычно используется прокси-серверами, а не самим NAS). |
Callback NAS Prompt | Пользователь отсоединяется, осуществляется обратный вызов и пользователю выдается приглашение для выполнения непривилегированных команд NAS. |
Call Check | Используется NAS в пакете Access-Request для указания того, что вызов был получен, и что в ответ на вызов RADIUS-сервер должен послать сообщение Access-Accept или Access-Reject, обычно основываясь на атрибутах Called-Station-Id или Calling-Station-Id. Рекомендуется, чтобы Access-Request использовал Calling-Station-Id в качестве значения User-Name. |
Callback Administrative | Пользователь должен быть отсоединен, выполнен обратный вызов, затем предоставлен доступ к административному интерфейсу NAS, с которого могут выполняться привилегированные команды. |
Атрибут Framed-Protocol
Атрибут указывает внешний протокол, который используется для получения доступа. Может использоваться в пакетах Access-Request и Access-Accept.
Атрибут Framed-IP-Address
Данный атрибут определяет IP-адрес, который должен быть выдан пользователю. Атрибут может быть указан в пакетах Access-Accept. Он также может быть указан в пакете Access-Request в качестве предпочтительного IP-адреса, но сервер не обязан следовать этому указанию.
Атрибут Framed-IP-Netmask
Данный атрибут определяет IP-маску, которая будет сконфигурирована для пользователя при доступе в сеть. Атрибут может использоваться в пакетах Access-Accept. Он может также использоваться в пакете Access-Request для указания предпочтений NAS серверу, но сервер не обязан следовать этому.
Атрибут Framed-MTU
Данный атрибут определяет MTU, который будет сконфигурирован для пользователя, если об этом значении не ведутся переговоры каким-либо другим способом, например в РРР. Атрибут может использоваться в Access-Accept пакетах. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.
Атрибут Framed-Compression
Данный атрибут определяет протокол сжатия. Атрибут может использоваться в пакетах Access-Accept. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.
Может быть послано несколько атрибутов, определяющих протокол сжатия. За использование корректного протокола сжатия отвечает NAS.
Атрибут Login-IP-Host
Данный атрибут определяет систему, к которой должен подсоединиться пользователь, если используется атрибут Login-Service. Атрибут может использоваться в пакетах Access-Accept. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.
Атрибут Login-Service
Данный атрибут указывает сервис, который будет использоваться при соединении пользователя с хостом. Он может использоваться только в пакетах Acces-Accept.
Атрибут Login-TCP-Port
Данный атрибут определяет ТСР-порт, с которым будет устанавливать соединение пользователь, если присутствует атрибут Login-Service. Используется только в пакетах Access-Request.
Атрибут Reply-Message
Данный атрибут содержит текст, который будет показан пользователю. Может означать необходимость создания диалогового окна и определять приглашение пользователю перед следующей попыткой выполнения запроса на доступ Access-Request.
Если используется в пакете Access-Challenge, может содержать диалоговое сообщение, которое выдается пользователю для ввода ответа.
Если в сообщении содержится несколько Reply-Message, то они показываются в том же порядке, в каком расположены в пакете.
Атрибут Callback-Number
Атрибут определяет строку, которая будет использоваться при обратном вызове. Атрибут может использоваться в пакетах Access-Accept. Он может быть указан в пакете Access-Request для указания серверу предпочтений, но сервер не обязан этому следовать.
Атрибут Callback-Id
Данный атрибут определяет имя, которое будет использовано при обратном вызове и которое должно будет интерпретироваться NAS. Атрибут может использоваться в Access-Accept пакетах.
Атрибут Framed-Route
Данный атрибут предоставляет информацию маршрутизации, которая будет сконфигурирована для пользователя NAS. Атрибут используется в пакете Access-Accept, и может появиться там несколько раз.
Атрибут State
Атрибут посылается сервером клиенту в сообщении Access-Challenge и должен быть отправлен без изменения обратно клиентом серверу в новом Access-Request, который является ответом на запрос.
Данный атрибут может быть послан сервером клиенту в сообщении Access-Accept, в котором должен быть также атрибут Termination-Action со значением RADIUS-Request. Если NAS выполняет Termination-Action, посылая новый Access-Request при завершении текущей сессии, он должен включить без изменения атрибут State в этот Access-Request.
В любом случае клиент не должен интерпретировать данный атрибут локально. В пакете не может быть больше одного атрибута State. Использование данного атрибута во многом зависит от реализации.
Атрибут Class
Данный атрибут посылается сервером клиенту в Access-Accept, и должен отправляется без изменения клиентом серверу, хранящему учетные записи (аккаунтинг) как часть Accounting-Request пакета, если используется аккаунтинг. Клиент не должен интерпретировать данный атрибут локально.
Атрибут Vendor-Specific
Данный атрибут позволяет производителям поддерживать свои собственные атрибуты. Данный атрибут не должен влиять на операции протокола RADIUS.
Сервер, который не знает, как интерпретировать относящуюся к производителю информацию, должен игнорировать данный атрибут.
Атрибут Session-Timeout
Данный атрибут устанавливает максимальное время (в секундах) перед тем, как завершить сессию или ожидание ответа. Атрибут может быть послан сервером клиенту в Access-Accept или Access-Challenge.
Атрибут Idle-Timeout
Данный атрибут устанавливает максимально допустимое число секунд простоя соединения перед тем, как завершить сессию или ожидание ответа. Атрибут может быть послан сервером клиенту в Access-Accept или Access-Challenge.
Атрибут Termination-Action
Данный атрибут определяет действие, которое должен выполнить NAS при завершении определенного сервиса. Используется только в пакетах Access-Accept.
Атрибут Called-Station-Id
Данный атрибут позволяет NAS послать в пакете Access-Request номер телефона, который использовал пользователь. Заметим, что это может отличаться от номера телефона, с которого пришел вызов. Данный атрибут используется только в пакетах Access-Request.
Атрибут Calling-Station-Id
Данный атрибут позволяет NAS послать в пакете Access-Request номер телефона, с которого пришел вызов. Атрибут используется только в пакетах Access-Request.
Атрибут NAS-Identifier
Данный атрибут содержит строку, идентифицирующую NAS, который создал исходный Access-Request. Атрибут используется только в пакетах Access-Request. Либо NAS-IP-Address, либо NAS-Identifier должен присутствовать в пакете Access-Request.
Заметим, что NAS-Identifier не должен использоваться для выбора разделяемого секрета, аутентифицирующего запрос. Для выбора разделяемого секрета должен использоваться IP-адрес источника пакета Access-Request.
Атрибут Proxy-State
Данный атрибут может быть послан прокси-сервером другому серверу при перенаправлении Access-Request. Атрибут должен быть возвращен без изменения в Access-Accept, Access-Reject или Access-Challenge. Когда прокси-сервер получает ответ на свой запрос, он должен удалить свой собственный Proxy-State (последний Proxy-State в пакете) перед тем, как перенаправить ответ к NAS.
Если атрибут Proxy-State добавляется в пакет, то он должен быть добавлен после всех имеющихся атрибутов Proxy-State.
Содержимое всех других атрибутов Proxy-State, отличных от добавляемого, должно рассматриваться как неформатированные данные и не должно влиять на операции протокола.
Использование атрибута Proxy-State зависит от протокола.
Атрибут CHAP-Challenge
Данный атрибут содержит CHAP Challenge, посылаемый NAS. Он используется только в Access-Request пакетах.
Если значение вызова СНАР имеет длину в 16 октетов, то оно может быть размещено в поле аутентификатора запроса, а не в данном атрибуте.
Атрибут NAS-Port-Type
Данный атрибут определяет тип физического порта NAS, с которого выполняется аутентификация пользователя. Атрибут может использоваться вместо или в дополнение к атрибуту NAS-Port. Данный атрибут используется только в Access-Request пакетах. Если NAS различает свои порты, то в пакете Access-Request должен присутствовать либо атрибут NAS-Port, либо атрибут NAS-Port-Type, либо оба эти атрибута.
Атрибут Port-Limit
Данный атрибут устанавливает максимальное количество портов, которое может предоставить NAS своим пользователям. Атрибут может быть послан сервером клиенту в пакете Access-Accept. Предполагается, что он будет использоваться вместе с многоканальным РРР или в аналогичной технологии. Он также может быть послан NAS к серверу в качестве предпочтения, какое количество портов может использоваться, но сервер может игнорировать это.
Атрибуты RADIUS, специфичные для ПО Microsoft
Рассмотрим атрибуты, которые могут быть переданы в одном или более атрибутах RADIUS, тип которых есть Vendor-Specific. В одном Vendor-Specific атрибуте могут быть переданы несколько атрибутов; в этом случае эти атрибуты пакетируются в виде последовательности троек Vendor-Type/Vendor-Length/Value, которые следуют за начальными полями Type, Length и Vendor-Id. Поле Vendor-ID должно быть установлено в десятичное значение 311 (Microsoft).
Атрибуты для поддержки MS-CHAP V1
Microsoft разработала протокол MS-CHAP для аутентификации удаленных рабочих станций Windows, обеспечивая функциональность, аналогичную той, к которой привыкли пользователи сети. Где это возможно, MS-CHAP аналогичен стандартному СНАР. Основная разница в следующем:
- MS-CHAP предоставляет возможность вести переговоры об алгоритме (параметр Algorithm) в аутентификационном протоколе.
- Пакет Response протокола MS-CHAP имеет формат, совместимый с Microsoft Windows и сетевым ПО Microsoft. Формат MS-CHAP не требует, чтобы аутентифицирующая сторона хранила пароли в явном виде или в обратимом зашифрованном виде.
- Протокол MS-CHAP предоставляет механизм повторной аутентификации, которым управляет аутентифицирующая сторона.
- Протокол MS-CHAP предоставляет механизм изменения пароля, которым управляет аутентифицирующая сторона.
- Протокол MS-CHAP определяет расширенное множество кодов ошибок, которые возвращаются в поле Message пакета Failure.
Атрибуты RADIUS отражают эти отличия.
Атрибут MS-CHAP-Challenge
Данный атрибут содержит вызов, посылаемый NAS к пользователю MS-CHAP. Он может использоваться в пакетах Access-Request и Access-Challenge.
Атрибут MS-CHAP-Response
Данный атрибут содержит ответ, передаваемый пользователем в ответ на вызов. Атрибут используется только в пакетах Access-Request.
Атрибут MS-CHAP-Domain
Атрибут MS-CHAP-Domain определяет Window-домен, в котором пользователь был аутентифицирован. Данный атрибут может быть включен в пакеты Access-Accept и Accounting-Request.
Атрибут MS-CHAP-Error
Атрибут MS-CHAP-Error содержит информацию об ошибке, относящуюся к предыдущему MS-CHAP-обмену. Данный атрибут может использоваться в обменах как MS-CHAP-V1, так и MS-CHAP-V2. Данный атрибут используется только в пакетах Access-Reject.
Атрибут MS-CHAP-CPW-1
Данный атрибут позволяет пользователю изменить свой пароль, если он истек. Данный атрибут может использоваться только в пакетах Access-Request и должен включаться только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль пользователя истек, и версия MS-CHAP не меньше 2.
Атрибут MS-CHAP-CPW-2
Данный атрибут позволяет пользователю изменить свой пароль, если он истек. Данный атрибут используется только в пакетах Access-Request, и включается только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль истек, и версия MS-CHAP равна 2.
Атрибут MS-CHAP-LM-Enc-PW
Данный атрибут содержит новый пароль Windows, скрытый с помощью хэша старого пароля. Скрытый пароль Windows имеет длину 516 октетов; так как это длиннее, чем максимальная длина RADIUS-атрибута, пароль разделяется на несколько частей и передается в нескольких атрибутах. В атрибут включается последовательный номер (2 октета), чтобы обеспечить возможность правильной сборки фрагментов пароля.
Атрибут используется только в пакетах Access-Request совместно с атрибутом MS-CHAP-CPW-2. Атрибут должен включаться только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль пользователя истек, и версия MS-CHAP равна 2 или более.
Атрибут MS-CHAP-NT-Enc-PW
Данный атрибут содержит новый пароль Windows, скрытый с помощью хэша старого пароля Windows. Скрытый пароль Windows имеет длину 516 октетов; так как это длиннее, чем максимальная длина RADIUS-атрибута, то пароль разделяется на несколько частей и передается в нескольких атрибутах. Последовательный номер включается в атрибут, чтобы обеспечить сборку фрагментов пароля.
Данный атрибут используется только в пакете Access-Request совместно с атрибутами MS-CHAP-CPW-2 и MS-CHAP-CPW. Он включает только в том случае, если атрибут MS-CHAP-Error был включен в непосредственно предшествующий пакет Access-Reject, поле String атрибута MS-CHAP-Error указывает, что пароль пользователя истек, и версия протокола MS-СНАР равна 2 или более.