基于角色的访问控制

除了 Cumulus Linux 提供的默认角色之外,您还可以创建自己的角色来限制授权,从而更精细地控制用户可以在交换机上管理的内容。例如,您可以为用户分配网络管理员角色,并为用户提供接口管理、服务管理和系统管理的权限。当用户登录并执行 NVUE 命令时,NVUE 会检查用户权限并授权用户运行该命令。

基于自定义角色的访问控制包含以下元素

元素描述
角色多个类(组)的虚拟标识符。您只能为用户分配一个角色。例如,对于可以管理接口的用户,您可以创建一个名为 IFMgr 的角色。
类在概念上类似于 Linux 组。创建和管理类是同时配置多个用户的最简单方法,尤其是在配置权限时。

一个类由以下部分组成
  • 命令路径,Cumulus Linux 基于 NVUE 声明模型中的对象以及与 URI 路径相同的路径;例如;您可以使用 /vrf/ 命令路径来允许或拒绝用户访问所有 VRF,或使用 /system/nat 来允许或拒绝用户访问 NAT 配置。使用 Tab 键查看可用的命令路径 (nv set system aaa class <class-name> command-path / <<press tab>>)。
  • 命令路径的权限:(ro)运行 show 命令,(rw)运行 set、unset 和 apply 命令,(act)运行 action 命令,或(all)运行所有命令。默认权限设置为 all
操作类的操作:allowdeny

  • 您最多可以为角色分配 64 个类。
  • 您最多可以为一个类配置 128 个命令路径。
  • 当您配置命令路径时,您允许或拒绝特定的模式路径及其子路径。例如,命令路径 /qos/ 允许或拒绝访问 QoS 命令,而命令路径 /qos/egress-scheduler 允许或拒绝访问 QoS 出口调度器命令。

以下示例描述了角色 (role1) 的权限,该角色由三个类组成:class1class2class3

class1 具有 allow 类操作和以下命令路径权限

命令路径权限
/interface/全部
/interface/*/acl/ro
/interface/*/ptp/ro

class2 具有 allow 类操作和以下命令路径权限

命令路径权限
/system/ro
/vrf/rw

class3 具有 deny 类操作和以下命令路径权限

命令路径权限
/interface/*/evpn/rw
/interface/*/qos/rw

下表显示了分配了角色 role1 的用户的权限。在表中,R 是只读 (RO),W 是写入,X 是操作 (ACT)。

