使用 Junos XML 协议保护或取消保护配置对象
属性 protect 可防止对所选配置层次结构和语句进行更改。您无法通过 CLI 手动更改受保护元素,也不能使用提交脚本或远程过程调用自动更改受保护元素。如果尝试对受保护语句或在受保护的层次结构中更改配置,设备会发出警告,并且配置更改失败。
如果配置层次结构或语句受到保护,用户将无法执行以下活动:
-
删除或修改受保护层次结构内的层次结构或者语句或标识符(删除包含受保护元素的不受保护的层次结构会删除所有未受保护的子元素,并保留所有受保护的子元素。)
-
在受保护的层次结构中插入新的配置语句或标识符
-
重命名受保护层次结构中的受保护语句或语句或标识符
-
将配置复制到受保护的层次结构中
-
激活或停用受保护层次结构中的受保护语句或语句
-
对受保护语句、层次结构或受保护层次结构内的语句进行注释
如果保护不存在的配置语句或层次结构,设备将首先创建配置元素,然后保护它。如果不保护不受保护的语句或元素,则不会采取措施。
您可以在显示配置时识别受保护的元素。 表 1 介绍了如何为不同格式的配置数据识别受保护的元素。
| 格式 | 标识符 |
|---|---|
| 配置模式命令 |
命令 |
| Json |
受保护的层次结构和语句在其 |
| 文本 |
受保护元素前面有 |
| Xml |
受保护元素的开始标记包含属性 |
用户或客户端应用必须有权修改配置,才能保护或不保护配置对象。
在与 Junos 设备的 NETCONF 或 Junos XML 协议会话中,为了防止配置元素发生变化或取消保护先前保护的元素,客户端应用程序首先包含 使用 Junos XML 协议创建、修改或删除配置元素中描述的标记元素。
Xml
使用 Junos XML 标记元素来表示配置时,客户端应用程序将 protect="protect" 或 unprotect="unprotect" 属性包括在对象的打开标记中。应用程序包括任何必要的标识符标记元素。在以下示例 RPC 中,标识符标记元素称为 <name>:
<configuration>
<!-- opening tag for each parent of the object -->
<object (protect="protect" | unprotect="unprotect")>
<name>identifier</name>
</object>
<!-- closing tag for each parent of the object -->
</configuration>
在符合 YANG 的 NETCONF 会话中,通过在标记元素中包含和jcmd:protect="(true | false)"属性,可以保护或取消保护 XML 数据xmlns:jcmd="http://yang.juniper.net/junos/jcmd"中的配置元素。有关更多信息,请参阅 Junos 设备的 YANG 元数据注释。
文本
当使用格式化的 ASCII 文本来保护或取消保护对象时,应用程序会根据需要在元素之前添加 protect: 或 unprotect: 运算符。如果保护的是层次结构级别,并且该层次结构下没有附加子元素,请将分号添加到元素语句之后。
<configuration-text>
/* statements for parent levels */
/* For an object with an identifier */
(protect: | unprotect:)
object identifier {
/* Child configuration statements */
}
/* For a hierarchy level or object without an identifier */
(protect: | unprotect:)
element {
/* Child configuration statements */
}
/* closing braces for parent levels */
</configuration-text>
配置模式(集)命令
使用配置模式命令保护对象时,应用程序将 protect 指定与 CLI 配置模式命令等效的 or unprotect 命令。您可以保护层次结构和单个语句。
<configuration-set>
(protect | unprotect) statement-path-to-hierarchy
(protect | unprotect) statement-path-to-object object identifier
</configuration-set>
Json
使用 JSON 配置数据来表示配置时,客户端应用程序通过在对象的属性列表中包含相应的属性来保护或不保护对象。客户端包括用于 "protect" : true 保护对象的属性,并包括 "protect" : false 用于取消保护该对象的或 "unprotect" : true 属性。为了保护或不保护具有标识符的对象,客户端还包括该对象的标识符。
以下通用 JSON 配置指示在保护层次结构、具有标识符的对象和叶语句时属性的位置。
<configuration-json>
{
"configuration" : {
/* JSON objects for parent hierarchies */
"hierarchy" : {
"@" : {
"comment" : "/* protect a hierarchy */" ,
"protect" : true
},
"object" : [
{
"@" : {
"comment" : "/* protect an object with an identifier */" ,
"protect" : true
},
"name" : "identifier",
"@statement-name" : {
"comment" : "/* protect a statement */" ,
"protect" : true
}
}
]
}
/* closing braces for parent hierarchies */
}
}
</configuration-json>
在使用 JSON 表示的 Junos OS 配置数据中,和"unprotect"属性的值"protect"为 Boolean 类型,用小写表示,不括在引号中。
在符合 YANG 的 NETCONF 会话中,您可以通过在语句的元数据对象中包含注释来保护或取消保护 JSON 数据 "junos-configuration-metadata:protect" : (true | false) 中的配置对象。有关更多信息,请参阅 Junos 设备的 YANG 元数据注释。
以下示例使用 Junos XML 标记元素保护 [edit access] 配置的层次结构级别:
<rpc>
<load-configuration>
<configuration>
<access protect="protect"/>
</configuration>
</load-configuration>
</rpc>
一旦受到保护,任何修改 [edit access] 层次结构级别的尝试都会产生警告。以下 RPC 尝试删除 [edit access] 层次结构级别。由于该层次结构级别受到保护,服务器会返回该层次结构受到保护的警告,并且配置更改失败。
<rpc>
<load-configuration>
<configuration>
<access delete="delete"/>
</configuration>
</load-configuration>
</rpc>
<xnm:warning xmlns="http://xml.juniper.net/xnm/1.1/xnm" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm">
<message>
[access] is protected, 'access' cannot be deleted
</message>
</xnm:warning>