TACACS

Cumulus Linux 以透明方式实现 TACACS+ 客户端 AAA,并进行最少的配置。该客户端实现了此 IETF 文档中描述的 TACACS+ 协议。无需在交换机上创建帐户或目录。默认情况下,计费记录会发送到所有配置的 TACACS+ 服务器。使用每命令授权需要在交换机上进行额外的设置。

Cumulus Linux 中的 TACACS+

  • 使用 PAM 身份验证,包括 login、ssh、sudo 和 su。
  • 允许特权级别为 15 的用户使用 sudo 运行任何命令。
  • 允许特权级别为 15 的用户运行 NVUE nv set、nv unset 和 nv apply 命令,以及 nv show 命令。特权级别较低的 TACACS+ 用户只能执行 nv show 命令。
  • 最多支持八个 TACACS+ 服务器。除了 TACACS+ 客户端之外,请务必配置您的 TACACS+ 服务器。请参阅您的 TACACS+ 服务器文档。

TACACS+ 客户端软件包

NVUE 会自动安装 TACACS+ 软件包;如果您使用 NVUE 命令配置 TACACS+,则无需安装软件包。

如果您使用 Linux 命令配置 TACACS+,则必须安装 TACACS+ 软件包。即使交换机未连接到互联网,您也可以安装 TACACS+ 软件包;这些软件包位于 Cumulus Linux 映像中的 cumulus-local-apt-archive 存储库中。

要安装所有必需的软件包,请运行以下命令

cumulus@switch:~$ sudo -E apt-get update
cumulus@switch:~$ sudo -E apt-get install tacplus-client

必需的 TACACS+ 客户端配置

在交换机(TACACS+ 客户端)上配置以下必需的设置。

  • 设置至少一个 TACACS+ 服务器的 IP 地址或主机名。
  • 设置 TACACS+ 服务器和客户端之间共享的密钥(key)。
  • 设置您想要用于与 TACACS+ 服务器通信的 VRF。这通常是管理 VRF (mgmt),它是交换机上的默认 VRF。

如果您使用 NVUE 命令配置 TACACS+,则还必须为本地用户和 TACACS+ 用户的身份验证顺序设置优先级。

NVUE 命令要求您为每个 TACACS+ 服务器指定优先级。即使您只指定一个服务器,也必须设置优先级。

以下示例命令设置

  • TACACS+ 服务器优先级为 5。
  • 服务器的 IP 地址为 192.168.0.30。
  • 密钥为 abcdefghijklmnopqrstuvwxyz。

