Apache Fortress 3.0.1 常用 CLI 命令与工具详解
逐条实测 Fortress CLI 控制台五大命令组、选项对照表与完整 RBAC 工作流(建 OU、建用户、指派、授权、会话校验),含 -R/-n 映射错位等 10 个实测 FAQ
Apache Fortress 3.0.1 常用 CLI 命令与工具详解
一、命令行概览
Fortress 的管理入口是 org.apache.directory.fortress.core.cli.CommandLineInterpreter 交互控制台,直接驱动 fortress-core 的 AdminMgr/ReviewMgr/AccessMgr/DelAdminMgr/GroupMgr 五大管理器。本文环境:Ubuntu 22.04.5 / OpenJDK 17.0.20.1 / Symas OpenLDAP 2.5.20 / fortress-core 3.0.1(安装与初始化见安装篇)。
控制台交互模型:每行输入 = <命令组> <命令> [选项参数]。命令组共五个:
| 命令组 | 驱动管理器 | 职责 |
|---|---|---|
| admin | AdminMgr | 用户/角色/权限对象/授权关系管理(RBAC 核心) |
| review | ReviewMgr | 只读查询:用户、角色、权限及其关系 |
| system | AccessMgr 等 | 会话认证与授权校验(运行时) |
| dadmin | DelAdminMgr | 委托管理:AdminRole、组织单元、委托授权 |
| group | GroupMgr | 组管理 |
启动横幅实测:
2026-10-14 15:27:013 INFO CommandLineInterpreter:184 - CLI function groups include admin, review, system, dadmin, group
2026-10-14 15:27:013 INFO CommandLineInterpreter:186 - Enter one from above or 'q' to quit
输入 q 退出。任何命令执行成功打印 command:<cmd> was successful,失败打印 caught SecurityException rc=<错误码> 与消息。
二、启动方式
2.1 Maven 方式
cd /opt/src/fortress-core-3.0.1
mvn -Pcli test
2.2 独立 java 方式(免 Maven,推荐脚本化使用)
cd /opt/src/fortress-core-3.0.1
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
mvn -q dependency:build-classpath -Dmdep.outputFile=/work/cp.txt
java -cp "target/classes:config:$(cat /work/cp.txt)" \
org.apache.directory.fortress.core.cli.CommandLineInterpreter
实测启动日志(节选):
static init: loading from file:...
load config from bootstrap:...
LDAP POOL: registerCodecControls()
LDAP POOL: startup()
classpath 三要素:target/classes(主类)、config(fortress.properties/log4j2)、依赖 jar 列表文件。非交互用法:把命令行序列写进文件后 < 文件 重定向给控制台即可(本文全部实测均采用此法,控制台逐行处理后随 q 退出)。
三、选项参数对照表
命令行参数由 CmdLineParser 解析(GNU 风格短选项),常用选项字母实测整理:
| 选项 | 含义 | 适用命令示例 |
|---|---|---|
| -u | userId | auser/ruser/createsession |
| -p | password(回显时脱敏为 arg:) | auser/createsession |
| -V | 新口令 | 改口令类命令 |
| -o | 组织单元(OU 名) | auser/aobj |
| -n | 名称(用户名/角色名/对象名/OU 名) | arole/asgnrole/aobj/auou |
| -O | 操作名(perm operation) | aperm/grant/checkaccess |
| -d | 描述 | auser/arole/aobj |
| -R | 角色名(仅 grant/revoke/部分 review 用) | grant |
| -r | 角色列表(建用户时携带) | auser |
| -a | admin 角色列表 | dadmin 建用户 |
| -T | 类型 | 委托相关 |
| -c/-s | cn/sn | 用户扩展属性 |
| -b/-e | beginTime/endTime | 时间约束 |
| -B/-E | beginDate/endDate | 日期约束 |
| -l/-N | beginLockDate/endLockDate | 锁定区间 |
| -m | dayMask | 星期约束 |
| -t | timeout | 会话超时 |
重要易错点(实测踩坑):同名选项在不同命令组含义不同。-R 在 grant/revoke 中是角色名,但在 asgnrole 中不是——asgnrole 的角色名走 -n(内部 getRole() 经 updateTemporal 统一取 -n 的值)。用错时典型报错为 rc=5005 null entity。
四、实测 RBAC 工作流(admin/system/review/dadmin)
以下 10 条命令构成完整链路:建组织单元 → 建用户 → 建角色 → 指派 → 建权限对象/操作 → 授权 → 会话认证 → 访问校验 → 回查。全部命令逐条实测通过。
4.1 准备组织单元(dadmin 组)
dadmin auou -n APP1 -d "App One user org"
dadmin apou -n APP1 -d "App One perm org"
实测输出:
INFO CommandLineInterpreter:383 - auou
INFO CommandLineInterpreter:465 - command:auou was successful
INFO CommandLineInterpreter:423 - apou
INFO CommandLineInterpreter:465 - command:apou was successful
注意:auou/apou(用户 OU / 权限 OU)属于 dadmin 组而非 admin 组——admin 组里输入它们不会执行也不会报错(实测无任何输出的静默现象)。auser 的 -o 要求用户 OU 已存在(否则 rc=1035),aobj 的 -o 要求权限 OU 已存在(否则 rc=3025)。
4.2 建用户、建角色、指派(admin 组)
admin auser -u testuser1 -p testpwd1 -o APP1 -d "Test User One"
admin arole -n role1 -d "Test Role One"
admin asgnrole -u testuser1 -n role1
实测输出:
INFO CommandLineInterpreter:488 - auser
INFO CommandLineInterpreter:684 - command:auser was successful
INFO CommandLineInterpreter:684 - command:arole was successful
INFO CommandLineInterpreter:530 - asgnrole
INFO CommandLineInterpreter:684 - command:asgnrole was successful
LDAP 落地形态(ldapsearch 验证):用户条目 uid=testuser1,ou=People,…(含 -o 的 OU 标记),角色条目 cn=role1,ou=Roles,ou=RBAC,dc=example,dc=com。
4.3 权限对象、权限操作与授权(admin 组)
admin aobj -n Page1 -o APP1
admin aperm -n Page1 -O view -o APP1
admin grant -n Page1 -O view -o APP1 -R role1
实测输出:
INFO CommandLineInterpreter:560 - aobj
INFO CommandLineInterpreter:684 - command:aobj was successful
INFO CommandLineInterpreter:581 - aperm
INFO CommandLineInterpreter:684 - command:aperm was successful
INFO CommandLineInterpreter:602 - grant
INFO CommandLineInterpreter:684 - command:grant was successful
注意 grant 的三个要素:权限(-n 对象 -O 操作 -o OU)与角色(-R)。撤销用 revoke,参数同 grant。
4.4 会话认证与访问校验(system 组)
system createsession -u testuser1 -p testpwd1
system checkaccess -u testuser1 -p testpwd1 -n Page1 -O view -o APP1
实测输出(会话明细 + 校验结果):
INFO CommandLineInterpreter:1444 - S UID [testuser1]
INFO CommandLineInterpreter:1444 - S IID [d539ee77-7001-4bdd-8c61-35bc8ce124ae]
INFO CommandLineInterpreter:1444 - S ERR [0]
INFO CommandLineInterpreter:1444 - S AUTH [true]
INFO CommandLineInterpreter:1444 - S LAST [1791991633820]
INFO CommandLineInterpreter:1444 - S SID [d29e000a-2cbf-46f2-9a88-87bf54ae566f]
INFO CommandLineInterpreter:1444 - CA PERM [true]
INFO CommandLineInterpreter:902 - command:createsession was successful
INFO CommandLineInterpreter:902 - command:checkaccess was successful
createsession 打印会话明细(S 前缀行:认证结果 AUTH true、会话 ID SID);checkaccess 打印 CA 行——CA PERM [true] 表示 testuser1 通过 role1 获得对 Page1.view 的访问权,RBAC 授权链路闭环。
已知日志缺陷:createsession 分支的 LOG.info 打印的是 READ_USER 字面量(ruser),对排查有干扰,不影响功能。
4.5 回查(review 组)
review ruser -u testuser1
实测输出(节选):
INFO CommandLineInterpreter:1444 - U UID [testuser1]
INFO CommandLineInterpreter:1444 - U IID [d539ee77-7001-4bdd-8c61-35bc8ce124ae]
INFO CommandLineInterpreter:1444 - U CN [testuser1]
INFO CommandLineInterpreter:1444 - U DESC [Test User One]
INFO CommandLineInterpreter:1444 - U OU [APP1]
INFO CommandLineInterpreter:1444 - U SN [testuser1]
INFO CommandLineInterpreter:836 - command:ruser was successful
review 组常用命令:fuser(按 uid 查)、frole(按名查角色)、robj/rperm(查权限对象/操作)、ruser/rrole 及其集合型查询。输出均为「前缀 + 字段 + [值]」行格式,便于脚本 grep。
五、命令总表(按命令组)
以下命令名提取自 fortress-core 3.0.1 源码常量表(CommandLineInterpreter),带 ✓ 的为本文实测通过项:
| 组 | 命令 | 说明 |
|---|---|---|
| admin | auser ✓ / duser / muser | 建删改用户 |
| admin | arole ✓ / drole / mrole | 建删改角色 |
| admin | asgnrole ✓ / dsgnrole | 角色指派/去指派 |
| admin | aobj ✓ / uobj / dobj | 权限对象 |
| admin | aperm ✓ / uperm / dperm | 权限操作 |
| admin | grant ✓ / revoke | 授权/撤销 |
| admin | ar / ur / dr | 静态 SoD 集合 |
| admin | arel / urel / drel | 角色继承 |
| admin | arls / drls | 角色域 |
| dadmin | auou ✓ / uou / dou | 用户组织单元 |
| dadmin | apou ✓ / upou / dpou | 权限组织单元 |
| dadmin | aurel / aprel / urel / drel | 组织单元继承 |
| dadmin | aarole / darole / marole 等 | AdminRole 委托角色 |
| system | createsession ✓ / checkaccess ✓ | 会话与校验 |
| system | authenticate / sessionroles 等 | 认证与角色读取 |
| review | ruser ✓ / fuser / frole / robj / rperm 等 | 只读查询 |
| group | agroup / dgroup / guser 等 | 组管理 |
命令组内部的分派为 if-else 链,一一对齐 commands.contains(<cmd>);未匹配组报 unknown admin operation detected。
六、与 Maven 构建目标的配合
| 目标 | 作用 | 说明 |
|---|---|---|
| mvn -Pcli test | 启动 CLI 控制台 | 开发调试用 |
| mvn -Pconsole test | 启动 Web Command Console | 需浏览器环境 |
| mvn install -Dload.file=./ldap/setup/refreshLDAPData.xml | 重载演示 DIT | 会覆盖现有数据 |
| mvn -Dtest=FortressJUnitTest test | 196 秒集成测试 | 全量回归 RBAC/PAM/口令策略 |
| mvn -Pinit-slapd / -Pstart-slapd / -Pstop-slapd | slapd 生命周期 | 安装篇第五章 |
七、常见问题
7.1 命令输入后无任何输出
组名写错或该命令属于其他组(如 auou 在 dadmin)。对照第五章总表。
7.2 rc=5005 null entity
参数字母映射错位:asgnrole 用 -n 传角色名;grant 的角色名是 -R(4.3、三)。
7.3 rc=1035 / rc=3025 invalid orgUnit
auser/aobj 的 -o 指向的 OU 不存在。先 dadmin auou / apou 创建(4.1)。
7.4 rc=8018 OU 校验失败
同上,域校验(org.hier roots)未通过。确认 OU 已建且名称一致。
7.5 rc=3003 权限对象不存在
aperm/grant 之前忘了 aobj;或对象名/OU 名拼写不一致。
7.6 createsession 日志打出 ruser
已知的日志标签缺陷(createsession 分支误打 READ_USER),看其后 S 行与 command:createsession was successful 判断结果。
7.7 口令含特殊字符导致解析异常
控制台按 token 切分,口令用双引号包住:-p "p@ss word"。
7.8 连接 LDAP 失败 49/91
49:admin.pw 明文/散列混用(配置篇 8.1);91:slapd 未启动或 host/port 不符,ss -tlnp | grep 389 核对。
7.9 批量执行中断后状态不明
控制台每行独立提交,中断行之后的命令照常执行;重放脚本前可用 review 组查询当前状态再决定。
7.10 怎么查某个角色被授权了哪些权限
review 组 rperm/robj 按权限维度反查;或直接 ldapsearch ou=Perms 子树看 ftRA(角色授权属性)。
八、参考链接
| 资源 | 地址 |
|---|---|
| CLI 手册(官方) | fortress-core 源码包 README.md SECTION 11 |
| RBAC 概念 | https://directory.apache.org/fortress/ |
| 管理器 API 文档 | fortress-core gen-docs(AdminMgr/AccessMgr 等) |
| 错误码表 | fortress-core Constants 类 |