RADIUS AAA
Cumulus Linux 提供附加软件包,使 RADIUS 用户能够以最少的配置透明地登录交换机。无需在交换机上创建帐户或目录。身份验证使用 PAM,包括登录、ssh
、sudo
和 su
。
安装 RADIUS 软件包
NVUE 会自动安装 RADIUS AAA 软件包;如果您使用 NVUE 命令配置 RADIUS AAA,则不必安装软件包。
如果您使用 Linux 命令配置 RADIUS AAA,则必须在开始配置之前安装 RADIUS libnss-mapuser
和 libpam-radius-auth
软件包。这些软件包位于 cumulus-local-apt-archive
存储库中,该存储库嵌入在 Cumulus Linux 映像中。即使交换机未连接到互联网,您也可以安装这些软件包。
要安装 RADIUS 软件包
cumulus@switch:~$ sudo apt-get update
cumulus@switch:~$ sudo apt-get install libnss-mapuser libpam-radius-auth
安装 libpam-radius-auth
软件包时,Cumulus Linux 会提示您覆盖本地文件(使用软件包中的文件)还是保留本地文件。默认选项是保留本地文件,这不允许 RADIUS 按预期运行。要安装 libpam-radius-auth
软件包并覆盖本地文件,请运行以下命令
cumulus@switch:~$ sudo apt-get -y -o Dpkg::Options::=--force-confnew install libnss-mapuser libpam-radius-auth
如果您在不覆盖本地文件的情况下安装 libpam-radius-auth
软件包,则必须使用 sudo apt-get -y -o Dpkg::Options::=--force-confnew install libnss-mapuser libpam-radius-auth
命令删除并重新安装该软件包,或者使用 sudo pam-auth-update –force
命令覆盖本地文件,而无需删除或重新安装该软件包。
安装完成后,重新启动交换机或运行 sudo systemctl restart nvued
命令。
nvshow
组包括 radius_user
帐户,以及 nvset
和 nvapply
组。sudo
组包括 radius_priv_user
帐户。这使所有 RADIUS 登录能够运行 NVUE nv show
命令,并使所有特权 RADIUS 用户也能够运行 nv set
、nv unset
和 nv apply
命令,并使用 sudo
。
必需的 RADIUS 客户端配置
安装必需的 RADIUS 软件包后,在交换机(RADIUS 客户端)上配置以下必需设置
- 设置至少一个 RADIUS 服务器的 IP 地址或主机名。您可以为服务器指定端口(可选)。默认端口号为 1812。
- 设置 RADIUS 服务器和客户端之间共享的密钥。如果密钥中包含特殊字符(例如 $),则必须将密钥括在单引号 (') 中。
- 如果您使用 NVUE 命令配置 RADIUS,则还必须
- 设置 Cumulus Linux 联系 RADIUS 服务器进行负载均衡的优先级。您可以设置介于 1 到 100 之间的值。值越低,优先级越高。
- 设置本地和 RADIUS 用户的身份验证顺序的优先级。您可以设置介于 1 到 100 之间的值。值越低,优先级越高。
在使用 NVUE 配置任何 RADIUS 设置并运行 nv config apply
后,您必须使用 sudo systemctl restart nvued.service
命令重新启动 NVUE 服务。
以下示例命令设置
- RADIUS 服务器的 IP 地址为 192.168.0.254,端口为 42。
- 密钥为
'myradius$key'
。 - Cumulus Linux 联系 RADIUS 服务器的优先级为 10。
- 身份验证顺序为 10,以便 RADIUS 身份验证优先于本地身份验证。
cumulus@switch:~$ nv set system aaa radius server 192.168.0.254 port 42
cumulus@switch:~$ nv set system aaa radius server 192.168.0.254 secret 'myradius$key'
cumulus@switch:~$ nv set system aaa radius server 192.168.0.254 priority 10
cumulus@switch:~$ nv set system aaa authentication-order 10 radius
cumulus@switch:~$ nv set system aaa authentication-order 20 local
cumulus@switch:~$ nv config apply
编辑 /etc/pam_radius_auth.conf
文件以指定至少一个 RADIUS 服务器的主机名或 IP 地址,以及您要用于身份验证和加密与每个服务器通信的共享密钥。
...
mapped_priv_user radius_priv_user
# server[:port] shared_secret timeout (secs) src_ip
192.168.0.254:42 myradius$key 3
...
您必须能够将交换机的主机名解析为 IP 地址。如果在 DNS 中找不到主机名,您可以手动将主机名添加到 /etc/hosts
文件中。请注意,手动将主机名添加到 /etc/hosts
文件可能会导致问题,因为 DHCP 会分配 IP 地址,而 IP 地址随时可能更改。
Cumulus Linux 按照列出的顺序验证多个服务器配置行。除了内存之外,您可以使用的 RADIUS 服务器数量没有限制。
服务器端口号是可选的。系统会在 /etc/services
文件中查找端口。但是,您可以覆盖 /etc/pam_radius_auth.conf
文件中的端口。
可选 RADIUS 配置
您可以配置以下全局 RADIUS 设置和服务器特定设置。
设置 | 描述 |
---|---|
vrf | 您要用于与 RADIUS 服务器通信的 VRF。这通常是管理 VRF (mgmt ),它是交换机上的默认 VRF。您不能指定多个 VRF。 |
privilege-level | 确定用户是否可以使用 NVUE 命令和 sudo 配置交换机,或者是否具有只读权限的最低权限级别。默认权限级别为 15,这提供完全管理员访问权限。这仅是一个全局选项;您不能为特定的 RADIUS 服务器设置最低权限级别。 |
retransmit | 当 RADIUS 身份验证请求超时时,允许的请求最大重传尝试次数。这仅是一个全局选项;您不能为特定的 RADIUS 服务器设置重传尝试次数。 |
timeout | 服务器速度慢或延迟高时的超时值。您可以设置介于 1 到 60 之间的值。默认超时为 3 秒。如果配置了多个 RADIUS 服务器,则可以为所有服务器设置全局超时。 |
source-ipv4 source-ipv6 | 用于连接所有 RADIUS 服务器的特定接口。要为特定的 RADIUS 服务器配置源 IP 地址,请使用 source-ip 选项。 |
debug | 用于故障排除的调试选项。调试消息写入 /var/log/syslog 。当 RADIUS 客户端正常工作时,您可以禁用调试选项。您可以为所有服务器全局启用调试选项。 |
以下示例配置全局 RADIUS 设置
cumulus@switch:~$ nv set system aaa radius vrf mgmt
cumulus@switch:~$ nv set system aaa radius privilege-level 10
cumulus@switch:~$ nv set system aaa radius retransmit 8
cumulus@switch:~$ nv set system aaa radius timeout 10
cumulus@switch:~$ nv set system aaa radius source-ipv4 192.168.1.10
cumulus@switch:~$ nv set system aaa radius debug enable
cumulus@switch:~$ nv config apply
以下示例配置特定 RADIUS 服务器的 RADIUS 设置
cumulus@switch:~$ nv set system aaa radius server 192.168.0.254 source-ip 192.168.1.10
cumulus@switch:~$ nv set system aaa radius server 192.168.0.254 timeout 10
cumulus@switch:~$ nv config apply
设置 | 描述 |
---|---|
vrf | 您要用于与 RADIUS 服务器通信的 VRF。这通常是管理 VRF (mgmt ),它是交换机上的默认 VRF。您不能指定多个 VRF。 |
privilege-level | 确定交换机上用户的权限级别。 |
timeout | 服务器速度慢或延迟高时的超时值。您可以设置介于 1 到 60 之间的值。默认超时为 3 秒。如果配置了多个 RADIUS 服务器,则可以为所有服务器设置全局超时。 |
src_ip | 用于连接 RADIUS 服务器的特定 IPv4 或 IPv6 接口。如果配置了多个 RADIUS 服务器,则可以配置一个特定接口来连接所有 RADIUS 服务器。 |
debug | 用于故障排除的调试选项。调试消息写入 /var/log/syslog 。当 RADIUS 客户端正常工作时,您可以禁用调试选项。如果配置了多个 RADIUS 服务器,则可以为所有服务器全局启用调试选项。 |
编辑 /etc/pam_radius_auth.conf
文件。
...
# Set the minimum privilege level in VSA attribute shell:privilege-level=VALUE
# default is 15, range is 0-15.
privilege-level 10
#
# Uncomment to enable debugging, can be used instead of altering pam files
debug
#
# Account for privileged radius user mapping. If you change it here, you need
# to change /etc/nss_mapuser.conf as well
mapped_priv_user radius_priv_user
# server[:port] shared_secret timeout (secs) src_ip
192.168.0.254:42 myradius$key 10 192.168.1.10
vrf-name mgmt
启用无本地帐户登录
NVUE 不提供启用无本地帐户登录的命令。
LDAP 通常不与交换机一起使用,并且在本地添加帐户很麻烦,Cumulus Linux 包含 libnss-mapuser
软件包的映射功能。
映射使用两个 NSS(名称服务交换机)插件,一个用于帐户名称,另一个用于 UID 查找。安装过程会在 /etc/nsswitch.conf
文件中自动配置这些帐户,并在您删除软件包时将其删除。有关此插件的完整描述,请参阅 nss_mapuser (8)
手册页。
用户名在登录时映射到配置文件中指定的固定帐户,固定帐户的字段用作正在登录用户的模板。
例如,如果您查找名称 dave
,并且配置文件中的固定帐户为 radius\_user
,并且 /etc/passwd
中的条目为
radius_user:x:1017:1002:radius user:/home/radius_user:/bin/bash
那么当您运行 getent passwd dave
时返回的匹配行是
cumulus@switch:~$ getent passwd dave
dave:x:1017:1002:dave mapped user:/home/dave:/bin/bash
如果主目录 /home/dave
尚不存在,则登录过程会创建该目录,并使用 mkhomedir_helper
命令使用标准骨架文件填充该目录。
配置文件 /etc/nss_mapuser.conf
配置插件。该文件包括映射的帐户名称,默认情况下为 radius_user
。您可以通过编辑该文件来更改映射的帐户名称。nss_mapuser (5)
手册页描述了配置文件。
平面文件映射源自登录期间分配的会话号,该会话号在 su
和 sudo
之间保持不变。Cumulus Linux 在注销时删除映射。
本地回退身份验证
如果站点希望在任何 RADIUS 服务器都不可访问时允许用户的本地回退身份验证,则可以在交换机上将特权用户帐户添加为本地帐户。
要配置用于本地回退身份验证的帐户
按照添加新用户帐户中的描述,添加具有所需角色和权限的本地用户帐户。
要确保仅当任何 RADIUS 服务器都不可访问时本地用户帐户密码才对用户进行身份验证,请配置身份验证顺序,以便 RADIUS 具有比本地身份验证更高的优先级
cumulus@switch:~$ nv set system aaa authentication-order 10 radius
cumulus@switch:~$ nv set system aaa authentication-order 20 local
在 /etc/nsswitch.conf
文件中配置 passwd
行,以将身份验证顺序中的 files
放在 mapuid
之后
cumulus@switch:~$ vi /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: mapuid files mapname
group: mapname files
shadow: files
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
- 如果您配置身份验证顺序以优先于 RADIUS 进行本地身份验证,则仅当用户未在本地配置时,登录才会回退到 RADIUS。
- 如果您在本地交换机和 RADIUS 服务器上配置了相同的帐户,则必须先配置本地用户帐户,然后再尝试使用 RADIUS 对用户进行身份验证;否则,本地帐户创建将失败。
RADIUS 用户命令计费
RADIUS 用户命令计费允许您记录 RADIUS 用户运行的每个命令,并将命令发送到 RADIUS 服务器以进行审核。审核日志是 PCI 和 HIPPA 等合规性标准的要求。
必须将 RADIUS 服务器配置为接受来自客户端的数据包,并具有 NV-Command-String
的字典条目。
当您启用或更改计费设置时,NVUE 会断开当前登录的 RADIUS 用户的连接。
启用 RADIUS 计费
要启用 RADIUS 用户命令计费
cumulus@switch:~$ nv set system aaa radius accounting state enabled
cumulus@switch:~$ nv config apply
要禁用 RADIUS 用户命令计费,请运行 nv set system aaa radius accounting state disabled
命令。
/var/log/radius-cmd-acct.log
文件包含日志的本地副本,该副本与服务器接收的日志匹配。
如果您未收到任何计费数据包,请检查 /var/log/radius-send-cmd.log
文件。
要查看是否启用了 RADIUS 用户命令计费,请运行 nv show system aaa radius
命令。
将计费记录发送到第一个响应
默认情况下,Cumulus Linux 会将计费记录发送到所有服务器。您可以更改此设置,以将计费记录发送到第一个响应的服务器。如果第一个可用服务器没有响应,Cumulus Linux 将继续尝试服务器列表(按优先级),直到有一个服务器可访问。如果所有服务器都不可访问,则会有 30 秒的超时时间,之后 Cumulus Linux 会重试服务器。在 10 次重试失败后,交换机会丢弃数据包。
cumulus@switch:~$ nv set system aaa radius accounting send-records first-response
cumulus@switch:~$ nv config apply
要重置为默认配置(将计费记录发送到所有服务器),请运行 nv set system aaa radius accounting send-records all
命令。如果所有服务器都没有响应,则会有 30 秒的超时时间,之后 Cumulus Linux 会重试服务器。在 10 次重试失败后,交换机会丢弃数据包。
验证 RADIUS 客户端配置
要验证 RADIUS 客户端配置,请以非特权用户身份登录并运行 nv set interface
命令。
在此示例中,ops
用户不是特权 RADIUS 用户,因此 ops
用户无法添加接口。
ops@leaf01:~$ nv set interface swp1
ERROR: User ops does not have permission to make networking changes.
在此示例中,admin
用户是特权 RADIUS 用户(权限级别为 15),因此能够添加接口 swp1。
admin@leaf01:~$ nv set interface swp1
admin@leaf01:~$ nv apply
显示 RADIUS 配置
要显示全局 RADIUS 配置,请运行 nv show system aaa radius
命令
cumulus@switch:~$ nv show system aaa radius
operational applied
--------------- ------------- -------------
vrf mgmt mgmt
debug disabled disabled
privilege-level 15
retransmit 0 0
port 1812
timeout 3
accounting enabled enabled
[server] 192.168.0.254 192.168.0.254
要显示所有已配置的 RADIUS 服务器,请运行 nv show system aaa radius server
命令
cumulus@switch:~$ nv show system aaa radius server
Hostname Port Priority Password source-ip Timeout
------------- ---- -------- -------- ------------ -------
192.168.0.254 42 1 * 192.168.1.10 10
要显示特定 RADIUS 服务器的配置,请运行 nv show system aaa radius server <server>
命令
cumulus@switch:~$ nv show system aaa radius server 192.168.0.254
operational applied
--------- ------------ ------------
port 42 42
timeout 10 10
secret * *
priority 1 10
删除 RADIUS 客户端软件包
使用以下命令删除 RADIUS 软件包
cumulus@switch:~$ sudo apt-get remove libnss-mapuser libpam-radius-auth
当您删除软件包时,Cumulus Linux 会从 /etc/nsswitch.conf
文件和 PAM 文件中删除插件。
要删除这些软件包的所有配置文件,请运行
cumulus@switch:~$ sudo apt-get purge libnss-mapuser libpam-radius-auth
Cumulus Linux 不会从 /etc/passwd
或 /etc/group
文件或主目录中删除 RADIUS 固定帐户。它们会保留,以防对帐户或主目录中的文件进行修改。
要删除 RADIUS 用户的主目录,请运行以下命令获取列表
cumulus@switch:~$ sudo ls -l /home | grep radius
对于列出的所有用户(radius_user
除外),运行以下命令以删除主目录
cumulus@switch:~$ sudo deluser --remove-home USERNAME
USERNAME
是帐户名称(主目录的相对部分)。此命令会发出以下警告,因为该用户未在 /etc/passwd
文件中列出。
userdel: cannot remove entry 'USERNAME' from /etc/passwd
/usr/sbin/deluser: `/usr/sbin/userdel USERNAME' returned error code 1. Exiting.
删除所有 RADIUS 用户后,运行命令以删除固定帐户。如果 /etc/nss_mapuser.conf
文件中的帐户有更改,请使用该帐户名称而不是 radius_user
。
cumulus@switch:~$ sudo deluser --remove-home radius_user
cumulus@switch:~$ sudo deluser --remove-home radius_priv_user
cumulus@switch:~$ sudo delgroup radius_users
注意事项
如果两个或多个 RADIUS 用户同时登录,则 UID 查找仅返回第一个登录的用户。任何一个用户运行的任何进程都适用于两者,并且任何一个用户创建的所有文件都适用于第一个匹配的名称。此过程类似于将两个本地用户添加到密码文件中,并具有相同的 UID 和 GID,并且是使用密码文件中的固定用户的 UID 的固有局限性。当前算法返回与映射文件中 UID 匹配的第一个名称,该名称是第一个或第二个登录的用户。
当您同时安装 TACACS+ 和 RADIUS AAA 客户端时,Cumulus Linux 不会尝试 RADIUS 登录。作为一种解决方法,请勿在同一交换机上同时安装 TACACS+ 和 RADIUS AAA 客户端。
当 RADIUS 服务器在管理 VRF 外部可访问时(例如默认 VRF),当您尝试运行
sudo
时,可能会看到以下错误消息2008-10-31T07:06:36.191359+00:00 SW01 sudo: pam_radius_auth(sudo:auth): Bind for server 10.1.1.25 failed: Cannot assign requested address 2008-10-31T07:06:36.192307+00:00 sw01 sudo: pam_radius_auth(sudo:auth): No valid server found in configuration file /etc/pam_radius_auth.conf
发生错误的原因是
sudo
尝试通过管理 VRF 向 RADIUS 服务器进行身份验证。在运行sudo
之前,您必须将 shell 设置为正确的 VRFcumulus@switch:~$ vrf exec default bash cumulus@switch:~$ sudo