如果您在密码中包含特殊字符(例如 $),则必须将密码用单引号 (') 括起来。

  • VRF 为 mgmt。
  • 身份验证顺序,以便 TACACS+ 身份验证优先于本地身份验证(数字越小优先级越高)。
cumulus@switch:~$ nv set system aaa tacacs server 192.168.0.30 priority 5
cumulus@switch:~$ nv set system aaa tacacs server 192.168.0.30 secret abcdefghijklmnopqrstuvwxyz
cumulus@switch:~$ nv set system aaa tacacs vrf mgmt 
cumulus@switch:~$ nv set system aaa authentication-order 5 tacacs
cumulus@switch:~$ nv set system aaa authentication-order 10 local
cumulus@switch:~$ nv config apply

如果您希望服务器使用 IPv6,则必须添加 nv set system aaa tacacs server <server-id> prefer-ip-version 6 命令

cumulus@switch:~$ nv set system aaa tacacs server SERVER1 priority 5
cumulus@switch:~$ nv set system aaa tacacs server SERVER1 prefer-ip-version 6
...

如果您配置了多个 TACACS+ 服务器,则需要为每个服务器设置优先级。如果交换机无法与优先级最高的服务器建立连接,则会尝试与优先级次高的服务器建立连接。数字越小的服务器优先级越高。在下面的示例中,优先级值为 5 的服务器 192.168.0.30 的优先级高于优先级值为 10 的服务器 192.168.1.30。

cumulus@switch:~$ nv set system aaa tacacs server 192.168.0.30 priority 5
cumulus@switch:~$ nv set system aaa tacacs server 192.168.0.30 secret abcdefghijklmnopqrstuvwxyz 
cumulus@switch:~$ nv set system aaa tacacs server 192.168.1.30 priority 10
cumulus@switch:~$ nv set system aaa tacacs server 192.168.0.30 secret zyxwvutsrqponmlkjihgfedcba
cumulus@switch:~$ nv config apply
  1. 编辑 /etc/tacplus_servers 文件以添加至少一个服务器和一个共享密钥(key)。您可以在文件中的任何位置以任何顺序指定服务器和密钥参数。不允许使用空格(空格或制表符)。例如,如果您的 TACACS+ 服务器 IP 地址为 192.168.0.30,而您的共享密钥为 tacacskey,请将这些参数添加到 /etc/tacplus_servers 文件中

    cumulus@switch:~$ sudo nano /etc/tacplus_servers
    secret=abcdefghijklmnopqrstuvwxyz
    server=192.168.0.30
    

    Cumulus Linux 最多支持八个 TACACS+ 服务器。要指定多个服务器,请在 /etc/tacplus_servers 文件中每行添加一个服务器。连接按照文件中的顺序建立。

    cumulus@switch:~$ sudo nano /etc/tacplus_servers
    secret=abcdefghijklmnopqrstuvwxyz
    server=192.168.0.30
    secret=zyxwvutsrqponmlkjihgfedcba
    server=192.168.1.30
    

    如果您希望服务器使用 IPv6,则必须在 /etc/tacplus_servers 文件中添加 prefer_ip_version=6 参数

    cumulus@switch:~$ sudo nano /etc/tacplus_servers
    secret=mytacac$key
    server=server5
    prefer_ip_version=ipv6 
    secret=abcdefghijklmnopqrstuvwxyzabcde
    server=server6
    prefer_ip_version=ipv6 
    
  2. 取消注释 vrf=mgmt 行

    # If the management network is in a vrf, set this variable to the vrf name.
    # This would usually be "mgmt"
    # When this variable is set, the connection to the TACACS+ accounting servers
    # will be made through the named vrf.
    vrf=mgmt
    
  3. 重启 auditd

    cumulus@switch:~$ sudo systemctl restart auditd
    

可选的 TACACS+ 配置

您可以配置以下可选的 TACACS+ 设置

  • 用于 TACACS+ 服务器和客户端之间通信的端口。默认情况下,Cumulus Linux 使用 IP 端口 49。
  • TACACS 超时值,即在尝试下一个 TACACS+ 服务器之前,等待 TACACS+ 服务器响应的秒数。您可以指定介于 0 到 60 之间的值。默认值为 5 秒。
  • 与 TACACS+ 服务器通信时要使用的源 IP 地址,以便服务器可以识别客户端交换机。您必须指定一个 IPv4 地址,该地址必须对您使用的接口有效。此源 IP 地址通常是交换机上的环回地址。
  • TACACS+ 身份验证类型。您可以指定 PAP 以在用户和服务器之间发送明文,指定 CHAP 以在用户和服务器之间建立 PPP 连接,或者指定 login。默认值为 PAP。
  • 您不想发送到 TACACS+ 服务器进行身份验证的用户;例如,交换机上存在的本地用户帐户,例如 cumulus 用户。
  • 每个 TACACS+ 用户首次登录时,为其创建一个单独的主目录。默认情况下,交换机使用 /etc/passwd 中映射帐户中的主目录。如果主目录不存在,mkhomedir_helper 程序会创建它。此选项不适用于具有受限 shell 的帐户(映射到具有强制每命令授权的 TACACS 特权级别的用户)。

以下示例命令将超时设置为 10 秒,并将 TACACS+ 服务器端口设置为 32

cumulus@switch:~$ nv set system aaa tacacs timeout 10
cumulus@switch:~$ nv set system aaa tacacs server SERVER1 port 32
cumulus@switch:~$ nv config apply

以下示例命令将源 IP 地址设置为 10.10.10.1,并将身份验证类型设置为 CHAP

cumulus@switch:~$ nv set system aaa tacacs source-ip 10.10.10.1
cumulus@switch:~$ nv set system aaa tacacs authentication mode chap
cumulus@switch:~$ nv config apply

以下示例命令排除用户 USER1 不进行 TACACS+ 服务器身份验证,并使 Cumulus Linux 能够在每个 TACACS+ 用户首次登录时为其创建单独的主目录

cumulus@switch:~$ nv set system aaa tacacs exclude-user USER1
cumulus@switch:~$ nv set system aaa tacacs authentication per-user-homedir on
cumulus@switch:~$ nv config apply
  • 要设置服务器端口(使用 server:port 格式)、源 IP 地址、身份验证类型,并使 Cumulus Linux 能够为每个 TACACS+ 用户创建单独的主目录,请编辑 /etc/tacplus_servers 文件,然后重启 auditd。
  • 要设置超时和要从 TACACS+ 身份验证中排除的用户名,请编辑 /etc/tacplus_nss.conf 文件(您无需重启 auditd)。

以下示例将服务器端口设置为 32,身份验证类型设置为 CHAP,源 IP 地址设置为 10.10.10.1,并使 Cumulus Linux 能够在每个 TACACS+ 用户首次登录时为其创建单独的主目录

cumulus@switch:~$ sudo nano /etc/tacplus_servers
...
secret=mytacac$key
server=192.168.0.30:32
...
# Sets the IPv4 address used as the source IP address when communicating with
# the TACACS+ server.  IPv6 addresses are not supported, nor are hostnames.
# The address must work when passsed to the bind() system call, that is, it must
# be valid for the interface being used.
source_ip=10.10.10.1
...
# If user_homedir=1, then tacacs users will be set to have a home directory
# based on their login name, rather than the mapped tacacsN home directory.
# mkhomedir_helper is used to create the directory if it does not exist (similar
# to use of pam_mkhomedir.so). This flag is ignored for users with restricted
# shells, e.g., users mapped to a tacacs privilege level that has enforced
# per-command authorization (see the tacplus-restrict man page).
user_homedir=1
...
login=chap
cumulus@switch:~$ sudo systemctl restart auditd

以下示例将超时设置为 10 秒,并排除用户 USER1 不进行 TACACS+ 服务器身份验证

cumulus@switch:~$ sudo nano /etc/tacplus_nss.conf
...
# The connection timeout for an NSS library should be short, since it is
# invoked for many programs and daemons, and a failure is usually not
# catastrophic.  Not set or set to a negative value disables use of poll().
# This follows the include of tacplus_servers, so it can override any
# timeout value set in that file.
# It's important to have this set in this file, even if the same value
# as in tacplus_servers, since tacplus_servers should not be readable
# by users other than root.
timeout=10
...
# This is a comma separated list of usernames that are never sent to
# a tacacs server, they cause an early not found return.
#
# "*" is not a wild card.  While it's not a legal username, it turns out
# that during pathname completion, bash can do an NSS lookup on "*"
# To avoid server round trip delays, or worse, unreachable server delays
# on filename completion, we include "*" in the exclusion list.
exclude_users=root,daemon,nobody,cron,radius_user,radius_priv_user,sshd,cumulus,quagga,frr,snmp,www-data,ntp,man,_lldpd,USER1,*

Cumulus Linux 在 etc/tacplus_nss.conf 文件中支持以下附加 Linux 参数。目前,没有等效的 NUVE 命令。

Linux 参数描述
include配置一个补充配置文件以避免重复配置信息。您最多可以包含八个附加配置文件。例如:include=/myfile/myname。
min_uid配置 NSS 插件可以查找的最小用户 ID。0 指定插件永远不会查找 uid 0(root)。请勿指定大于本地 TACACS+ 用户 ID(0 到 15)的值。

TACACS+ 计费

当您安装 TACACS+ 软件包并配置基本 TACACS+ 设置(设置服务器和共享密钥)时,计费功能已开启,无需进行其他配置。

TACACS+ 计费使用 audisp 模块,以及 auditd 和 audisp 的附加插件。该插件将计费记录中的 auid 映射到 TACACS 登录,这基于 auid 和 sessionid。audisp 模块需要 libnss_tacplus,并使用 libtacplus_map.so 库接口作为修改后的 libpam_tacplus 软件包的一部分。

与 TACACS+ 服务器的通信通过 libsimple-tacact1 库和 dlopen() 进行。由于 TACACS+ 字段长度限制为 255 字节,因此最多可以将 240 字节的命令名称和参数发送到计费记录中。

  • TACACS+ 用户运行的所有 sudo 命令都会根据原始 TACACS+ 登录名生成计费记录。
  • 所有 Linux 和 NVUE 命令都会生成计费记录,包括登录命令和其他命令的子进程。这可能会生成大量计费记录。

默认情况下,Cumulus Linux 会将计费记录发送到所有服务器。您可以更改此设置,以将计费记录发送到第一个响应的服务器

cumulus@switch:~$ nv set system aaa tacacs accounting send-records first-response
cumulus@switch:~$ nv config apply

要重置为默认配置(将计费记录发送到所有服务器),请运行 nv set system aaa tacacs accounting send-records all 命令。

  1. 编辑 /etc/audisp/audisp-tac_plus.conf 文件并将 acct_all 参数更改为 0

    cumulus@switch:~$ sudo nano /etc/audisp/audisp-tac_plus.conf
    ...
    acct_all=0
    
  2. 重启 auditd

    cumulus@switch:~$ sudo systemctl restart auditd
    

要重置为默认配置(将计费记录发送到所有服务器),请将 acct_all 的值更改为 1 (acct_all=1)。

要禁用 TACACS+ 计费

cumulus@switch:~$ nv set system aaa tacacs accounting enable off
cumulus@switch:~$ nv config apply
  1. 编辑 /etc/audit/plugins.d/audisp-tacplus.conf 文件并将 active 参数更改为 no

    cumulus@switch:~$ sudo nano /etc/audit/plugins.d/audisp-tacplus.conf
    ...
    # default to enabling tacacs accounting; change to no to disable
    active = no
    
  2. 重启 auditd

    cumulus@switch:~$ sudo systemctl restart auditd
    

本地回退身份验证

您可以配置交换机以允许用户在 TACACS 服务器无法访问、不包含该用户进行身份验证或用户在排除用户列表中时进行本地回退身份验证。

要允许用户的本地回退身份验证,请在交换机上添加一个与 TACACS 用户具有相同用户名的本地特权用户帐户。即使 TACACS 服务未运行,本地用户也始终处于活动状态。

NVUE 不提供用于配置本地回退身份验证的命令。

要配置本地回退身份验证

  1. 编辑 /etc/nsswitch.conf 文件以从以 passwd 开头的行中删除关键字 tacplus。(您需要在步骤 3 中将关键字添加回去。)

    以下示例显示了 /etc/nsswitch.conf 文件,其中以 passwd 开头的行中没有 tacplus 关键字。

    cumulus@switch:~$ sudo nano /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:         files
    group:          tacplus files
    shadow:         files
    gshadow:        files
    ...
    
  2. 要使本地特权用户能够运行 sudo 和 NVUE 命令,请运行下面显示的 adduser 命令。在示例命令中,TACACS 帐户名称为 tacadmin。

    第一个 adduser 命令会提示输入信息和密码。您可以按 ENTER 跳过大多数请求的信息。

    cumulus@switch:~$ sudo adduser --ingroup tacacs tacadmin
    cumulus@switch:~$ sudo adduser tacadmin nvset
    cumulus@switch:~$ sudo adduser tacadmin nvapply
    cumulus@switch:~$ sudo adduser tacadmin sudo
    
  3. 编辑 /etc/nsswitch.conf 文件以将关键字 tacplus 添加回以 passwd 开头的行(您在第一步中删除的关键字)。

    cumulus@switch:~$ sudo nano /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:         tacplus files
    group:          tacplus files
    shadow:         files
    gshadow:        files
    ...
    
  4. 使用以下命令重启 nvued 服务

    cumulus@switch:~$ sudo systemctl restart nvued
    

TACACS+ 每命令授权

TACACS+ 每命令授权允许您配置不同特权级别的 TACACS+ 用户可以运行的命令。

要通过默认 VRF 访问 TACACS+ 服务器,您必须指定在默认 VRF 中使用的出口接口。可以运行 NVUE nv set system aaa tacacs vrf <interface> 命令(例如,nv set system aaa tacacs vrf swp51),或者在 /etc/tacplus_servers 文件中设置 vrf=<interface> 选项(例如,vrf=swp51)。

以下命令允许特权级别为 0 的 TACACS+ 用户运行 nv 和 ip 命令(如果已获得 TACACS+ 服务器的授权)

cumulus@switch:~$ nv set system aaa tacacs authorization 0 command ip 
cumulus@switch:~$ nv set system aaa tacacs authorization 0 command nv
cumulus@switch:~$ nv config apply

要显示每命令授权设置,请运行 nv show system aaa tacacs authorization 命令

cumulus@switch:~$ nv show system aaa tacacs authorization
Privilege Level  role          command
---------------  ------------  -------
0                nvue-monitor  ip     
                               nv  
tacuser0@switch:~$ sudo tacplus-restrict -i -u tacacs0 -a ip nv

tacplus-auth 命令处理每个命令的授权。要使这成为强制授权,请将 TACACS+ 登录更改为使用受限 shell,并使用非常有限的可执行搜索路径。否则,用户可以绕过授权。tacplus-restrict 实用程序简化了受限环境的设置。

下表提供了 tacplus-restrict 命令选项

选项描述
-i初始化环境。每个用户名只需发出此选项一次。
-a您可以根据需要经常使用 -a 选项调用该实用程序。对于 -a 列表中的每个命令,该实用程序都会在本地 bin 子目录中创建从 tacplus-auth 到命令名称的相对部分的符号链接。您还需要在 TACACS+ 服务器上启用这些命令(请参阅您的 TACACS+ 服务器文档)。服务器通常允许命令的某些选项,但不允许其他选项。
-f重新初始化环境。如果您需要重启,请将 -f 选项与 -i 一起运行以强制重新初始化;否则,该实用程序会忽略重复使用 -i。
初始化期间
- 用户 shell 更改为 /bin/rbash。
- 该实用程序会保存任何现有的点文件。

运行此命令后,检查 tacacs0 目录:

cumulus@switch:~$ sudo ls -lR ~tacacs0
total 12
lrwxrwxrwx 1 root root 22 Nov 21 22:07 ip -> /usr/sbin/tacplus-auth
lrwxrwxrwx 1 root root 22 Nov 21 22:07 nv -> /usr/sbin/tacplus-auth

除了 shell 内置命令外,特权级别为 0 的 TACACS 用户只能运行 ip 和 nv 命令。

如果您错误地使用 -a 选项添加了命令,则可以将其删除。以下示例删除 nv 命令

cumulus@switch:~$ sudo rm ~tacacs0/bin/nv

要删除所有命令

cumulus@switch:~$ sudo rm ~tacacs0/bin/*

删除 TACACS+ 客户端软件包

要删除所有 TACACS+ 客户端软件包,请使用以下命令

cumulus@switch:~$ sudo -E apt-get remove tacplus-client
cumulus@switch:~$ sudo -E apt-get autoremove

要删除 TACACS+ 客户端配置文件以及软件包(推荐),请使用此命令

cumulus@switch:~$ sudo -E apt-get autoremove --purge

故障排除

显示 TACACS+ 配置

运行以下命令以显示 TACACS+ 配置

  • 要显示所有 TACACS+ 配置(NVUE 隐藏服务器密钥),请运行 nv show system aaa tacacs 命令。
  • 要显示 TACACS+ 身份验证配置,请运行 nv show system aaa tacacs authentication 命令。
  • 要显示 TACACS+ 计费配置,请运行 nv show system aaa tacacs accounting 命令。
  • 要显示 TACACS+ 服务器配置,请运行 nv show system aaa tacacs server 命令。
  • 要显示 TACACS+ 服务器优先级配置,请运行 nv show system aaa tacacs server <priority-id> 命令。
  • 要显示从 TACACS+ 服务器身份验证中排除的用户列表,请运行 nv show system aaa tacacs exclude-user 命令。

以下示例命令显示所有 TACACS+ 配置

cumulus@switch:~$ nv show system aaa tacacs
                    applied
------------------  -------
enable              off    
debug-level         0      
timeout             5      
vrf                 mgmt   
accounting                 
  enable            off    
authentication             
  mode              pap    
  per-user-homedir  off    
[server]            5      
[server]            10 

以下命令显示从 TACACS+ 服务器身份验证中排除的用户列表

cumulus@switch:~$ nv show system aaa tacacs exclude-user
          applied
--------  -------
username  USER1  

基本服务器连接或 NSS 问题

您可以使用 getent 命令来确定是否正确配置了 TACACS+ 以及本地密码是否在配置文件中。在以下示例命令中,cumulus 用户代表本地用户,而 cumulusTAC 代表 TACACS 用户。

在所有 NSS 方法中查找用户名

cumulus@switch:~$ sudo getent passwd cumulusTAC
cumulusTAC:x:1016:1001:TACACS+ mapped user at privilege level 15,,,:/home/tacacs15:/bin/bash

仅在本地数据库中查找用户

cumulus@switch:~$ sudo getent -s compat passwd cumulus
cumulus:x:1000:1000:cumulus,,,:/home/cumulus:/bin/bash

仅在 TACACS+ 数据库中查找用户

cumulus@switch:~$ sudo getent -s tacplus passwd cumulusTAC
cumulusTAC:x:1016:1001:TACACS+ mapped user at privilege level 15,,,:/home/tacacs15:/bin/bash

如果 TACACS+ 工作不正常,您可以使用调试。将 debug=1 参数添加到 /etc/tacplus_servers 和 /etc/tacplus_nss.conf 文件中;请参阅上面可选 TACACS+ 配置下的 Linux 命令。您还可以将 debug=1 添加到 /etc/pam.d/common* 中的各个 pam_tacplus 行。

所有日志消息都在 /var/log/syslog 中。

不正确的共享密钥

交换机上的 TACACS 客户端和 TACACS 服务器必须具有相同的共享密钥。如果此密钥不正确,则以下消息会打印到 syslog

2017-09-05T19:57:00.356520+00:00 leaf01 sshd[3176]: nss_tacplus: TACACS+ server 192.168.0.254:49 read failed with protocol error (incorrect shared secret?) user cumulus

调试每命令授权问题

要调试 TACACS 用户命令授权,请让 TACACS+ 用户在 shell 提示符下输入以下命令,然后再次尝试该命令

tacuser0@switch:~$ export TACACSAUTHDEBUG=1

当您启用调试时,与 TACACS+ 服务器的命令授权对话会显示其他信息。

要禁用调试

tacuser0@switch:~$ export -n TACACSAUTHDEBUG

调试计费记录问题

如果您从配置文件中添加或删除 TACACS+ 服务器,请确保使用此命令通知 audisp 插件

cumulus@switch:~$ sudo killall -HUP audisp-tacplus

如果计费记录未发送,请将 debug=1 添加到 /etc/audisp/audisp-tac_plus.conf 文件,然后运行上述命令以通知插件。请 TACACS+ 用户运行一个命令,并检查 /var/log/syslog 文件末尾是否有来自插件的消息。您还可以检查审计日志文件 /var/log/audit audit.log 以确保审计记录存在。如果审计记录不存在,请使用以下命令重启审计守护进程:

cumulus@switch:~$ sudo systemctl restart auditd.service

TACACS+ 软件包描述

Cumulus Linux 使用以下软件包进行 TACACS 认证。

软件包
描述
audisp-tacplus使用来自 auditd 的审计数据向 TACACS+ 服务器发送计费记录,并作为 auditd 的一部分启动。
libtac2提供基本的 TACACS+ 服务器实用程序和通信例程。
libnss-tacpluslibc 用户名查找、映射功能和 TACACS+ 服务器之间提供接口。
tacplus-auth包含 tacplus-restrict 设置实用程序,该实用程序使您能够执行基于命令的 TACACS+ 授权。默认情况下不启用基于命令的授权。
libpam-tacplus提供标准 Debian 软件包的修改版本。
libtacplus-map1提供服务器上本地用户和 TACACS+ 用户之间的映射。该软件包
- 设置不可变的 sessionid 和审计 UID,以确保您可以跟踪原始用户在多个进程和权限更改中的操作。
- 将审计 loginuid 设置为不可变。
- 在 /run/tacacs_client_map 中创建和维护状态数据库,以管理和查找映射。
libsimple-tacacct1为程序提供向 TACACS+ 服务器发送计费记录的接口。audisp-tacplus 使用此软件包。
libtac2-bin提供 tacc 测试程序和 TACACS+ 手册页。

TACACS+ 客户端配置文件

下表描述了 Cumulus Linux 使用的 TACACS+ 客户端配置文件。

文件名
描述
/etc/tacplus_servers安装后需要配置的主要文件。所有包含 include=/etc/tacplus_servers 参数的软件包都使用此文件。通常,此文件包含共享密钥;请确保 Linux 文件模式为 600。
/etc/nsswitch.conf安装 libnss_tacplus 软件包后,此文件配置通过 libnss_tacplus 进行 tacplus 查找。如果您通过自动化替换此文件,则需要在 passwd 数据库行中将 tacplus 添加为第一个查找方法。
/etc/tacplus_nss.conf设置 libnss_tacplus 的基本参数。该文件包含一个调试变量,用于将 NSS 查找与其他客户端软件包分开进行调试。
/usr/share/pam-configs/tacpluspam-auth-update 的配置文件,用于在下一行中生成文件。该文件在 loginsussh 时使用这些配置。
/etc/pam.d/common-*/etc/pam.d/common-* 文件更新为 tacplus 身份验证。当您安装或删除 libpam-tacplus 时,这些文件会通过 pam-auth-update 进行更新。
/etc/sudoers.d/tacplus允许 TACACS+ 权限级别为 15 的用户使用 sudo 运行命令。该文件包含一个示例(已注释掉),说明如何允许权限级别为 15 的 TACACS 用户在无需密码的情况下使用 sudo,并提供了一个示例,说明如何允许所有 TACACS 用户使用 sudo 运行特定命令。仅使用 visudo -f /etc/sudoers.d/tacplus 命令编辑此文件。
/etc/audisp/plugins.d/audisp-tacplus.confaudisp 插件配置文件。您无需修改此文件。
/etc/audisp/audisp-tac_plus.confTACACS+ 服务器计费配置文件。您无需修改此文件。当您只想调试 TACACS+ 计费问题,而不是所有 TACACS+ 用户时,可以使用此配置文件。
/etc/audit/rules.d/audisp-tacplus.rulesTACACS+ 计费的 auditd 规则。augenrules 命令使用所有规则文件来生成规则文件。
/etc/audit/audit.rules安装 auditd 时生成的审计规则文件。

注意事项

多个 TACACS+ 用户

如果两个或多个 TACACS+ 用户同时以相同的权限级别登录,虽然计费记录是正确的,但对任一名称的查找都会匹配两个用户,而 UID 查找仅返回第一个登录的用户。

因此,任何用户运行的任何进程都适用于两个用户,任何用户创建的所有文件都适用于第一个匹配的名称。这类似于向密码文件中添加两个具有相同 UID 和 GID 的本地用户,并且是使用密码文件中的基本用户的 UID 的固有局限性。

当前算法从映射文件中返回与 UID 匹配的第一个名称;无论是第一个还是第二个登录的用户。

要解决此问题,您可以使用交换机审计日志或 TACACS 服务器计费日志来确定每个用户创建的进程和文件。

  • 对于不执行其他命令的命令(例如,在编辑器中更改配置或使用 clagctl 和 vtysh 等工具执行操作),没有额外的计费。
  • 基于命令的授权处于最基本的级别(Cumulus Linux 对本地 TACACS 用户使用标准的 Linux 用户权限,默认情况下只有权限级别为 15 的用户可以运行 sudo 命令)。

当进程因信号终止时(使用 kill 系统调用或内部错误(如 SIGSEGV)),Linux auditd 系统并不总是生成审计事件。因此,您未处理的信号退出的进程会生成 STOP 计费记录。

deluser 命令的问题

TACACS+ 和其他非本地用户使用 --remove-home 选项运行 deluser 命令时,会看到以下错误:

tacuser0@switch: deluser --remove-home USERNAME
userdel: cannot remove entry 'USERNAME' from /etc/passwd
/usr/sbin/deluser: `/usr/sbin/userdel USERNAME' returned error code 1. Exiting

该命令确实会删除主目录。用户仍然可以登录该帐户,但没有有效的主目录。这是所有非本地用户的 deluser 命令的已知上游问题。

仅将 --remove-home 选项与 user_homedir=1 配置命令一起使用。

TACACS+ 和 RADIUS AAA 客户端

当您同时安装 TACACS+ 和 RADIUS AAA 客户端时,Cumulus Linux 不会尝试 RADIUS 登录。作为一种解决方法,请勿在同一交换机上同时安装 TACACS+ 和 RADIUS AAA 客户端。

TACACS+ 和 PAM

PAM 模块和更新版本的 libpam-tacplus 软件包最初配置身份验证。当您安装软件包时,pam-auth-update 命令会更新 /etc/pam.d 中的 PAM 配置。如果您更改 PAM 配置,则需要集成这些更改。如果您还结合 libpam-ldap 软件包使用 LDAP,则需要使用您首选的 LDAP 和 TACACS 排序编辑 PAM 配置。libpam-tacplus 软件包忽略规则,并且 success=2 中的值需要调整才能忽略 LDAP 规则。

TACACS+ 权限属性 priv_lvl 确定 TACACS+ 服务器在用户授权交换期间返回的用户的权限级别。客户端接受强制形式或可选形式的属性,并且也接受 priv-lvl 作为属性名称。属性值必须是 0 到 15 范围内的数字字符串,其中 15 是最高权限级别。

默认情况下,权限级别为 15 以外的 TACACS+ 用户无法运行 sudo 命令,并且只能使用标准的 Linux 用户权限运行命令。

您可以手动编辑 /etc/pam.d/common-* 文件。但是,如果您在进行更改后再次运行 pam-auth-update,则更新将失败。仅配置 /usr/share/pam-configs/tacplus,然后运行 pam-auth-update

NSS 插件

借助 pam_tacplus,TACACS+ 身份验证用户可以使用 tacplus_nss 软件包附带的 NSS 插件在系统上无需本地帐户即可登录。如果用户不在本地密码文件中,则插件使用映射的 tacplus 信息,提供 getpwnam()getpwuid() 入口点,并使用 TACACS+ 身份验证功能。

插件会询问 TACACS+ 服务器是否知道该用户,然后询问相关属性以确定用户的权限级别。当您安装 libnss_tacplus 软件包时,nsswitch.conf 会更改为将 tacplus 设置为 passwd 的第一个查找方法。如果您更改顺序,查找将返回本地帐户,例如 tacacs0

如果 TACACS+ 服务器未找到用户,则它会使用 libtacplus.so 导出的函数执行映射查找。权限级别附加到 tacacs,并且查找在本地密码文件中搜索该名称。例如,权限级别 15 会搜索 tacacs15 用户。如果 TACACS+ 服务器找到用户,它会将用户信息添加到密码结构中。

如果 TACACS+ 服务器未找到用户,它会递减权限级别并再次检查,直到达到权限级别 0(用户 tacacs0)。这允许您仅使用两个本地用户 tacacs0tacacs15,以实现最小配置。

TACACS+ 客户端排序

Cumulus Linux 在 AAA 序列的开头需要以下信息:

  • 用户是否是有效的 TACACS+ 用户
  • 用户权限级别

对于非本地用户(不在本地密码文件中的用户),您需要在与 TACACS+ 服务器的第一次通信中发送 TACACS+ 授权请求,在身份验证之前以及用户登录请求密码之前。

您需要配置某些 TACACS+ 服务器以允许在身份验证之前进行授权请求。请联系您的 TACACS+ 服务器供应商以获取信息。

具有不同用户帐户的多个服务器

如果您配置了具有不同用户帐户的多个 TACACS+ 服务器:

  • TACACS+身份验证允许回退;如果第一个可访问的服务器未对用户进行身份验证,则客户端会尝试第二个服务器,依此类推。
  • TACACS 授权 不会回退。如果第一个可访问的服务器返回未授权结果,则客户端不会尝试下一个服务器。