用户访问权限
您(系统管理员)授予用户对命令和配置层次结构级别和语句的访问权限或权限。用户只能执行这些命令,并且只能查看和配置他们具有访问权限的语句。您还可以使用扩展正则表达式来指定允许用户允许或拒绝哪些操作模式命令、配置语句和层次结构。这种做法可以防止未经授权的用户执行可能对网络造成损害的敏感命令或配置语句。
访问权限级别概述
每个顶级 CLI 命令和 配置语句 都有一个关联的访问权限级别。用户只能执行这些命令,并且只能配置和查看他们具有访问权限的语句。一个或多个权限标志定义每个登录类的访问权限。
对于每个登录类,您还可以显式允许或拒绝使用操作模式和配置模式命令以及语句层次结构,否则这些命令和语句层次结构将由语句中 permissions 指定的权限级别允许或拒绝。
登录类权限标志
您可以使用权限标志向用户授予访问操作模式命令以及配置层次结构级别和语句的权限。您可以在层次结构级别为 [edit system login class] 用户的登录类配置权限标志。指定特定权限标志后,用户将获得对与该标志对应的命令、配置层级和语句的访问权限。要授予对所有命令和配置语句的访问权限,请使用 all permissions 标志。
列出的每个命令都表示该命令以及以该命令为前缀的所有子命令。列出的每个 配置语句 都代表该标志授予访问权限的配置层次结构的顶层。
该 permissions 语句指定 表 1 中列出的一个或多个权限标志。权限标志不是累积的。对于每个类,您必须列出所需的所有权限标志,包括 view 显示信息和 configure 进入配置模式。两种形式的权限控制用户对配置各个部分的访问:
-
“纯”表单 — 为该权限类型提供只读功能。一个例子是
interface。 -
-controlform - 为该权限类型提供读写功能。一个例子是interface-control。
对于授予对配置层级和语句访问权限的权限标志,纯形式标志会向该配置授予只读权限。例如, interface 权限标志授予对层次结构级别的 [edit interfaces] 只读访问权限。 -control 标志的形式授予对该配置的读写访问权限。例如,该 interface-control 标志授予对层次结构级别的 [edit interfaces] 读写访问权限。
表 1 列出了登录类权限标志,您可以通过在层次结构级别包含[edit system login class class-name]语句来permissions配置这些标志。
权限标志授予一组特定的访问权限。每个权限标志都与操作模式或配置模式命令以及配置层次结构级别以及该标志授予访问权限的语句一起列出。
| 权限标志 |
描述 |
|---|---|
| 可以在操作模式或配置模式下查看接入配置。 |
|
| 可以在层次结构级别查看 |
|
| 可以在操作模式或配置模式下查看用户帐户信息。 |
|
| 可以查看用户帐户信息并在层次结构级别进行 |
|
| 可以访问所有操作模式命令和配置模式命令。可以修改所有配置层级中的配置。 |
|
| 可以清除(删除)设备从网络中学习并存储在各种网络数据库中的信息(使用命令 |
|
| 可以进入配置模式(使用 |
|
| 可以执行所有控制级别操作 - 使用 |
|
| 可以查看现场调试命令。保留用于调试支持。 |
|
| 可以在操作模式或配置模式下查看 防火墙过滤器 配置。 |
|
| 可以在层次结构级别查看 |
|
| 可以读取可移动介质并写入可移动介质。 |
|
| 可以在操作模式或配置模式下查看流分流器配置。 |
|
| 可以在层次结构级别查看 |
|
| 可以向路由器或交换机发出流点击请求。例如,动态任务控制协议 (DTCP) 客户端必须有
注意:
该 |
|
| 可以查看分析器数据。 |
|
| 可以在操作模式和配置模式下查看接口配置。 |
|
| 可以查看机箱、 服务等级 (CoS)、组、转发选项和接口配置信息。可以在以下层级修改配置:
|
|
| 可以执行系统维护,包括在设备上启动本地 shell 并成为 shell 中的超级用户(使用 |
|
| 可以使用 、 |
|
| 可以查看 |
|
| 可以修改 |
|
| 可以使用命令 |
|
| 可以使用命令 |
|
| 可以在配置模式和操作模式下查看常规路由、路由协议和路由策略配置信息。 |
|
| 可以在层次结构级别查看和配置常规路由 |
|
| 可以查看配置中的密码和其他身份验证密钥。 |
|
| 可以查看和修改配置中的密码和其他身份验证密钥。 |
|
| 可以在操作模式和配置模式下查看安全配置信息。 |
|
| 可以在层次结构级别查看 |
|
| 可以使用命令在路由器或交换机 |
|
| 可以在操作模式或配置模式下查看简单网络管理协议 (SNMP) 配置信息。 |
|
| 可以在层次结构级别查看和修改 SNMP 配置信息 |
|
|
|
可以在层次结构级别查看 |
storage-control |
可以在层次结构级别修改 |
| 可以在操作模式或配置模式下查看系统级信息。 |
|
| 可以在层次结构级别查看 |
|
| 可以查看跟踪文件设置。 |
|
| 可以修改跟踪文件设置并配置跟踪文件属性。 |
|
unified-edge |
可以在层次结构中 |
unified-edge-control |
可以在层次结构中 |
| 可以使用各种命令显示当前系统范围的路由表以及特定于协议的值和统计信息。无法查看密钥配置。 |
|
| 可以查看所有配置,但不包括机密、系统脚本和事件选项。
注意:
只有具有该 |
允许和拒绝登录类的单个命令和语句层次结构
默认情况下,所有顶级 CLI 命令和配置层级都有关联的访问权限级别。用户只能执行这些命令,并且只能查看和配置他们具有访问权限的语句。对于每个登录类,您可以显式允许和拒绝使用操作模式和配置模式命令以及语句层次结构,否则语句中 permissions 指定的权限级别将允许或拒绝这些命令和语句层次结构。
权限标志授予用户对操作模式和配置模式命令以及配置层次结构级别和语句的访问权限。通过在层次结构级别上 [edit system login class] 为用户的登录类指定特定权限标志,即可授予用户访问相应命令和配置层次结构级别和语句的权限。要授予对所有命令和配置语句的访问权限,请使用 all permissions 标志。
通过为登录类配置 allow-commands、 deny-commands、 allow-configuration和 deny-configuration 语句,可以显式允许或拒绝使用命令和语句。在语句中,您可以使用扩展正则表达式来定义允许或拒绝分配给该类的用户的命令和语句。
示例:使用访问权限级别配置用户权限
此示例配置登录类的用户权限。您可以为登录类配置用户权限,以防止用户执行未经授权的网络操作。用户只能执行这些命令,并且只能查看和修改他们具有访问权限的语句。此约束可防止未经授权的用户执行敏感命令或配置可能对网络造成损害的语句。
要求
配置此示例之前,不需要除设备初始化之外的特殊配置。
概述
每个顶级 CLI 命令和每个配置语句都有一个与之关联的访问权限级别。配置登录类时,可以显式允许或拒绝使用操作模式和配置模式命令及配置语句。用户只能执行这些命令,并且只能查看和配置他们具有访问权限的语句。
您可以通过在语句中 permissions 指定一个或多个权限标志来定义每个登录类的访问权限。权限标志授予用户对命令、语句和层次结构的访问权限。权限标志不是累积的。对于每个登录类,您必须列出所需的所有权限标志,包括 view 显示信息和 configure 进入配置模式。通过在用户的登录类上指定特定权限标志,可以授予用户访问相应命令、语句和层次结构的权限。要授予对所有命令和配置语句的访问权限,请使用 all permissions 标志。权限标志为权限类型提供只读(“纯”形式)和读写(以 -control 结尾的形式)功能。
all当用户发出rollback启用了权限标志的rollback命令时,登录类权限位优先于扩展正则表达式。
要为登录类配置用户访问权限级别,请在层次结构级别包括 permissions 该语句 [edit system login class class-name] ,然后跟在权限标志后面。将多个权限配置为用方括号括起来的空格分隔列表:
[edit system login] user@host# set class class-name permissions permission-flag user@host# set class class-name permissions [flag1 flag2 flag3]
要查看可用权限,请使用 CLI 的上下文相关帮助,并在语句后 permissions 键入问号 (?):
[edit system login] user@host# set class class-name permissions ?
配置
此示例配置登录 snmp-admin 类。 此登录类中的用户只能配置和查看 SNMP 参数。
使用访问权限级别配置用户权限
分步程序
要配置登录类的访问权限:
-
使用
configure、 和snmp-controlsnmp权限标志配置snmp-admin登录类。[edit system login] user@host# set class snmp-admin permissions [configure snmp snmp-control]
配置的权限标志为 SNMP 提供读取 (snmp) 和读写 (snmp-control) 功能,这是此登录类唯一允许的访问权限。所有其他访问权限都将被拒绝。
-
创建分配给登录类的用户
snmp-admin帐户。[edit system login] user@host# set user snmpuser class snmp-admin authentication plain-text-password New password: Retype new password:
结果
在配置模式下,输入 show system login 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明以更正配置。
user@host# show system login
class snmp-admin {
permissions [ configure snmp snmp-control ];
}
user snmpuser {
class snmp-admin;
authentication {
encrypted-password "$ABC123"; ## SECRET-DATA
}
}
配置设备后,进入 commit 配置模式。
验证
使用分配给新登录类的用户名登录,并确认配置工作正常。
验证 SNMP 配置
目的
验证登录类中的 snmp-admin 用户可以配置 SNMP。
行动
在配置模式下,在层次结构级别配置 [edit snmp] SNMP 语句。
[edit snmp] user@host# set name device1 user@host# set description switch1 user@host# set location Lab1 user@host# set contact example.com user@host# commit
意义
登录类中的 snmp-admin 用户可以配置 SNMP 参数。用户可以配置这些参数,因为为此类指定的权限标志包括 snmp(读取功能)和 snmp-control(读取和写入功能)权限位。
允许和拒绝操作模式命令、配置语句和层次结构的正则表达式
本主题包含以下部分:
- 了解 allow 和 deny 语句
- 了解允许和拒绝语句语法
- 了解 allow 和 deny 语句的优先级和匹配
- 了解允许和拒绝语句规则
- 了解 *-regexps 语句的差异
- 在远程授权服务器上使用正则表达式
- 指定正则表达式
- 正则表达式运算符
- 正则表达式示例
了解 allow 和 deny 语句
每个顶级 CLI 命令和配置语句层次结构都有一个与之关联的访问权限级别。每个登录类都可以明确允许或拒绝使用操作模式和配置模式命令以及配置层次结构和语句,否则这些命令会被权限级别允许或拒绝。用户只能执行这些命令,并且只能查看和配置他们具有访问权限的语句。
每个登录类的访问权限由语句中 permissions 在层次结构级别指定的 [edit system login class class-name] 一个或多个权限标志定义。此外,您可以通过定义扩展正则表达式来允许或拒绝使用特定命令和配置层次结构。您可以通过为登录类配置以下语句来指定正则表达式:
-
allow-commands和deny-commands— 允许或拒绝访问操作模式和配置模式命令。 -
allow-configuration和deny-configuration—允许或拒绝访问特定配置层次结构。注意:这些语句执行的匹配速度较慢,但灵活性更大,尤其是在通配符匹配方面。但是,如果配置了大量全路径正则表达式或通配符表达式,则评估所有可能的语句可能需要很长时间,这可能会对性能产生负面影响。
-
allow-commands-regexps和deny-commands-regexps—允许或拒绝使用正则表达式字符串访问特定命令。 -
allow-configuration-regexps和deny-configuration-regexps— 使用正则表达式字符串允许或拒绝访问特定配置层次结构。
如果现有配置使用 allow/deny-commands or allow/deny-configuration 语句,则将相同的配置选项与 or allow/deny-configuration-regexps 语句一起使用allow/deny-commands-regexps可能不会产生相同的结果。搜索和匹配方法在这些语句的两种形式上有所不同。
使用语句显 allow/deny-* 式允许命令和配置语句层次结构可以增加语 permissions 句已经定义的权限。同样,使用语句显 allow/deny-* 式拒绝命令和配置语句层次结构会移除语 permissions 句已定义的权限。
例如,在以下配置中, configure 该权限使登录类中的用户能够进入配置模式。此外,该 allow-configuration 表达式允许用户在层次结构级别修改 [edit system services] 配置并将其提交。
[edit system login class test] user@host# set permissions configure allow-configuration "system services"
同样,在以下配置中,登录类用户可以执行权限标志允许的所有操作 all ,但用户无法在层次结构级别查看 [edit system services] 或修改配置:
[edit system login class test] user@host# set permissions all deny-configuration "system services"
了解允许和拒绝语句语法
您只能在每个登录类中配置 allow/deny-* 一次语句。配置语句时:
-
您可以根据需要配置任意数量的正则表达式。
-
正则表达式不区分大小写
allow/deny-commands语句与语句allow/deny-configuration互allow/deny-commands-regexps斥,语句与语句互allow/deny-configuration-regexps斥。例如,您不能在同一登录类中同时配置两者allow-configurationallow-configuration-regexps。
要定义对命令的访问权限,请使用 allow-commands and deny-commands 语句指定扩展正则表达式。将每个完整的独立表达式括在括号 ( ) 中,并使用竖线 ( | ) 符号分隔表达式。不要在与管道符号连接的正则表达式之间使用空格。完整表达式用双引号括起来。
allow-commands "(cmd1)|(cmd2)|(cmdn)" allow-configuration "(config1)|(config2)|(confign)"
例如:
[edit system login class test] user@host# set allow-commands "(ping .*)|(traceroute .*)|(show .*)|(configure .*)|(edit)|(exit)|(commit)|(rollback .*)"
使用语句指定 allow-commands 复杂的正则表达式时,必须使用锚点。例如:
[edit system login] user@host# set class test allow-commands "(^monitor)|(^ping)|(^show)|(^exit)"
要定义对各部分配置层次结构的访问权限,请在 and deny-configuration 语句中allow-configuration指定扩展正则表达式。将完整路径括在括号 ( ) 中,并使用竖线 ( | ) 符号分隔表达式。不要在与管道符号连接的正则表达式之间使用空格。完整表达式用双引号括起来。
allow-configuration "(config1)|(config2)|(confign)"
例如:
[edit system login class test] user@host# set deny-configuration "(system login class)|(system services)"
使用 allow/deny-commands-regexps or allow/deny-configuration-regexps 语句指定扩展正则表达式时,请用引号 (“ ”) 将每个表达式括起来,并使用空格分隔表达式。将多个表达式括在方括号 [ ] 中。例如:
[edit system login class test] user@host# set allow-configuration-regexps ["interfaces .* description .*" "interfaces .* unit .* description .*" “interfaces .* unit .* family inet address .*" "interfaces.* disable"]
要匹配的正则表达式字符串中不支持修饰符 set,例如 、 log和 count 。如果使用修饰符,则不会匹配任何内容。
正确配置:
[edit system login class test] user@host# set deny-commands protocols
配置不正确:
[edit system login class test] user@host# set deny-commands "set protocols"
了解 allow 和 deny 语句的优先级和匹配
默认情况下,和allow-commandsallow-configuration正deny-commands则表达式优先于表达deny-configuration式和表达式。因此,如果对两个allow-commandsdeny-commands语句配置相同的命令,则 allow 操作优先于拒绝操作。同样,如果对 and allow-configuration deny-configuration 语句配置相同的语句,则 allow 操作优先于拒绝操作。
例如,即使以下配置允许登录类中的 test 用户使用命令安装 request system software add 软件,即使该 deny-commands 语句包含相同的命令:
[edit system login class test] user@host# set allow-commands "request system software add" user@host# set deny-commands "request system software add"
同样,以下配置允许登录类测试中的 test 用户查看和修改 [edit system services] 配置层次结构,即使该 deny-configuration 语句包含相同的层次结构也一样:
[edit system login class test] user@host# set allow-configuration "system services" user@host# set deny-configuration "system services"
如果 and deny-commands 语句具有命令的两种不同变体,则allow-commands始终执行最长的匹配。以下配置允许登录类中的test用户执行命令,commit synchronize但不commit允许执行命令。这是因为 commit synchronize 是 和 commit synchronize之间的commit最长匹配项,并且它被指定为 allow-commands。
[edit system login class test] user@host# set allow-commands "commit synchronize" user@host# set deny-commands commit
以下配置允许登录类中的test用户执行命令,commit但不commit synchronize允许执行命令。这是因为 commit synchronize 是 和 commit synchronize之间的commit最长匹配项,并且它被指定为 deny-commands。
[edit system login class test] user@host# set allow-commands commit user@host# set deny-commands "commit synchronize"
与其他语句相比,语句的*-regexps默认行为是 和deny-configuration-regexpsdeny-commands-regexps正则表达式allow-commands-regexps优先于 和allow-configuration-regexps表达式。您可以在层次结构级别配置[edit system]该regex-additive-logic语句,以强制allow-configuration-regexps正则表达式deny-configuration-regexps优先于语句。通过配置该语句,您可以在更高级别拒绝配置层次结构,然后仅允许用户访问特定的子层次结构。
了解允许和拒绝语句规则
allow/deny-commands、allow/deny-configurationallow/deny-commands-regexpsallow/deny-configuration-regexps、和语句优先于登录类权限。配置这些语句时,应遵循以下规则:
-
和语句的
allow-commands正则表达式还可以包括commit、 、loadsaverollback、status和update命令。deny-commands -
all当用户发出rollback启用了权限标志的rollback命令时,登录类权限位优先于扩展正则表达式。 -
指定扩展正则表达式时,用户无法发出命令
load override。用户只能发出merge、replace和patch配置命令。 -
表示正则表达式时可以使用 * 通配符。但是,您必须将其用作正则表达式的一部分。不能将 or
[ .* ]用作[ * ]唯一表达式。此外,您不能使用诸如(interfaces (description (|.*))的表达式配置该allow-configuration语句,因为其计算结果为allow-configuration .*。
了解 *-regexps 语句的差异
本节概述语句和allow/deny-configuration-regexps语句之间的allow/deny-configuration差异。
语 allow/deny-configuration-regexps 句将正则表达式拆分为标记,并将每个部分与指定配置完整路径的每个部分进行匹配,而语句则 allow/deny-configuration 与完整字符串匹配。对于 allow/deny-configuration-regexps 语句,您可以配置一组字符串,其中每个字符串都是正则表达式,字符串术语之间有空格。此语法提供非常快的匹配,但灵活性较差。要指定通配符表达式,必须为要匹配的空格分隔字符串的每个标记设置通配符,这使得对这些语句使用通配符表达式变得更加困难。
例如:
-
使用 allow-configuration-regexps 匹配一个令牌的正则表达式
此示例显示 是
options与语句的第一个标记唯一匹配的表达式。[edit system] login { class test { permissions configure; allow-configuration-regexps .*options; } }上述配置与以下语句匹配:
-
设置策略选项 条件 condition dynamic-db
-
设置路由选项 静态路由 static-route 下一跃点 next-hop
-
设置事件选项 generate-event event time-interval seconds
上述配置与以下语句不匹配:
-
系统主机名 host-options
-
接口 interface-name 说明 选项
-
-
使用 allow-configuration-regexps 匹配三个令牌的正则表达式
此示例显示 是
ssh与语句的第三个标记唯一匹配的表达式。[edit system] login { class test { permissions configure; allow-configuration-regexps ".* .* .*ssh"; } }在前面的示例中,三个标记分别包括
.*、.*和.*ssh。上述配置与以下语句匹配:
-
系统主机名 主机名 SSH
-
系统服务 SSH
-
系统服务 出站 SSH
上述配置与以下语句不匹配:
-
接口说明 interface-name SSH
-
使用 deny-configuration 语句来限制配置访问比使用 deny-configuration-regexps 语句更容易。 表 2 说明了如何在不同配置中使用 and deny-configuration deny-configuration-regexps 语句来达到限制对特定配置的访问的相同结果。
| 配置被拒绝 |
使用: |
使用: |
结果 |
|
|
[edit system]
login {
class test {
permissions configure;
allow-configuration .*;
deny-configuration .*xnm-ssl;
}
}
|
[edit system]
login {
class test {
permissions configure;
allow-configuration .*;
deny-configuration-regexps ".* .* .*-ssl"";
}
}
|
拒绝以下配置语句:
|
|
|
[edit system]
login {
class test {
permissions configure;
allow-configuration .*;
deny-configuration ".*ssh";
}
}
|
[edit system]
login {
class test {
permissions configure;
allow-configuration .*;
deny-configuration-regexps ".*ssh";
deny-configuration-regexps ".* .*ssh";
deny-configuration-regexps ".* .* .*ssh";
}
}
|
拒绝以下配置语句:
|
尽管当 allow/deny-configuration 需要简单的配置时,语句也很有用,但语 allow/deny-configuration-regexps 句可提供更好的性能,并克服在语句中 allow/deny-configuration 组合表达式时存在的歧义。
在远程授权服务器上使用正则表达式
您可以使用扩展正则表达式来指定允许或拒绝某些用户的操作模式和配置模式命令以及配置语句和层次结构。您可以在层次结构级别的 、 和 语句中allow/deny-commands本地指定这些正则表达式。 allow/deny-commands-regexps allow/deny-configuration-regexps allow/deny-configuration[edit system login class class-name]您可以通过在授权服务器的配置中指定特定于瞻博网络供应商的 TACACS+ 或 RADIUS 属性来远程指定这些正则表达式。在本地和远程配置授权参数时,设备会将 TACACS+ 或 RADIUS 授权期间收到的正则表达式与本地设备上定义的任何正则表达式合并。
从 Junos OS 18.1 版开始, allow-commands-regexps TACACS+ 授权支持和 deny-commands-regexps 语句。
在本地配置 allow-commands中使用 、 deny-commands、 allow-configuration或 deny-configuration 语句指定多个正则表达式时,可以在括号内配置正则表达式,并使用竖线符号将它们分隔开。用双引号将完整表达式括起来。例如,您可以使用以下语法指定多个 allow-commands 参数:
allow-commands "(cmd1)|(cmd2)|(cmdn)"
RADIUS 授权服务器使用以下属性和语法:
Juniper-Allow-Commands += "(cmd1)|(cmd2)|(cmd3)", Juniper-Deny-Commands += "(cmd1)|(cmd2)", Juniper-Allow-Configuration += "(config1)|(config2)", Juniper-Deny-Configuration += "(config1)|(config2)",
TACACS+授权服务器使用以下属性和语法:
allow-commands = "(cmd1)|(cmd2)|(cmdn)" deny-commands = "(cmd1)|(cmd2)|(cmdn)" allow-configuration = "(config1)|(config2)|(confign)" deny-configuration = "(config1)|(config2)|(confign)"
使用 、 deny-commands-regexps、 allow-configuration-regexps或deny-configuration-regexps语句在本地配置allow-commands-regexps中指定多个正则表达式时,请将正则表达式配置在双引号内,并使用空格运算符将它们分隔开。将完整表达式括在方括号中。例如,您可以使用以下语法指定多个 allow-commands 参数:
allow-commands-regexps [ "cmd1" "cmd2" "cmdn" ]
RADIUS 授权服务器使用以下属性和语法:
Juniper-Allow-Configuration-Regexps += "(config1)|(config2)|(confign)", Juniper-Deny-Configuration-Regexps += "(config1)|(config2)|(confign)",
TACACS+授权服务器使用以下属性和语法:
allow-commands-regexps = "(cmd1)|(cmd2)|(cmdn)" deny-commands-regexps = "(cmd1)|(cmd2)|(cmdn)" allow-configuration-regexps = "(config1)|(config2)|(confign)" deny-configuration-regexps = "(config1)|(config2)|(confign)"
RADIUS 和 TACACS+ 服务器还支持简化语法,您可以在单独的行上指定每个单独的表达式。例如,RADIUS 服务器的简化语法为:
Juniper-Allow-Commands += "cmd1", Juniper-Allow-Commands += "cmd2", Juniper-Allow-Commands += "cmdn",
同样,TACACS+服务器的简化语法为:
allow-commands-regexps1 = "cmd1" allow-commands-regexps2 = "cmd2" allow-commands-regexpsn = "cmdn"
表 3 使用正则表达式区分了本地授权配置和 TACACS+ 服务器授权配置。
| 本地配置 |
远程 TACACS+ 配置 |
|---|---|
login {
class local {
permissions configure;
allow-commands "(ping .*)|(traceroute .*)|(show .*)|(configure .*)|(edit)|(exit)|(commit)|(rollback .*)";
deny-commands .*;
allow-configuration "(interfaces .* unit 0 family ethernet-switching vlan mem.* .*)|(interfaces .* native.* .*)|(interfaces .* unit 0 family ethernet-switching interface-mo.* .*)|(interfaces .* unit .*)|(interfaces .* disable)|(interfaces .* description .*)|(vlans .* vlan-.* .*)"
deny-configuration .*;
}
}
|
user = remote {
login = username
service = junos-exec {
allow-commands1 = "ping .*"
allow-commands2 = "traceroute .*"
allow-commands3 = "show .*"
allow-commands4 = "configure"
allow-commands5 = "edit"
allow-commands6 = "exit"
allow-commands7 = "commit"
allow-commands8 = ".*xml-mode"
allow-commands9 = ".*netconf.*"
allow-commands10 = ".*need-trailer"
allow-commands11 = "rollback.*"
allow-commands12 = "junoscript"
deny-commands1 = ".*"
allow-configuration1 = "interfaces .* unit 0 family ethernet-switching vlan mem.* .*"
allow-configuration2 = "interfaces .* native.* .*"
allow-configuration3 = "interfaces .* unit 0 family ethernet-switching interface-mo.* .*"
allow-configuration4 = "interfaces .* unit .*"
allow-configuration5 = "interfaces .* disable"
allow-configuration6 = "interfaces .* description .*"
allow-configuration7 = "interfaces .*"
allow-configuration8 = "vlans .* vlan-.* .*"
deny-configuration1 = ".*"
local-user-name = local-username
user-permissions = "configure"
}
}
|
-
您需要发出以下三个命令,明确允许在本地或远程访问 NETCONF 模式:
xml-mode、netconf和need-trailer。 -
使用
deny-configuration = ".*"该语句时,必须允许使用该allow-configuration语句进行所有所需配置。但是,此配置可能会影响语句允许的allow-configuration正则表达式缓冲区限制。如果超过此限制,则允许的配置可能无法正常工作。
指定正则表达式
为命令和配置语句指定正则表达式时,请密切注意以下示例。语法无效的正则表达式可能不会产生所需的结果,即使配置在没有任何错误的情况下提交也是如此。
您应为命令和配置语句指定正则表达式,其方式与执行完整命令或语句的方式相同。表 4 列出了用于为 和 [edit vlans] 语句层次结构配置[edit interfaces]访问权限的正则表达式。
| 声明 |
正则表达式 |
配置说明 |
|---|---|---|
| [edit interfaces]
[edit] user@host# set interfaces interface-name unit interface-unit-number |
该 因此,拒绝 [edit system login class class-name] user@host# set permissions configure user@host# set deny-configuration "interfaces .* unit .*" |
|
| [edit vlans]
[edit] user@host# set vlans vlan-name vlan-id vlan-id |
在这里,语 因此,允许 [edit system login class class-name] user@host# set permissions configure user@host# set allow-configuration "vlans .* vlan-id .*" |
|
正则表达式运算符
表 5 列出了可用于允许或拒绝操作和配置模式的常见正则表达式运算符。
命令正则表达式实现扩展(现代)正则表达式,如 POSIX 1003.2 中所定义。
| 操作人员 |
匹配 |
示例 |
|---|---|---|
| | |
用管道分隔的两个或多个术语之一。每个术语必须是括在括号( )中的完整独立表达式,管道和相邻括号之间没有空格。 |
[edit system login class test] user@host# set permissions configure user@host# set allow-commands "(ping)|(traceroute)|(show system alarms)|(show system software)" user@host# set deny-configuration "(access)|(access-profile)|(accounting-options)|(applications)|(apply-groups)|(bridge-domains)|(chassis)|(class-of-service)" 在上述配置中,分配给测试登录类的用户的操作模式访问权限仅限于语句中 |
| ^ |
在表达式的开头,用于表示命令开始的位置,可能存在一些歧义。 |
[edit system login class test] user@host# set permissions interface user@host# set permissions interface-control user@host# set allow-commands "(^show) (log|interfaces|policer))|(^monitor)" 通过上述配置,分配给测试登录类的用户有权查看和配置接口配置。该 对于第一个过滤器,指定的命令包括 |
| $ |
命令末尾的字符。用于表示必须在该点之前完全匹配的命令。 |
[edit system login class test] user@host# set permissions interface user@host# set allow-commands "(show interfaces$)" 通过上述配置,分配给测试登录类的用户可以在配置模式下查看接口配置。用户还可以使用操作模式命令查看 |
| [ ] |
字母或数字的范围。要分隔范围的开始和结束,请使用连字符 ( - |
[edit system login class test] user@host# set permissions clear user@host# set permissions configure user@host# set permissions network user@host# set permissions trace user@host# set permissions view user@host# set allow-configuration-regexps [ "interfaces [gx]e-.* unit [0-9]* description .*" ] 在上述配置中,分配给测试登录类的用户具有操作员级用户权限。这些用户还有权在指定的接口名称和单元号(0 到 9)范围内配置接口。 |
| ( ) |
一组命令,指示要计算的完整独立表达式。然后将结果作为整体表达式的一部分进行评估。括号必须与管道运算符结合使用,如前所述。 |
[edit system login class test] user@host# set permissions all user@host# set allow-commands "(clear)|(configure)" user@host# deny-commands "(mtrace)|(start)|(delete)" 通过上述配置,分配给测试登录类的用户具有超级用户级权限,并有权访问语句中 |
| * |
零个或多个术语。 |
[edit system login class test] user@host# set permissions configure user@host# set deny-configuration "(system login class m*)" 使用上述配置时,分配给登录用户名开头 |
| + |
一个或多个术语。 |
[edit system login class test] user@host# set permissions configure user@host# set deny-configuration "(system login class m+)" 使用上述配置时,分配给登录用户名开头 |
| . |
除空格“ ”之外的任何字符。 |
[edit system login class test] user@host# set permissions configure user@host# set deny-configuration "(system login class m.)" 使用上述配置时,分配给登录用户名开头 |
| .* |
从指定点开始的一切。 |
[edit system login class test] user@host# set permissions configure user@host# set deny-configuration "(system login class m .*)" 使用上述配置时,分配给登录用户名开头 同样,该
注意:
|
!不支持正则表达式运算符。
正则表达式示例
表 6 列出了用于在两个配置层次结构下允许配置选项的正则表达式 —[edit system ntp server] 和 [edit protocols rip],作为指定正则表达式的示例。
表 6 没有提供所有配置语句和层次结构的所有正则表达式和关键字的完整列表。表中列出的正则表达式仅针对 和[edit system ntp server][edit protocols rip]语句层次结构进行验证。
| 语句层次结构 |
正则表达式 |
允许的配置 |
配置被拒绝 |
|---|---|---|---|
|
|
|||
| 密钥 key-number |
[edit system login class test] set permissions configure set allow-configuration-regexps [ "system ntp server .*" "system ntp server .* key .*" ] set deny-configuration-regexps [ "system ntp server .* version .*" "system ntp server .* prefer" ] |
|
|
| 版本 version-number |
[edit system login class test] set permissions configure set allow-configuration-regexps [ "system ntp server .*" "system ntp server .* version .*" ] set deny-configuration-regexps [ "system ntp server .* key .*" "system ntp server .* prefer" ] |
|
|
| 首选 |
[edit system login class test] set permissions configure set allow-configuration-regexps [ "system ntp server .*" "system ntp server .* prefer" ]; set deny-configuration-regexps [ "system ntp server .* key .*" "system ntp server .* version .*" ] |
|
|
|
|
|||
| 消息大小 message-size |
[edit system login class test] set permissions configure set allow-configuration-regexps "protocols rip message-size .*" set deny-configuration-regexps [ "protocols rip metric-in .*" "protocols rip route-timeout .*" "protocols rip update-interval .*" ] |
|
|
| 度量输入 metric-in |
[edit system login class test] set permissions configure set allow-configuration-regexps "protocols rip metric-in .*" set deny-configuration-regexps [ "protocols rip message-size .*" "protocols rip route-timeout .*" "protocols rip update-interval .*" ] |
|
|
| 路由超时 route-timeout |
[edit system login class test] set permissions configure set allow-configuration-regexps "protocols rip route-timeout .*" set deny-configuration-regexps [ "protocols rip metric-in .*" "protocols rip message-size .*" "protocols rip update-interval .*" ] |
|
|
| 更新间隔 update-interval |
[edit system login class test] set permissions configure set allow-configuration-regexps "protocols rip update-interval .*" set deny-configuration-regexps [ "protocols rip metric-in .*" "protocols rip route-timeout .*" "protocols rip message-size .*" ] |
|
|
如何使用 allow-configuration 和 deny-configuration 语句定义访问权限
您可以通过组合使用以下类型的语句来定义配置语句层次结构的访问权限:
权限标志
allow-configuration和deny-configuration语句
权限标志定义了个人或登录类可以访问和控制的内容的更大边界。 allow-configuration and deny-configuration 语句包含一个或多个允许或拒绝特定配置层次结构和语句的正则表达式。 allow-configuration and deny-configuration 语句优先于权限标志,使管理员能够更精细地控制用户可以查看和配置的层次结构和语句。
本主题通过展示使用这些语句的登录类配置示例来解释如何使用 和 deny-configuration 语句定义allow-configuration访问权限。示例 1 到 3 创建的登录类允许用户访问除语句中deny-configuration定义的命令和语句之外的所有命令和语句。
请注意, 权限位 和 权限标志 可以互换使用。
示例 1
要创建允许用户执行所有命令和配置除 telnet 参数以外的所有内容的登录类:
示例 2
要创建一个登录类,允许用户执行所有命令并配置名称以“m”开头的任何登录类中除语句之外的所有内容:
-
将用户的登录类权限
all设置为 。[edit system login] user@host# set class all-except-login-class-m permissions all
-
包括以下
deny-configuration语句。[edit system login class all-except-login-class-m] user@host# set deny-configuration "system login class m.*"
示例 3
要创建允许用户执行所有命令并配置除 or [edit system services] 层级以外的[edit system login class]所有内容的登录类:
-
将用户的登录类权限
all设置为 。[edit system login] user@host# set class all-except-login-class-or-system-services permissions all
-
包括以下
deny-configuration语句:[edit system login class all-except-login-class-or-system-services] user@host# set deny-configuration "(system login class) | (system services)"
以下示例说明如何使用 and allow-configuration deny-configuration 语句来确定层次结构级别中 [edit system services] 彼此相反的权限。
示例 4
要创建仅允许用户在层次结构级别拥有 [edit system services] 完整配置权限的登录类:
-
将用户的登录类权限
configure设置为 。[edit system login] user@host# set class configure-only-system-services permissions configure
-
包括以下
allow-configuration语句:[edit system login class configure-only-system-services] user@host# set allow-configuration "system services"
示例 5
要创建允许用户对所有命令和所有配置层次结构(层次结构级别除外 [edit system services] )拥有完全权限的登录类:
-
将用户的登录类权限
all设置为 。[edit system login] user@host# set class all-except-system-services permissions all
-
包括以下
deny-configuration语句。[edit system login class all-except-system-services] user@host# set deny-configuration "system services"
示例:将加法逻辑与正则表达式一起使用来指定访问权限
此示例说明了在使用正则表达式设置配置访问权限时如何使用加法逻辑。
要求
此示例使用运行 Junos OS 16.1 或更高版本的设备。
概述
您可以定义正则表达式来控制谁可以对配置进行更改,以及他们可以更改哪些内容。这些正则表达式表示允许登录类中的用户访问的特定配置层次结构。例如,您可以定义允许用户修改一组路由实例的正则表达式,也可以定义正则表达式以防止用户对任何其他路由实例或其他配置级别进行更改。您可以通过为登录类配置 allow-configuration-regexps and deny-configuration-regexps 语句来定义正则表达式。
默认情况下, deny-configuration-regexps 语句 allow-configuration-regexps 优先于语句。如果某个配置层次结构出现在登录类的语句中 deny-configuration-regexps ,则无论语句的内容 allow-configuration-regexps 如何,该类中的用户都看不到该配置层次结构。如果某个配置层次结构未出现在语句中 deny-configuration-regexps ,则如果该配置层次结构出现在语句中 allow-configuration-regexps ,则该类中的用户可以看到该配置层次结构。
您可以通过为语句启用加法逻辑 *-configuration-regexps 来更改此默认行为。启用加法逻辑后,语 allow-configuration-regexps 句 deny-configuration-regexps 优先于语句。
因此,如果该语句拒绝访问给定级别(协议 .*)的所有配置层次结构,但该allow-configuration-regexps语句允许访问一个子层次结构(协议 bgp .*),则deny-configuration-regexps默认情况下,设备会拒绝该登录类中的用户访问层次结构,因为deny-configuration-regexps该语句优先。但是,如果启用加法逻辑,则设备将允许该登录类中的用户访问指定的子层次结构,因为allow-configuration-regexps在这种情况下优先。
配置
分步程序
要启用加法逻辑以显式允许给定登录类中的用户访问一个或多个单独的配置层次结构:
-
包括该
deny-configuration-regexps语句,并明确拒绝访问配置层次结构。[edit system login class class-name] user@host# set deny-configuration-regexps ["regular expression 1" "regular expression 2" "regular expression 3"]
例如:
[edit system login class class-name] user@host# set deny-configuration-regexps "protocols .*"
-
包括该
allow-configuration-regexps语句,并为要允许的特定层次结构定义正则表达式。[edit system login class class-name] user@host# set allow-configuration-regexps ["regular expression 1" "regular expression 2" "regular expression 3"]
例如:
[edit system login class class-name] user@host# set allow-configuration-regexps ["protocols bgp .*" "protocols ospf .*"]
-
为 和
allow-configuration-regexpsdeny-configuration-regexps正则表达式启用加法逻辑。[edit system] user@host# set regex-additive-logic
-
将登录类分配给一个或多个用户。
[edit system login] user@host# set user username class class-name
-
提交更改。
分配给此登录类的用户有权访问语句中包含的
allow-configuration-regexps配置层次结构,但无权访问语句中deny-configuration-regexps指定的其他层次结构。
配置该 regex-additive-logic 语句时,行为更改将应用于所有登录类中存在的所有 allow-configuration-regexps 和 deny-configuration-regexps 语句。如果启用加法逻辑,则应评估现有语句是否会产生任何影响,并根据需要更新这些语句中的正则表达式。
示例
将正则表达式与加法逻辑结合使用
目的
本节提供使用加法逻辑的正则表达式示例,为您提供创建适合您的系统的配置的想法。
允许特定路由实例
以下示例登录类包含一个正则表达式,该正则表达式允许配置名称以 开头 CUST-VRF-的路由实例,例如 CUST-VRF-1、 CUST-VRF-25、 CUST-VRF-100、 等。此示例还包含一个正则表达式,用于阻止配置任何路由实例。
[edit system login class class-name] user@host# set permissions [configure routing-control view view-configuration] user@host# set deny-configuration-regexps "routing-instances .*" user@host# set allow-configuration-regexps "routing-instances CUST-VRF-.* .*"
默认情况下,该 deny-configuration-regexps 语句优先,并且先前的配置会阻止登录类中的用户配置任何路由实例,无论名称如何。
但是,如果配置以下语句,则该 allow-configuration-regexps 语句优先。因此,用户可以配置名称以 开 CUST-VRF-头的路由实例,但不能配置任何其他路由实例。
[edit system] user@host# set regex-additive-logic
仅允许 BGP 对等方配置
以下示例登录类包含的正则表达式可阻止在层次结构级别进行 [edit protocols] 配置,但允许配置 BGP 对等方:
[edit system login class class-name] user@host# set permissions [configure routing-control view view-configuration] user@host# set deny-configuration-regexps "protocols .*" user@host# set allow-configuration-regexps "protocols bgp group .*"
默认情况下,先前的配置会阻止登录类中的用户对 下的任何层次结构 [edit protocols]进行更改。
但是,如果配置以下语句,登录类中的用户可以对 BGP 对等方进行更改,但用户不能在允许的层级之外配置其他协议或其他 BGP 语句。
[edit system] user@host# set regex-additive-logic
验证
要验证是否正确设置了访问权限,请执行以下操作:
-
配置登录类并提交更改。
-
将登录类 username分配给 .
-
以使用新登录类的分配者 username 身份登录。
-
尝试配置允许的层次结构级别。
-
您应该能够在已允许的层次结构级别中配置语句。
-
不应可见被拒绝的层次结构级别。
-
任何允许或拒绝的表达式都应优先于语句授予
permissions的任何权限。
-
示例:为操作模式命令配置具有访问权限的用户权限
此示例说明如何配置自定义登录类并为操作模式命令分配访问权限。登录类中的用户只能执行他们有权访问的命令。这可以防止未经授权的用户执行可能对网络造成损害的敏感命令。
要求
此示例使用以下硬件和软件组件:
-
一台瞻博网络设备
-
一台 TACACS+(或 RADIUS)服务器
开始之前,在设备与 TACACS+ 服务器之间建立 TCP 连接。对于 RADIUS 服务器,请在设备与 RADIUS 服务器之间建立 UDP 连接。
概述和拓扑
图 1 展示了一个简单的拓扑结构,其中路由器 R1 是瞻博网络设备,并且与 TACACS+ 服务器建立了 TCP 连接。
此示例使用三个自定义登录类配置 R1:Class1、Class2 和 Class3。每个类通过配置permissions语句以及使用 and deny-commands 语句定义allow-commands扩展正则表达式来定义用户的访问权限。
每个登录类的用途如下:
-
Class1— 仅使用语句定义
allow-commands用户的访问权限。此登录类提供操作员级用户权限和授权,用于重新启动设备。 -
Class2— 仅使用语句定义
deny-commands用户的访问权限。此登录类提供操作员级用户权限并拒绝访问set命令。 -
Class3— 使用和语句定义
allow-commandsdeny-commands用户的访问权限。该登录类提供超级用户级用户权限和授权,用于访问接口和查看设备信息。它还拒绝访问和editconfigure命令。
路由器 R1 有三个不同的用户,User1、User2 和 User3 分别分配给 Class1、Class2 和 Class3 登录类。
配置
- CLI 快速配置
- 配置路由器 R1 的身份验证参数
- 使用 allow-commands 配置访问权限 语句 (Class1)
- 使用 deny-commands 语句配置访问权限 (Class2)
- 使用 allow-commands 和 deny-commands 语句配置访问权限(第 3 类)
- 结果
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层次结构级别的 [edit] CLI 中,然后进入 commit 配置模式。
R1
set system authentication-order tacplus set system authentication-order radius set system authentication-order password set system radius-server 10.209.1.66 secret "$ABC123" set system tacplus-server 10.209.1.66 secret "$ABC123" set system radius-options enhanced-accounting set system tacplus-options enhanced-accounting set system accounting events login set system accounting events change-log set system accounting events interactive-commands set system accounting traceoptions file auditlog set system accounting traceoptions flag all set system accounting destination tacplus server 10.209.1.66 secret "$ABC123" set system login class Class1 permissions clear set system login class Class1 permissions network set system login class Class1 permissions reset set system login class Class1 permissions trace set system login class Class1 permissions view set system login class Class1 allow-commands "request system reboot" set system login class Class2 permissions clear set system login class Class2 permissions network set system login class Class2 permissions reset set system login class Class2 permissions trace set system login class Class2 permissions view set system login class Class2 deny-commands set set system login class Class3 permissions all set system login class Class3 allow-commands configure set system login class Class3 deny-commands .* set system login user User1 uid 2001 set system login user User1 class Class1 set system login user User1 authentication encrypted-password "$ABC123" set system login user User2 uid 2002 set system login user User2 class Class2 set system login user User2 authentication encrypted-password "$ABC123" set system login user User3 uid 2003 set system login user User3 class Class3 set system login user User3 authentication encrypted-password "$ABC123" set system syslog file messages any any
配置路由器 R1 的身份验证参数
分步程序
要配置路由器 R1 身份验证,请执行以下操作:
-
配置 R1 尝试对用户进行身份验证的顺序。在此示例中,首先是 TACACS+ 服务器身份验证,然后是 RADIUS 服务器身份验证,然后是本地密码。
[edit system] user@R1# set authentication-order tacplus user@R1# set authentication-order radius user@R1# set authentication-order password
-
配置 TACACS+ 服务器。
[edit system] user@R1# set tacplus-server 10.209.1.66 secret "$ABC123" user@R1# set tacplus-options enhanced-accounting user@R1# set accounting destination tacplus server 10.209.1.66 secret "$ABC123"
-
配置 RADIUS 服务器。
[edit system] user@R1# set radius-server 10.209.1.66 secret "$ABC123" user@R1# set radius-options enhanced-accounting
-
配置 R1 计费参数。
[edit system] user@R1# set accounting events login user@R1# set accounting events change-log user@R1# set accounting events interactive-commands user@R1# set accounting traceoptions file auditlog user@R1# set accounting traceoptions flag all
使用 allow-commands 配置访问权限 语句 (Class1)
分步程序
要使用以下 allow-commands 语句指定正则表达式:
-
配置 Class1 登录类并分配操作员级用户权限。
[edit system login] user@R1# set class Class1 permissions [clear network reset trace view]
-
配置
allow-commands正则表达式,使类中的用户能够重新启动设备。[edit system login] user@R1# set class Class1 allow-commands "request system reboot"
-
为 Class1 登录类配置用户帐户。
[edit system login] user@R1# set user User1 uid 2001 user@R1# set user User1 class Class1 user@R1# set user User1 authentication encrypted-password "$ABC123"
使用 deny-commands 语句配置访问权限 (Class2)
分步程序
要使用以下 deny-commands 语句指定正则表达式:
-
配置 Class2 登录类并分配操作员级用户权限。
[edit system login] user@R1# set class Class1 permissions [clear network reset trace view]
-
配置
deny-commands正则表达式以防止类中的用户执行set命令。[edit system login] user@R1# set class Class1 deny-commands "set"
-
为 Class2 登录类配置用户帐户。
[edit system login] user@R1# set user User2 uid 2002 user@R1# set user User2 class Class2 user@R1# set user User2 authentication encrypted-password "$ABC123"
使用 allow-commands 和 deny-commands 语句配置访问权限(第 3 类)
分步程序
要同时使用 and deny-commands 语allow-commands句指定正则表达式:
-
配置 Class3 登录类并分配超级用户级权限。
[edit system login] user@R1# set class Class3 permissions all
-
配置
deny-commands正则表达式以防止类中的用户执行任何命令。[edit system login] user@R1# set class Class3 deny-commands ".*"
-
配置
allow-commands正则表达式以允许用户进入配置模式。[edit system login] user@R1# set class Class3 allow-commands configure
-
为 Class3 登录类配置用户帐户。
[edit system login] user@R1# set user User3 uid 2003 user@R1# set user User3 class Class3 user@R1# set user User3 authentication encrypted-password "$ABC123"
结果
在配置模式下,输入 show system 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明以更正配置。
user@R1# show system
authentication-order [ tacplus radius password ];
radius-server {
10.209.1.66 secret "$ABC123";
}
tacplus-server {
10.209.1.66 secret "$ABC123";
}
radius-options {
enhanced-accounting;
}
tacplus-options {
enhanced-accounting;
}
accounting {
events [ login change-log interactive-commands ];
traceoptions {
file auditlog;
flag all;
}
destination {
tacplus {
server {
10.209.1.66 secret "$ABC123";
}
}
}
}
login {
class Class1 {
permissions [ clear network reset trace view ];
allow-commands "request system reboot";
}
class Class2 {
permissions [ clear network reset trace view ];
deny-commands set;
}
class Class3 {
permissions all;
allow-commands configure;
deny-commands .*;
}
user User1 {
uid 2001;
class Class1;
authentication {
encrypted-password "$ABC123";
}
}
user User2 {
uid 2002;
class Class2;
authentication {
encrypted-password "$ABC123";
}
}
user User3 {
uid 2003;
class Class3;
authentication {
encrypted-password “$ABC123”;
}
}
}
syslog {
file messages {
any any;
}
}
验证
使用新登录类分配的用户名登录,并确认配置工作正常。
验证 Class1 配置
目的
验证 Class1 登录类中允许的权限和命令是否正常工作。
行动
在操作模式下,运行命令 show system users 。
User1@R1> show system users 12:39PM up 6 days, 23 mins, 6 users, load averages: 0.00, 0.01, 0.00 USER TTY FROM LOGIN@ IDLE WHAT User1 p0 abc.example.net 12:34AM 12:04 cli User2 p1 abc.example.net 12:36AM 12:02 -cli (cli) User3 p2 abc.example.net 10:41AM 11 -cli (cli)
在操作模式下,运行命令 request system reboot 。
User1@R1> request system ? Possible completions: reboot Reboot the system
意义
User1 被分配到的 Class1 登录类具有操作员级用户权限,并允许类中的用户执行 request system reboot 命令。
预定义的运算符登录类指定了以下权限标志:
clear— 可以使用
clear命令清除(删除)设备从网络中学习并存储在各种网络数据库中的信息。network- 可以使用 、
ssh、telnet和traceroute命令访问网络ping。reset— 可以使用
restart命令重新启动软件进程。trace- 可以查看追踪文件设置和配置追踪文件属性。
view— 可以使用各种命令显示当前系统范围的路由表以及特定于协议的值和统计信息。无法查看密钥配置。
对于 Class1 登录类,除了上述用户权限外,User1 还可以执行 request system reboot 命令。第一个输出显示作为操作员的视图权限,第二个输出显示 User1 可以作为操作员执行的唯一 request system 命令是 request system reboot 命令。
验证 Class2 配置
目的
验证 Class2 登录类允许的权限和命令是否正常工作。
行动
在操作模式下,运行命令 ping 。
User2@R1> ping 10.209.1.66 ping 10.209.1.66 PING 10.209.1.66 (10.209.1.66): 56 data bytes 64 bytes from 10.209.1.66: icmp_seq=0 ttl=52 time=212.521 ms 64 bytes from 10.209.1.66: icmp_seq=1 ttl=52 time=212.844 ms 64 bytes from 10.209.1.66: icmp_seq=2 ttl=52 time=211.304 ms 64 bytes from 10.209.1.66: icmp_seq=3 ttl=52 time=210.963 ms ^C --- 10.209.1.66 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 210.963/211.908/212.844/0.792 ms
从 CLI 提示符中,检查可用命令。
User2@R1> ? Possible completions: clear Clear information in the system file Perform file operations help Provide help information load Load information from file monitor Show real-time debugging information mtrace Trace multicast path from source to receiver op Invoke an operation script ping Ping remote target quit Exit the management session request Make system-level requests restart Restart software process save Save information to file show Show system information ssh Start secure shell on another host start Start shell telnet Telnet to another host test Perform diagnostic debugging traceroute Trace route to remote host
从 CLI 提示符中,执行任何 set 命令。
User2@R1> set
^
unknown command.
意义
User2 被分配到的 Class2 登录类具有操作员级用户权限,并拒绝访问所有 set 命令。
为预定义运算符登录类指定的权限标志与为 Class1 指定的权限标志相同。
验证 Class3 配置
目的
验证 Class3 登录类允许的权限和命令是否有效。
行动
在操作模式下,检查可用命令。
User3@R1> ? Possible completions: configure Manipulate software configuration information
进入配置模式。
User3@R1> configure Entering configuration mode [edit] User3@R1#
意义
User3 被分配到的 Class3 登录类具有超级用户(全部)权限,但该类仅允许用户执行 configure 命令。该类拒绝访问所有其他操作模式命令。由于语句中 allow/deny-commands 指定的正则表达式优先于用户权限,因此 R1 上的用户 3 只能访问配置模式,并且无法访问所有其他操作模式命令。
示例:为配置语句和层次结构配置具有访问权限的用户权限
此示例说明如何配置自定义登录类以及如何为特定配置层次结构分配访问权限。登录类中的用户只能查看和修改他们有权访问的那些配置语句和层次结构。这样可以防止未经授权的用户修改设备配置,以免对网络造成损坏。
要求
此示例使用以下硬件和软件组件:
-
一台瞻博网络设备
-
一台 TACACS+(或 RADIUS)服务器
开始之前,在设备与 TACACS+ 服务器之间建立 TCP 连接。对于 RADIUS 服务器,请在设备与 RADIUS 服务器之间建立 UDP 连接。
概述和拓扑
图 2 展示了一个简单的拓扑结构,其中路由器 R1 是瞻博网络设备,并且与 TACACS+ 服务器建立了 TCP 连接。
此示例使用两个自定义登录类配置 R1:Class1 和 Class2。每个类通过配置 permissions 语句以及使用 allow-configuration、 deny-configuration、 allow-configuration-regexps和 deny-configuration-regexps 语句定义扩展正则表达式来定义用户的访问权限。
每个登录类的用途如下:
-
Class1— 使用
allow-configurationanddeny-configuration语句定义用户的访问权限。此登录类仅提供对配置[edit interfaces]层次结构的访问权限,并拒绝设备上的所有其他访问。为此,用户权限包括configure提供配置访问权限。此外,该allow-configuration语句允许访问接口配置,并且该语句拒绝deny-configuration访问所有其他配置层次结构。由于 allow 语句优先于 deny 语句,因此分配给 Class1 登录类的用户只能[edit interfaces]访问层次结构级别。 -
Class2— 使用
allow-configuration-regexpsanddeny-configuration-regexps语句定义用户的访问权限。此登录类提供超级用户级用户权限,并明确允许在多个层级下进行接口配置。它还拒绝访问[edit system]和[edit protocols]层次结构级别。
路由器 R1 有两个用户,User1 和 User2,分别分配给 Class1 和 Class2 登录类。
配置
- CLI 快速配置
- 配置路由器 R1 的身份验证参数
- 使用 allow-configuration 和 deny-configuration 语句配置访问权限 (Class1)
- 使用 allow-configuration-regexps 和 deny-configuration-regexps 语句配置访问权限(类 2)
- 结果
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层次结构级别的 [edit] CLI 中,然后进入 commit 配置模式。
R1
set system authentication-order tacplus set system authentication-order radius set system authentication-order password set system radius-server 10.209.1.66 secret "$ABC123" set system tacplus-server 10.209.1.66 secret "$ABC123" set system radius-options enhanced-accounting set system tacplus-options enhanced-accounting set system accounting events login set system accounting events change-log set system accounting events interactive-commands set system accounting traceoptions file auditlog set system accounting traceoptions flag all set system accounting destination tacplus server 10.209.1.66 secret "$ABC123" set system login class Class1 permissions configure set system login class Class1 allow-configuration "interfaces .* unit .*" set system login class Class1 deny-configuration .* set system login class Class2 permissions all set system login class Class2 allow-configuration-regexps [ "interfaces .* description .*" "interfaces .* unit .* description .*" "interfaces .* unit .* family inet address .*" "interfaces.* disable" ] set system login class Class2 deny-configuration-regexps [ "system" "protocols" ] set system login user User1 uid 2004 set system login user User1 class Class1 set system login user User1 authentication encrypted-password "$ABC123" set system login user User2 uid 2006 set system login user User2 class Class2 set system login user User2 authentication encrypted-password "$ABC123" set system syslog file messages any any
配置路由器 R1 的身份验证参数
分步程序
要配置路由器 R1 身份验证,请执行以下操作:
-
配置 R1 尝试对用户进行身份验证的顺序。在此示例中,首先是 TACACS+ 服务器身份验证,然后是 RADIUS 服务器身份验证,然后是本地密码。
[edit system] user@R1# set authentication-order tacplus user@R1# set authentication-order radius user@R1# set authentication-order password
-
配置 TACACS+ 服务器。
[edit system] user@R1# set tacplus-server 10.209.1.66 secret "$ABC123" user@R1# set tacplus-options enhanced-accounting user@R1# set accounting destination tacplus server 10.209.1.66 secret "$ABC123"
-
配置 RADIUS 服务器。
[edit system] user@R1# set radius-server 10.209.1.66 secret "$ABC123" user@R1# set radius-options enhanced-accounting
-
配置 R1 计费参数。
[edit system] user@R1# set accounting events login user@R1# set accounting events change-log user@R1# set accounting events interactive-commands user@R1# set accounting traceoptions file auditlog user@R1# set accounting traceoptions flag all
使用 allow-configuration 和 deny-configuration 语句配置访问权限 (Class1)
分步程序
要使用 allow-configuration and deny-configuration 语句指定正则表达式:
-
使用
configure权限配置 Class1 登录类。[edit system login] user@R1# set class Class1 permissions configure
-
配置
allow-configuration正则表达式以允许类中的用户查看和修改部分[edit interfaces]层级。[edit system login] user@R1# set class Class1 allow-configuration "interfaces .* unit .*"
-
将正则表达式配置
deny-configuration为拒绝访问所有配置层次结构。[edit system login] user@R1# set class Class1 deny-configuration .*
-
为 Class1 登录类配置用户帐户。
[edit system login] user@R1# set user User1 uid 2004 user@R1# set user User1 class Class1 user@R1# set user User1 authentication encrypted-password "$ABC123"
使用 allow-configuration-regexps 和 deny-configuration-regexps 语句配置访问权限(类 2)
分步程序
要使用 allow-configuration-regexps and deny-configuration-regexps 语句指定正则表达式:
-
配置 Class2 登录类并分配超级用户(全部)权限。
[edit system login] user@R1# set class Class2 permissions all
-
配置
allow-configuration-regexps正则表达式以允许类中的用户访问层次结构级别下的[edit interfaces]多个层次结构。[edit system login] user@R1# set class Class2 allow-configuration-regexps [ "interfaces .* description .*" "interfaces .* unit .* description .*" "interfaces .* unit .* family inet address .*" "interfaces.* disable" ]
-
配置正
deny-configuration-regexps则表达式,以防止类中的用户查看或修改层次结构级别的[edit system][edit protocols]配置。[edit system login] user@R1# set class Class2 deny-configuration-regexps [ "system" "protocols" ]
-
为 Class2 登录类配置用户帐户。
[edit system login] user@R1# set user User2 uid 2006 user@R1# set user User2 class Class2 user@R1# set user User2 authentication encrypted-password "$ABC123"
结果
在配置模式下,输入 show system 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明以更正配置。
user@R1# show system
authentication-order [ tacplus radius password ];
radius-server {
10.209.1.66 secret "$ABC123";
}
tacplus-server {
10.209.1.66 secret "$ABC123";
}
radius-options {
enhanced-accounting;
}
tacplus-options {
enhanced-accounting;
}
accounting {
events [ login change-log interactive-commands ];
traceoptions {
file auditlog;
flag all;
}
destination {
tacplus {
server {
10.209.1.66 secret "$ABC123";
}
}
}
}
login {
class Class1 {
permissions configure;
allow-configuration "interfaces .* unit .*";
deny-configuration .*;
}
class Class2 {
permissions all;
allow-configuration-regexps [ "interfaces .* description .*" "interfaces .* unit .* description .*" "interfaces .* unit .* family inet address .*" "interfaces.* disable" ];
deny-configuration-regexps [ "system" "protocols" ];
}
user User1 {
uid 2001;
class Class1;
authentication {
encrypted-password "$ABC123";
}
}
user User2 {
uid 2002;
class Class2;
authentication {
encrypted-password "$ABC123";
}
}
}
syslog {
file messages {
any any;
}
}
验证
使用新登录类分配的用户名登录,并确认配置工作正常。
验证 Class1 配置
目的
验证 Class1 登录类中允许的权限是否有效。
行动
在操作模式下,检查可用命令。
User1@R1> ? Possible completions: clear Clear information in the system configure Manipulate software configuration information file Perform file operations help Provide help information load Load information from file op Invoke an operation script quit Exit the management session request Make system-level requests save Save information to file set Set CLI properties, date/time, craft interface message start Start shell test Perform diagnostic debugging
在配置模式下,检查可用的配置权限。
User1@R1# edit ? Possible completions: > interfaces Interface configuration
意义
User1 具有 configure 用户权限,如第一个输出所示。此外,在配置模式下,用户 1 有权访问 interfaces 层次结构级别,但仅限于该层级,如第二个输出所示。
验证 Class2 配置
目的
验证 Class2 配置是否按预期工作。
行动
在配置模式下,访问配置 interfaces 。
[edit interfaces] User2@R1# set ? Possible completions: <interface-name> Interface name + apply-groups Groups from which to inherit configuration data + apply-groups-except Don't inherit configuration data from these groups ge-0/0/3 Interface name > interface-range Interface ranges configuration > interface-set Logical interface set configuration > traceoptions Interface trace options
在配置模式下,访问 system 和 protocols 配置层次结构。
User2@R1# edit system
^
Syntax error, expecting <statement> or <identifier>.
User2@R1# edit protocols
^
Syntax error, expecting <statement> or <identifier>.
意义
用户 2 有权在 R1 上配置接口,但用户无权查看或修改 [edit system] 或 [edit protocols] 层次结构级别。
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。
allow-commands-regexps TACACS+ 授权支持和
deny-commands-regexps 语句。