交换机是基于域(domain)对用户管理
交换机时基于域对用户进行管理,
在目前AAA的实现中,所有用户都属于某个域。用户属于哪个域是由用户名中带的“@”后的字符串来决定的,比如“user@hua”,就属于“hua”域;如果用户名中没有带“@”,对于普通用户,属于系统缺省的default域,对于管理用户,属于系统缺省的default_admin域。
domain default // 普通用户的默认域
domain default_admin // 管理人员的默认域
domain huawei //创建一个huawei的域
做802.1x认证时,交换机domain的几种用法分析
在做802.1X认证时,3A RADIUS服务器上需要存储用户的用户名和密码。客户端做认证时输入的用户名和3A RADIUS服务器上的用户名的不一定是 一样的。客户端上输入的用户名可能为A@X,也可能直接就是A,这个和交换机上的domain配置有关。
原理分析
EAP与CHAP的区别
首先分析一下EAP和CHAP之间的区别:
EAP和chap的区别就在于,如果1x的认证方式是EAP的话,即dot1x authentication-method eap,NAS(交换机等)仅仅是做到了EAP报文的透传,准确地说就是在Client端和Radius之间作消息的封装和转发。所以认证时输入的用户名是什么,交换机就上传什么到3A服务器上。这个可以通过在交换机上debug看到,或者抓包在Access-request报文中看到。
CHAP对认证报文的处理方式
而chap的方式,会对上传到设备的用户名是否带后缀做处理。具体的处理方式就是:
1) 当如果交换机上配置了user-name-format with-domain,不管认证时输入的用户名是否带后缀,交换机都会处理成带后缀的用户名(例如test@abc)上传到3A服务器上去匹配。
举例来说:
3A服务器上有两个帐号,一个是test1,一个是test2。test1申请的服务是suffix(这个服务是配置了suffix为abc的),test2申请的服务是nosuffix(这个服务是没有配置suffix为abc的)。
这里的对象是交换机,如果交换机上指定缺省的domain就是是abc,即domain default enable abc
当认证输入的用户名是test1时,按照上面的配置,则上传到服务器上的就是test1@abc,显然和服务器上的帐号test1(对应的服务后缀为abc的suffix服务)相匹配,就认证通过了。当输入用户名是test1@abc时,上传到服务器上的就是test1@abc,认证会通过。
当认证输入的用户名是test2时,按照上面的配置(domain default enable abc),则上传到服务器上的报文属性中就是携带test2@abc,但服务器上的帐号test2和其服务nosuffix并不知道还有一个abc存在,相当于test2@abc和服务器上的test2做比较,所以就会报“The user does not exist or has not subscribed for this service”。 当认证输入用户名是test2@abc时,上传到服务器上的是test2@abc,也会报“The user does not exist or has not subscribed for this service”。
交换机上如果没有指定缺省domain是abc的话,则交换机默认认为domain为system,此时用户输入的用户名test1不带后缀,交换机就会默认这个用户名的后缀是system,当成test1@system,那交换机本机就认为这个用户名是不对的,直接就被本机拒绝了,就是reject by local server。若输入test1@abc,还是会认证通过。只输入test2也是认为是test2@system,直接就reject by local server。输入test2@abc的话,仍然和前面的情况一样,是“The user does not exist or has not subscribed for this service”。
2) 当如果交换机上配置了user-name-format without-domain,对于chap方式,无论客户端发起认证时用户名后面是否有后缀,交换机在认证或计费请求报文中username属性中都不带域名后缀------- 上传到服务器时都不带后缀。
仍然以上面的例子来说:
如果交换机上指定缺省的domain就是是abc,当输入的用户名是test1时,按照上面的配置,则上传到服务器上的就是test1,显然和服务器上的帐号test1(对应的服务后缀为abc的suffix服务)不匹配(相当于test1和test1@abc做比较),所以会报“The user does not exist or has not subscribed for this service”。当输入的用户名是test1@abc时,上传到3A服务器上的就是test1,仍然是test1和服务器上的test1@abc做比较,会报“The user does not exist or has not subscribed for this service”。
当认证输入用户名是test2或者test2@abc时,上传到服务器上的就是test2,就会和服务器上的test2比较,则认证时通过的。
如果交换机上没有指定缺省的domain的话,和前面一样,输入test1和test2的话,就会直接reject by local server。输入test2@abc,上传到3A上的是test2,可以认证成功。(服务上 关于test2 的认证是不带后缀的)
EAP对认证报文的处理方式
对于EAP方式的话,由于设备是实行eap透传,不对用户名和其后缀域名进行改动。分析和上面一致。差别就是上传到3A的username是带域名还是不带域名是由认证输入来决定(即用户输入),而不再是设备。
1) 如果交换机上指定了缺省了domain是abc的话,不管交换机上配置了user-name-format with-domain还是user-name-format without-domain,当认证输入用户名test1时,上传到3A上的是test1,会和3A上的test1@abc比较,显然是“The user does not exist or has not subscribed for this service”。当输入用户名是test1@abc时,上传到3A服务器上的是test1@abc,认证是通过的。当输入用户名是test2时,上传到3A服务器上的是test2,与3A服务器上用户列表中的test2匹配,认证成功。当输入用户名是test2@abc时,上传到3A服务器上的是test2@abc,与列表中test2不匹配,因此“The user does not exist or has not subscribed for this service”。
2) 如果交换机没有指定缺省的domain的话,默认是system作为这个缺省domain。不管交换机上配置了user-name-format with-domain还是user-name-format without-domain,当认证输入用户名test1时,在交换机本机的域是system,直接就reject by local server。当输入用户名是test1@abc时,上传到3A服务器上的是test1@abc,认证是通过的。当输入用户名是test2时,在交换机本机的域是system,直接就reject by local server。当输入用户名是test2@abc时,上传到3A服务器上的是test2@abc,与列表中test2不匹配,因此“The user does not exist or has not subscribed for this service”。