路径允许拒绝权限
/acl/RWX隐式拒绝
/qos/RWX隐式拒绝
所有未指定的路径都是隐式拒绝
/interface/RWX指定的权限
/interface/* (* 匹配所有接口)RWX从父级继承
/interface/*/bond/RWX从父级继承
/interface/*/ip/RWX从父级继承
/interface/ 的所有未指定子级都继承父级权限RWX
/interface/*/acl/RWX指定的权限
/interface/*/ptp/RWX指定的权限
/interface/*/evpn/RWX指定的权限
/interface/*/qos/RWX指定的权限
/system/RWX指定的权限
/system/aaa/RWX从父级继承
/system/api/RWX从父级继承
/system/ 的所有未指定子级都继承父级权限R
/vrf/RWX指定的权限
/vrf/ 的所有未指定子级都继承父级权限RWX

为用户帐户分配自定义角色

要为用户帐户分配自定义角色,请执行以下操作

  • 为角色创建角色和类。
  • 为每个类分配操作(允许或拒绝)。
  • 为每个类添加命令路径和权限。
  • 为用户分配角色。

您可以为现有用户帐户分配自定义角色。有关创建用户帐户的信息,请参阅用户帐户命令。

当您创建一个类,然后运行 nv config apply 时,NVUE 会从 /etc/nsswitch.conf 文件中删除 LDAP 配置。如果您正在使用 LDAP,请在运行 nv config apply 之前运行 nv set system config apply ignore /etc/nsswitch.conf 命令,以保留 LDAP 配置

以下示例为角色 role1 创建上述三个类。

class1 具有管理除 ACL 和 PTP 接口之外的所有接口的权限,这些接口仅具有 show 权限

cumulus@leaf01:mgmt:~$ nv set system aaa role ROLE1 class class1
cumulus@leaf01:mgmt:~$ nv set system aaa class class1 action allow
cumulus@leaf01:mgmt:~$ nv set system aaa class class1 command-path /interface/ permission all   
cumulus@leaf01:mgmt:~$ nv set system aaa class class1 command-path /interface/*/acl/ permission ro
cumulus@leaf01:mgmt:~$ nv set system aaa class class1 command-path /interface/*/ptp/ permission ro
cumulus@leaf01:mgmt:~$ nv config apply

class2 具有仅显示系统命令以及设置、取消设置和应用 VRF 命令的权限

cumulus@leaf01:mgmt:~$ nv set system aaa role ROLE1 class class2
cumulus@leaf01:mgmt:~$ nv set system aaa class class2 action allow
cumulus@leaf01:mgmt:~$ nv set system aaa class class2 command-path /system/ permission ro
cumulus@leaf01:mgmt:~$ nv set system aaa class class2 command-path /vrf/ permission rw
cumulus@leaf01:mgmt:~$ nv config apply

class3 阻止为 EVPN 和 QOS 设置、取消设置和应用接口命令

cumulus@leaf01:mgmt:~$ nv set system aaa role ROLE1 class class3
cumulus@leaf01:mgmt:~$ nv set system aaa class class3 action deny
cumulus@leaf01:mgmt:~$ nv set system aaa class class3 command-path /interface/*/evpn/ permission rw
cumulus@leaf01:mgmt:~$ nv set system aaa class class3 command-path /interface/*/qos/ permission rw
cumulus@leaf01:mgmt:~$ nv config apply

以下命令为用户 admin2 分配角色 role1

cumulus@leaf01:mgmt:~$ nv set system aaa user admin2 role role1
cumulus@leaf01:mgmt:~$ nv config apply

删除自定义角色

要删除自定义角色及其所有类,您必须首先从用户取消分配该角色,然后删除该角色

cumulus@switch:~$ nv unset system aaa user admin2 role role1
cumulus@switch:~$ nv unset system aaa role role1
cumulus@switch:~$ nv config apply

要从角色中删除类,请运行 nv unset system aaa role <role> class <class> 命令

cumulus@switch:~$ nv unset system aaa role role1 class class2
cumulus@switch:~$ nv config apply

显示自定义角色信息

要显示系统上配置的用户帐户,请运行 NVUE nv show system aaa user 命令或 Linux sudo cat /etc/passwd 命令。

cumulus@switch:~$ nv show system aaa user
Username          Full-name                           Role     enable  Summary
----------------  ----------------------------------  -------  ------  -------
_apt                                                  Unknown  system         
_lldpd                                                Unknown  system         
backup            backup                              Unknown  system         
bin               bin                                 Unknown  system         
cumulus           cumulus,,,                          Unknown  on             
daemon            daemon                              Unknown  system         
dnsmasq           dnsmasq,,,                          Unknown  system         
frr               Frr routing suite,,,                Unknown  system         
games             games                               Unknown  system         
gnats             Gnats Bug-Reporting System (admin)  Unknown  system         
irc               ircd                                Unknown  system         
list              Mailing List Manager                Unknown  system         
lp                lp                                  Unknown  system         
mail              mail                                Unknown  system         
man               man                                 Unknown  system         
messagebus                                            Unknown  system         
news              news                                Unknown  system         
nobody            nobody                              Unknown  off            
ntp                                                   Unknown  system         
nvue              NVIDIA User Experience              Unknown  system         
proxy             proxy                               Unknown  system         
root              root                                Unknown  system         
snmp                                                  Unknown  system         
sshd                                                  Unknown  system         
sync              sync                                Unknown  system         
sys               sys                                 Unknown  system         
systemd-coredump  systemd Core Dumper                 Unknown  system         
systemd-network   systemd Network Management,,,       Unknown  system         
systemd-resolve   systemd Resolver,,,                 Unknown  system         
systemd-timesync  systemd Time Synchronization,,,     Unknown  system         
admin2                                                role1    on             
uucp              uucp                                Unknown  system         
uuidd                                                 Unknown  system         
www-data          www-data                            Unknown  system    

要显示有关特定用户帐户的信息,包括分配给用户的角色,请运行 NVUE nv show system aaa user <user> 命令

cumulus@switch:~$ nv show system aaa user admin2
           operational  applied
---------  -----------  -------
role       role1        role1  
full-name                      
enable     on           on

要显示交换机上配置的所有角色,请运行 NVUE nv show system aaa role 命令

cumulus@switch:~$ nv show system aaa role
Role          Class  
------------  -------
nvue-admin    nvapply
nvue-monitor  nvshow 
role1         class1 
              class2 
              class3 
system-admin  nvapply
              sudo

要显示应用于特定角色的类,请运行 nv show system aaa role <role> 命令

cumulus@switch:~$ nv show system aaa role role1
         applied
-------  -------
[class]  class1 
[class]  class2 
[class]  class3

要显示交换机上配置的所有类,请运行 nv show system aaa class 命令

cumulus@switch:~$ nv show system aaa class
Class Name  Command Path        Permission  Action
----------  ------------------  ----------  ------
class1      /interface/         all         allow 
            /interface/*/acl/   ro                
            /interface/*/ptp/   ro                
class2      /system/            ro          allow 
            /vrf/               rw                
class3      /interface/*/evpn/  rw          deny  
            /interface/*/qos/   rw                
nvapply     /                   all         allow 
nvshow      /                   ro          allow 
sudo        /                   all         allow 

要显示类的命令路径的配置和状态,请运行 nv show system aaa class <class> 命令

cumulus@switch:~$ nv show system aaa class class3
               applied           
--------------  ------------------
action          deny              
[command-path]  /interface/*/evpn/
[command-path]  /interface/*/qos/