基于角色的访问控制
除了 Cumulus Linux 提供的默认角色之外,您还可以创建自己的角色来限制授权,从而更精细地控制用户可以在交换机上管理的内容。例如,您可以为用户分配网络管理员角色,并为用户提供接口管理、服务管理和系统管理的权限。当用户登录并执行 NVUE 命令时,NVUE 会检查用户权限并授权用户运行该命令。
基于自定义角色的访问控制包含以下元素
元素 | 描述 |
---|---|
角色 | 多个类(组)的虚拟标识符。您只能为用户分配一个角色。例如,对于可以管理接口的用户,您可以创建一个名为 IFMgr 的角色。 |
类 | 类在概念上类似于 Linux 组。创建和管理类是同时配置多个用户的最简单方法,尤其是在配置权限时。 一个类由以下部分组成
|
操作 | 类的操作:allow 或 deny 。 |
- 您最多可以为角色分配 64 个类。
- 您最多可以为一个类配置 128 个命令路径。
- 当您配置命令路径时,您允许或拒绝特定的模式路径及其子路径。例如,命令路径
/qos/
允许或拒绝访问 QoS 命令,而命令路径/qos/egress-scheduler
允许或拒绝访问 QoS 出口调度器命令。
以下示例描述了角色 (role1
) 的权限,该角色由三个类组成:class1
、class2
、class3
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/ | R | WX | 指定的权限 |
/interface/*/ptp/ | R | WX | 指定的权限 |
/interface/*/evpn/ | RWX | 指定的权限 | |
/interface/*/qos/ | RWX | 指定的权限 | |
/system/ | R | WX | 指定的权限 |
/system/aaa/ | R | WX | 从父级继承 |
/system/api/ | R | WX | 从父级继承 |
/system/ 的所有未指定子级都继承父级权限 | R | ||
/vrf/ | RW | X | 指定的权限 |
/vrf/ 的所有未指定子级都继承父级权限 | RW | X |
为用户帐户分配自定义角色
要为用户帐户分配自定义角色,请执行以下操作
- 为角色创建角色和类。
- 为每个类分配操作(允许或拒绝)。
- 为每个类添加命令路径和权限。
- 为用户分配角色。
您可以为现有用户帐户分配自定义角色。有关创建用户帐户的信息,请参阅用户帐户命令。
当您创建一个类,然后运行 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/