在 FreeRADIUS 中合并 linux 系统用户
行动时刻 - 在FreeRADIUS中整合Linux系统用户
FreeRADIUS文档建议它作为非特权用户运行。 当我们将系统用户作为用户存储时,此非特权用户将需要访问/etc/shadow文件。 对于/etc/shadow文件的权限和所有权,三个发行版中的每一个都有不同的默认配置。
准备权限
默认情况下,Ubuntu具有/etc/shadow文件的正确权限。 在Ubuntu中,/etc/shadow文件由名为shadow的组拥有,该组具有对该文件的读取权限。 安装FreeRADIUS时,会添加一个名为freerad的用户和组。 用户freerad被添加到影子组,允许对/etc/shadow进行freerad读取访问。 您可以使用以下命令在Ubuntu上进行确认。 要检查/etc/shadow文件的所有权:
$> ls -l /etc/shadow
-rw-r----- 1 root shadow 743 2012-06-06 18:32 /etc/shadow
使用以下命令确认freerad用户所属的组:
$> getent group | grep freerad
shadow:x:42:freerad
freerad:x:112:
ssl-cert:x:113:freerad
SUSE与众不同
随FreeRADIUS一起发布的SUSE README文件建议您将radiusd.conf文件中的用户和组的值更改为以下内容:
user = root
group = root
虽然SUSE中的/etc/shadow文件由shadow组拥有,但将FreeRADIUS运行的非特权用户添加到shadow组不会产生预期的结果。 README文件的存在是有原因的。
当用户和组的值发生更改时
如果您在radiusd.conf中更改了用户和组的值,则在重新启动服务器时将显示以下消息:
我们不拥有/var/run/radiusd/radiusd.sock
问题在于radiusd目录的所有权,因为radiusd.sock文件甚至不存在。 通过将/var/run/radiusd目录的所有权更改为radiusd.conf文件中指定的用户的所有权来修复它。 在SUSE上,以下命令将解决问题:chown root. /var/run/radius
CentOS
CentOS没有名为shadow的组,而/ etc / shadow文件由用户和组root拥有。 要允许运行FreeRADIUS服务器的组(radiusd)读取/ etc / shadow文件,我们会将/ etc / shadow的组所有权更改为radius。 然后,我们使用以下命令将影子文件的读取权限提供给拥有它的组: chgrp radiusd / etc / shadow chmod g + r / etc / shadow 这使我们结束了环境准备; 现在我们可以激活系统用户了
激活系统用户
要将系统用户包含在FreeRADIUS中作为用户存储,这是一个简短而甜蜜的过程。 跟着这些步骤: 1.编辑 sites-enabled/default文件,并在授权部分(authorize)下取消注释unix。 2.在调试模式下重新启动FreeRADIUS。 3.使用Linux服务器上的existng系统用户执行身份验证测试。 我们假设bob是系统用户,他的密码是passbob。 radtest bob passbob 127.0.0.1 100 testing123 4.观察调试输出以查看测试是否成功。
刚刚发生了什么?
我们已将unix模块包含在默认虚拟服务器的authorize部分中。 这使得FreeRADIUS能够针对在服务器上定义的系统用户检查传入的访问请求。 让我们研究一下FreeRADIUS的调试输出,看看如何返回Access-Accept。
授权使用unix模块
在FreeRADIUS的调试输出中,以下行表示unix模块找到了一个名为bob的用户并更新了FreeRADIUS中的一些内部值: ++ [unix]returns updated 当用户文件中定义的alice进行身份验证时,您可以将其与输出进行比较: ++ [unix]returns notfound unix模块返回一个已知的良好密码(采用Crypt格式),pap模块可以使用该密码对用户进行身份验证。
如果即使定义了用户,unix模块也返回notfound,请确认/etc/shadow文件上的权限是否正确。 如果仍然失败,请将radius.conf文件中的用户和组行更改为root用户,重新启动FreeRADIUS,然后重试。 还要记住,Linux/Unix区分大小写。 这适用于用户名和密码!
使用pap进行身份验证
调试输出的验证部分指示pap使用由unix模块给出的已知良好密码进行验证。
Executing group from file /etc/freeradius/sites-enabled/default
+- entering group PAP {…}
[pap] login attempt with password "passbob"
[pap] Using CRYPT password "$6$SI3ZfzEr$M0ujsOhTAXT7LP5KzzYhHdFL4/
iJtfEdX3lOeGJLbDDc.SQsTnl8yuOqB948DDvdKBScb7Mp8Myro5FeekgLw."
[pap] User authenticated successfully
++[pap] returns ok
包含系统用户的提示
将系统用户包括为用户存储时,需要记住以下几点:
- 只能使用PAP身份验证协议。Chap和MS-Chap不工作。
- Linux系统使用/etc/shadow文件来存储密码。非特权用户无法访问此文件。当您以root以外的用户身份运行freeradius时(按照建议),请确保此用户可以访问shadow文件。
- SUSE是不同的,需要以用户和组根用户身份运行freeradius。这在radius.conf文件中指定。
- 如果您创建的系统用户只会被freeradius使用,那么出于安全原因,最好将其默认主目录和shell更改为与用户nobody相同。
较旧的Linux/Unix系统可能只使用/etc/passwd文件而不是 实现shadow密码数据库机制。 用户密码将与用户的详细信息一起存储在/etc/passwd文件中。 在这些系统上,/etc/passwd文件的第二个字段将包含加密的密码而不是x。 在/etc/shadow文件的第二个字段中,可能会找到以下特殊字符:
- NP或! 或null(无密码)
- LK或*(账户被锁定)
- ! (密码已过期)