2. Junos用户权限与登录类配置

Junos用户权限与登录类配置 学习卡片

为什么运营商场景必须做分权分域

一台承载城域网业务的 Juniper 路由器,日常会被多类角色同时操作:NOC 一线只做查看与告警确认,二线工程师需要改接口和路由策略,安全审计需要读日志但不能改配置,厂商远程支持需要临时高权限。如果所有人共用 root 或同一个超级账号,一次误操作就可能影响整台设备甚至整片业务。Junos 的分权机制由三层构成:login class 定义"能做什么",user 绑定"谁来做",认证方式 决定"如何证明身份"。

Junos 分权分域模型:login class → user → 认证方式 login class(权限模板) noc-view permissions: view, trace allow-commands: show.* eng-config permissions: configure, interface, routing audit-read permissions: view deny-commands: configure vendor-super permissions: all allow-configuration: * user(账号绑定) noc01 class noc-view uid 2001 eng01 class eng-config uid 2002 audit01 class audit-read uid 2003 vendor01 class vendor-super uid 2004 认证方式 本地密码认证 authentication-order password RADIUS / TACACS+ authentication-order radius SSH 公钥认证 load-key-file ssh-rsa / ssh-ed25519 双因素(可选) RADIUS + 本地回退 authentication-order login class 决定权限边界 · user 绑定身份 · 认证方式验证身份 · 三者组合实现分权分域

创建 login class 与用户账号

以下配置在一台 Juniper 路由器上创建四个权限级别,分别对应 NOC 一线、二线工程、安全审计和厂商支持。所有操作在 configure 模式下完成。

# 1. 定义 login class
set system login class noc-view permissions [ view trace ]
set system login class noc-view allow-commands "show .*"
set system login class noc-view deny-commands "configure|edit|set|delete|commit"

set system login class eng-config permissions [ configure interface routing ]
set system login class eng-config allow-commands "show .*|ping|traceroute"
set system login class eng-config deny-commands "request system reboot|request system halt"

set system login class audit-read permissions view
set system login class audit-read deny-commands "configure|edit|set|delete|commit|request"

set system login class vendor-super permissions all
set system login class vendor-super allow-configuration ".*"

# 2. 创建用户并绑定 class
set system login user noc01 uid 2001 class noc-view
set system login user noc01 authentication encrypted-password "$6$rounds=10000$..."

set system login user eng01 uid 2002 class eng-config
set system login user eng01 authentication encrypted-password "$6$rounds=10000$..."

set system login user audit01 uid 2003 class audit-read
set system login user audit01 authentication encrypted-password "$6$rounds=10000$..."

set system login user vendor01 uid 2004 class vendor-super
set system login user vendor01 authentication encrypted-password "$6$rounds=10000$..."

# 3. 配置认证顺序(RADIUS 优先,本地回退)
set system authentication-order [ radius password ]
set system radius-server 10.0.0.50 secret "Radius@2024"
set system radius-server 10.0.0.50 timeout 5
set system radius-server 10.0.0.50 retry 3
密码字段使用 encrypted-password 而非明文 plain-text-password,避免 show configuration 时泄露。实际部署中建议通过 RADIUS/TACACS+ 集中管理密码,Junos 本地只保留回退账号。

验证分权效果

配置提交后,用不同账号登录并执行越权命令,确认权限边界生效。以下为预期行为对照:

账号class允许操作被拒绝操作预期提示
noc01noc-viewshow interfaces、show routeconfigure、setpermission denied
eng01eng-configset interfaces、commitrequest system rebootpermission denied
audit01audit-readshow log messagesconfigure、requestpermission denied
vendor01vendor-super全部操作——

验证命令示例:以 noc01 登录后执行 configure,应返回 permission denied;以 eng01 登录后执行 request system reboot,同样应被拒绝。若未被拒绝,检查 deny-commands 正则是否覆盖了对应命令,以及 class 是否被正确绑定到用户。

运营商环境常见问题:RADIUS 服务器不可达时,若 authentication-order 只配了 radius 而没有 password 回退,所有远程登录会失败。务必保留本地回退账号,并确保回退账号的 class 权限足够完成紧急操作。

运维检查清单

  • 每个 login class 的 permissions 是否最小化,避免直接给 all。
  • deny-commands 是否覆盖了 reboot、halt、factory-default 等高风险命令。
  • 用户 uid 是否唯一且不与系统保留 uid 冲突。
  • authentication-order 是否包含本地回退,RADIUS 超时和重试参数是否合理。
  • 提交后用 show system login 和 show system login class 复核配置。
  • 定期审计 show log messages | match "login",确认无异常登录尝试。