RADIUS AAA

Cumulus Linux 提供附加软件包,使 RADIUS 用户能够以最少的配置透明地登录交换机。无需在交换机上创建帐户或目录。身份验证使用 PAM,包括登录、sshsudosu

安装 RADIUS 软件包

NVUE 会自动安装 RADIUS AAA 软件包;如果您使用 NVUE 命令配置 RADIUS AAA,则必安装软件包。

如果您使用 Linux 命令配置 RADIUS AAA,则必须在开始配置之前安装 RADIUS libnss-mapuserlibpam-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 帐户,以及 nvsetnvapply 组。sudo 组包括 radius_priv_user 帐户。这使所有 RADIUS 登录能够运行 NVUE nv show 命令,并使所有特权 RADIUS 用户也能够运行 nv setnv unsetnv 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) 手册页描述了配置文件。

平面文件映射源自登录期间分配的会话号,该会话号在 susudo 之间保持不变。Cumulus Linux 在注销时删除映射。

本地回退身份验证

如果站点希望在任何 RADIUS 服务器都不可访问时允许用户的本地回退身份验证,则可以在交换机上将特权用户帐户添加为本地帐户。

要配置用于本地回退身份验证的帐户

  1. 按照添加新用户帐户中的描述,添加具有所需角色和权限的本地用户帐户。

  2. 要确保仅当任何 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 设置为正确的 VRF

    cumulus@switch:~$ vrf exec default bash
    cumulus@switch:~$ sudo