由于公司人员规模比较大,且仍在迅速扩张,账号管理的问题日益凸显,现在想部署一种统一认证的方案,用于公司内部的各种系统及服务器的登录认证,我们运维组之前考虑的是使用 ldap,开发那边推荐 radius, 我之前以为 radius 主要是用于做计费的,不过我看了下相关资料,觉得 radius 做认证倒确实比 ldap 专业,支持也比较普遍,好像也比ldap容易配置。但又觉得ldap方案好像要简单一些,后者只是将认证信息集中存储在目录服务器中,ldap server 本身不提供认证功能,各客户端在需要做认证授权时从ldap server 获取用户信息自行认证,而 radius 的重点则在其提供认证授权功能,认证相关的数据则是另外存储在数据库或者ldap 中,感觉使用radius好像是凭空多添加了一层。
另外radius 默认使用 udp + md5 加密(只加密账号密码),安全性不是很好,当然可以通过使用 radsec 提供的 tcp + tls 来加强安全性
另外,在网上搜索统一认证的方案,大多是目录服务或者 kerberos 方案,很少提到radius的,是不是 radius 不适合企业内部的统一认证?
题主你好,你这个问题显然是自己经过学习和研究过提出的,所以像和你交流一下。认为有问题的同学请给我留言,我也好修改:)
1.LDAP确实主要是用来存储客户信息,本身不提供认证功能的,但是你说的“客户端在需要做认证授权时从ldap server 获取用户信息自行认证“ 这是不对的,如果需要做身份认证的系统从ldap获取用户信息自己判断用户输入的用户名和密码是否正确,那么该系统是不是需要从LDAP获取用户密码了呢?这怎么可能呢。。。
一般情况下,LDAP需要结合SASL做认证,这个过程和radius的交互没什么区别,需要认证的系统将用户输入的用户名和密码送给SASL,SASL到LDAP中做查询,通过则返回通过认证,不通过则返回认证失败。
2.简单的认证所不能解决的问题
要知道,你的应用目标环境是一家公司的办公环境(也许包括开发环境,也许包括生产环境),总之,这样的环境中,一定是有多个使用者,多个服务提供者的。
那么一般企业内部的需求,除了最基本的安全功能以外,还有以下需求:
1)每个使用者都可能使用多个服务,每个服务可以被多个使用者使用
2)使用者不希望使用一个服务时,每操作一次都要输入密码认证一次
3)使用者不希望每次使用不同的服务都需要输入密码认证一次
显然,上面这三个需求,radius协议无法满足,radius协议可以帮你做认证,但是它不能告诉服务端这个使用者已经经过了我的认证,你可以给他使用了
3.kerberos的好处
OK,即使这样,为什么非要用kerberos呢?http://jayao.blog.51cto.com/2454790/655151 这里有篇雅典娜和欧里庇得斯的对话,讲述了为什么有kerberos,以及它在企业环境中做什么事情的。
我按照我的理解简单描述一下,kerberos就是提供了一个不需要传输你的密码的情况下,可以给你和你想使用的服务之间建立信任关系的服务。而且不需要你每次都输入密码。具体他怎么做到的,去读读那篇很有意思的对话。
4.何种方案好
不差钱的情况下,强烈建议微软的AD。。。差钱的话,只能搞搞openldap了:(
如果对kerberos协议有更多兴趣,欢迎探讨,刚工作的那年,被这玩意折磨死了。。。