Apache Fortress 3.0.1 常用 CLI 命令与工具详解

逐条实测 Fortress CLI 控制台五大命令组、选项对照表与完整 RBAC 工作流(建 OU、建用户、指派、授权、会话校验),含 -R/-n 映射错位等 10 个实测 FAQ

Apache FortressFortressApache运维2026/10/14

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(安装与初始化见安装篇)。

控制台交互模型:每行输入 = <命令组> <命令> [选项参数]。命令组共五个:

命令组驱动管理器职责
adminAdminMgr用户/角色/权限对象/授权关系管理(RBAC 核心)
reviewReviewMgr只读查询:用户、角色、权限及其关系
systemAccessMgr 等会话认证与授权校验(运行时)
dadminDelAdminMgr委托管理:AdminRole、组织单元、委托授权
groupGroupMgr组管理

启动横幅实测:

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 风格短选项),常用选项字母实测整理:

选项含义适用命令示例
-uuserIdauser/ruser/createsession
-ppassword(回显时脱敏为 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
-aadmin 角色列表dadmin 建用户
-T类型委托相关
-c/-scn/sn用户扩展属性
-b/-ebeginTime/endTime时间约束
-B/-EbeginDate/endDate日期约束
-l/-NbeginLockDate/endLockDate锁定区间
-mdayMask星期约束
-ttimeout会话超时

重要易错点(实测踩坑):同名选项在不同命令组含义不同。-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),带 ✓ 的为本文实测通过项:

组命令说明
adminauser ✓ / duser / muser建删改用户
adminarole ✓ / drole / mrole建删改角色
adminasgnrole ✓ / dsgnrole角色指派/去指派
adminaobj ✓ / uobj / dobj权限对象
adminaperm ✓ / uperm / dperm权限操作
admingrant ✓ / revoke授权/撤销
adminar / ur / dr静态 SoD 集合
adminarel / urel / drel角色继承
adminarls / drls角色域
dadminauou ✓ / uou / dou用户组织单元
dadminapou ✓ / upou / dpou权限组织单元
dadminaurel / aprel / urel / drel组织单元继承
dadminaarole / darole / marole 等AdminRole 委托角色
systemcreatesession ✓ / checkaccess ✓会话与校验
systemauthenticate / sessionroles 等认证与角色读取
reviewruser ✓ / fuser / frole / robj / rperm 等只读查询
groupagroup / 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 test196 秒集成测试全量回归 RBAC/PAM/口令策略
mvn -Pinit-slapd / -Pstart-slapd / -Pstop-slapdslapd 生命周期安装篇第五章

七、常见问题

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 类