Ubuntu 22.04 安装 Apache Kerby 2.1.2 指南
在 Ubuntu 22.04 上通过官方源码包构建并安装 Apache Kerby 2.1.2 嵌入式 KDC 的完整实测指南,含 SHA512 校验、阿里云镜像加速与 kinit 认证验证。
Ubuntu 22.04 安装 Apache Kerby 2.1.2 指南
目标:在 Ubuntu 22.04 服务器上从官方源码发行包构建、安装 Apache Kerby 2.1.2,启动嵌入式 KDC 并完成 kinit/klist 认证验证。已在 Ubuntu 22.04(OpenJDK 17)实测通过。
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS |
| 系统架构 | x86_64(amd64) |
| JDK | OpenJDK 17.0.20.1(apt 安装 openjdk-17-jdk-headless) |
| Maven | Apache Maven 3.9.16(官方二进制包,apt 源内 3.6.3 不满足要求) |
| 组件版本 | Apache Kerby 2.1.2(kerby-all-2.1.2-source-release.zip) |
| 源码目录 | /opt/kerby/kerby-all-2.1.2 |
| 安装目录 | /opt/kerby/kdc-dist-2.1.2、/opt/kerby/tool-dist-2.1.2 |
| 后端数据目录 | /tmp/kerby/jsonbackend(JsonIdentityBackend) |
| 配置文件目录 | /opt/kerby/kdc-dist-2.1.2/conf |
表后逐项说明:操作系统使用 Ubuntu 22.04.5 LTS 服务器版;Kerby 2.1.2 的运行时仅依赖 JDK,构建期额外需要 Maven 3.9 及以上;kdc-dist 是 KDC 服务端发行目录,tool-dist 是 kinit/klist 客户端工具发行目录;JsonIdentityBackend 把主体身份以 JSON 文件落盘,本例放在 /tmp/kerby/jsonbackend;conf 目录下有 kdc.conf、backend.conf、krb5.conf 三份核心配置。
二、前置条件
2.1 系统要求
- CPU/内存:1 核 2GB 起步即可,KDC 进程实测限制堆内存为 256MB(-Xms256m -Xmx256m)。
- 磁盘:源码包约 2.2MB,Maven 本地仓库依赖约 500MB,预留 2GB 空间。
- 网络:构建期需要访问 Maven 仓库,建议配置阿里云镜像加速。
- 权限:KDC 默认监听 88 端口,属于系统保留端口,需要 root 权限运行(或改用非特权端口,见 FAQ)。
2.2 安装 OpenJDK 17
apt-get update
apt-get install -y openjdk-17-jdk-headless
java -version
实测回显:
openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-22.04-Ubuntu, mixed mode, sharing)
验证要点:java -version 输出 17 开头即满足 Kerby 2.1.2 的最低要求(官方 BUILDING.txt 写明 JDK 1.8+,但 2.1.2 的 Maven enforcer 插件同时要求 Maven 3.9+,建议直接使用较新的 JDK 17 组合)。
2.3 安装基础工具
apt-get install -y curl wget unzip
实测回显(节选):
Setting up unzip (6.0-26ubuntu3.2) ...
验证要点:curl 用于下载发行包,unzip 用于解压源码 zip 包,两者均来自 Ubuntu 官方仓库。
三、版本选型与发行形态
3.1 官方发行渠道与文件清单
Apache Kerby 的官方下载页为 https://directory.apache.org/kerby/download.html,2.1.2 的实际发行目录是 https://dlcdn.apache.org/directory/kerby/dist/2.1.2/。查看该目录:
curl -s https://dlcdn.apache.org/directory/kerby/dist/2.1.2/ | grep -oE 'href="[a-zA-Z0-9._-]+"'
实测回显:
href="kerby-all-2.1.2-source-release.zip"
href="kerby-all-2.1.2-source-release.zip.asc"
href="kerby-all-2.1.2-source-release.zip.sha512"
逐项说明:2.1.2 官方只发布源码发行包(source-release.zip)及其 GPG 签名(.asc)与 SHA512 校验(.sha512),没有预编译的二进制 tar.gz,因此必须自行执行一次 Maven 构建;.asc 用于 GPG 验签,.sha512 用于完整性校验。
💡 技术拓展:同为 Apache 出品,MIT Kerberos 是 C 语言实现、apt 直接
apt-get install krb5-kdc即装即用;Apache Kerby 是纯 Java 实现,强调嵌入式与可编程(把 KDC 嵌进任意 Java 进程做集成测试)。选 Kerby 的典型理由是:无需编译 C 依赖、可调用 Java API 动态建主体、后端可插拔(JSON/MySQL/LDAP/ZooKeeper)。本文选择 Kerby 2.1.2 源码构建路线。
3.2 版本选择依据
- 2.1.2 是当前 Apache Directory Kerby 的最新稳定版(2026-05 发布),官方页面明确推荐使用最新版。
- 构建要求(摘自源码包内 BUILDING.txt):JDK 1.8+、Maven 3.2.0+;但工程根 pom 的 enforcer 规则实际要求 Maven 版本在 [3.9,) 区间,旧版 Maven 会在构建一开始报错。
- 安全要求:2.1.1 及以前版本存在已公告的安全修复,生产环境应直接选 2.1.2。
四、方案一(推荐):官方源码包构建安装
4.1 下载与 SHA512 校验
mkdir -p /opt/dl
cd /opt/dl
curl -sO https://dlcdn.apache.org/directory/kerby/dist/2.1.2/kerby-all-2.1.2-source-release.zip
curl -sO https://dlcdn.apache.org/directory/kerby/dist/2.1.2/kerby-all-2.1.2-source-release.zip.sha512
ls -l
实测回显:
total 2212
-rw-r--r-- 1 root root 2257435 Oct 14 16:46 kerby-all-2.1.2-source-release.zip
-rw-r--r-- 1 root root 128 Oct 14 16:46 kerby-all-2.1.2-source-release.zip.sha512
说明:zip 包 2257435 字节(约 2.2MB),sha512 校验文件 128 字节。
官方 .sha512 文件里只有一行哈希值、没有文件名,直接 sha512sum -c 会报格式错误,需要手工拼一行再校验:
echo "$(cat kerby-all-2.1.2-source-release.zip.sha512) kerby-all-2.1.2-source-release.zip" | sha512sum -c
实测回显:
kerby-all-2.1.2-source-release.zip: OK
验证要点:输出 OK 才能进入下一步;若输出 FAILED 说明下载不完整,需要重新下载。
4.2 解压源码包
unzip -q kerby-all-2.1.2-source-release.zip -d /opt/kerby
ls /opt/kerby/kerby-all-2.1.2
实测回显:
AGENTS.md
BUILDING.txt
DEPENDENCIES
LICENSE
NOTICE
README.md
SECURITY.md
benchmark
bom
build-tools
docs
kerby-backend
kerby-common
kerby-dist
kerby-kdc
kerby-kdc-test
kerby-kerb
kerby-pkix
kerby-provider
kerby-tool
parent
pom.xml
逐项说明:pom.xml 是聚合构建入口;kerby-dist 存放 kdc-dist 与 tool-dist 两个发行模块的打包配置;kerby-kdc 是 KDC 服务端实现;kerby-tool 是 kadmin/kinit/klist 等命令行工具;kerby-backend 是身份后端插件集合。
4.3 配置 Maven 与阿里云镜像
Ubuntu 22.04 的 apt 源里 Maven 是 3.6.3,不满足 enforcer 的 [3.9,) 要求,需要安装官方 3.9.x 二进制包:
cd /opt/dl
curl -sO https://dlcdn.apache.org/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz
tar xzf apache-maven-3.9.16-bin.tar.gz -C /opt
/opt/apache-maven-3.9.16/bin/mvn -version
实测回显:
Apache Maven 3.9.16 (2bdd9fddda4b155ebf8000e807eb73fd829a51d5)
Maven home: /opt/apache-maven-3.9.16
写入阿里云镜像配置,加速首次构建时的依赖下载:
mkdir -p /root/.m2
cat > /root/.m2/settings.xml <<'CONF'
<settings>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
CONF
cat /root/.m2/settings.xml
实测回显:
<settings>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
逐项说明:mirrorOf=central 表示所有对中央仓库的请求都转发到阿里云;settings.xml 放在 /root/.m2/ 下只对 root 用户生效;该镜像同时代理 central 与 jcenter 的 artifact。
4.4 构建发行包
在源码顶层目录执行构建,跳过测试与代码检查以缩短时间:
export PATH=/opt/apache-maven-3.9.16/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
cd /opt/kerby/kerby-all-2.1.2
mvn package -Pdist -Pnochecks -DskipTests
实测回显(输出节选,实测首尾):
[INFO] Scanning for projects...
[INFO] ---------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] Kerby ASN1 Project [jar]
[INFO] Kerby core [jar]
...
[INFO] Kerby Distribution [pom]
[INFO] KDC Dist [pom]
[INFO] Tool Dist [pom]
...
[INFO] Kerberos crypto [jar]
[INFO] BUILD SUCCESS
[INFO] Total time: 04:27 min
逐项说明:-Pdist 打开发行包 profile,产出 kdc-dist 与 tool-dist 两个 tar.gz/zip;-Pnochecks 跳过 checkstyle/PMD 检查;-DskipTests 跳过测试;首次构建需要下载全部依赖,实测总耗时 4 分 27 秒(配置阿里云镜像后)。
查看构建产物:
ls /opt/kerby/kerby-all-2.1.2/kerby-dist/kdc-dist/target/ | grep -E 'tar.gz|zip'
ls /opt/kerby/kerby-all-2.1.2/kerby-dist/tool-dist/target/ | grep -E 'tar.gz|zip'
实测回显:
kdc-dist-2.1.2.tar
kdc-dist-2.1.2.tar.gz
kdc-dist-2.1.2.zip
tool-dist-2.1.2.tar
tool-dist-2.1.2.tar.gz
tool-dist-2.1.2.zip
4.5 部署 kdc-dist 与 tool-dist
cd /opt/kerby
tar xzf kerby-all-2.1.2/kerby-dist/kdc-dist/target/kdc-dist-2.1.2.tar.gz
tar xzf kerby-all-2.1.2/kerby-dist/tool-dist/target/tool-dist-2.1.2.tar.gz
ls -d /opt/kerby/kdc-dist-2.1.2 /opt/kerby/tool-dist-2.1.2
ls /opt/kerby/kdc-dist-2.1.2
实测回显:
/opt/kerby/kdc-dist-2.1.2
/opt/kerby/tool-dist-2.1.2
LICENSE
NOTICE
README.txt
bin
conf
lib
licenses
log4j.properties
逐项说明:bin 目录放启动脚本(start-kdc.sh、kdcinit.sh、kadmin.sh 等);conf 放 kdc.conf/backend.conf/krb5.conf;lib 内有 40 个依赖 jar(含全部 kerby 模块与第三方库);tool-dist 的 bin 内是 kinit.sh/klist.sh/kinitConcurrent.sh 客户端工具。
4.6 修正脚本 classpath
发行包内的 bin 脚本把 classpath 写死为 target/lib/*(面向源码树执行的习惯),在解压后的目录里没有 target 目录,直接运行会找不到主类。为保持脚本原样不动,创建一个指向自身的 target 符号链接即可让 target/lib 等价于 lib:
ln -s . /opt/kerby/kdc-dist-2.1.2/target
ln -s . /opt/kerby/tool-dist-2.1.2/target
验证链接生效:
ls /opt/kerby/kdc-dist-2.1.2/target/lib/ | head -3
实测回显:
commons-io-2.22.0.jar
error_prone_annotations-2.48.0.jar
gson-2.14.0.jar
说明:如果不想建符号链接,也可以用 sed 把脚本里的 target/lib/* 替换为 lib/*,两种做法等价。
4.7 初始化 KDC 后端
首次启动前必须运行 kdcinit 工具,它会在后端创建内置主体(kadmin、krbtgt、adminprotocol 等)并导出两个管理 keytab:
mkdir -p /tmp/kerby/jsonbackend
cd /opt/kerby/kdc-dist-2.1.2
java -classpath "lib/*:." org.apache.kerby.kerberos.tool.kdcinit.KdcInitTool conf keytab
实测回显:
Usage: sh bin/kdcinit.sh <conf-dir> <keytab-dir>
This tool initializes KDC backend and should only be performed the first time,
and the output keytabs should be carefully kept to administrate/kadmin KDC later.
Example:
sh bin/kdcinit.sh conf keytabfolder
The keytab for kadmin principal has been exported to the specified file /opt/kerby/kdc-dist-2.1.2/keytab/admin.keytab, please keep it safe, in order to use kadmin tool later
The keytab for protocol principal has been exported to the specified file /opt/kerby/kdc-dist-2.1.2/keytab/protocol.keytab, please keep it safe, in order to use remote kadmin tool later
Finished initializing the KDC backend
验证初始化产物:
ls -l /opt/kerby/kdc-dist-2.1.2/keytab/
ls /tmp/kerby/jsonbackend/
实测回显:
-rw-r--r-- 1 root root 148 Oct 14 17:09 admin.keytab
-rw-r--r-- 1 root root 158 Oct 14 17:09 protocol.keytab
json-backend.json
逐项说明:admin.keytab 用于 kadmin 管理工具认证;protocol.keytab 用于远程 kadmin 客户端;json-backend.json 是 JsonIdentityBackend 的落盘文件,保存全部主体的密钥信息(AES128_CTS_HMAC_SHA1_96 等)。
4.8 启动 KDC
为便于运维,本例直接用 java 命令启动主类(与 start-kdc.sh 内部等价,但显式限定堆内存):
cd /opt/kerby/kdc-dist-2.1.2
mkdir -p runtime
nohup java -Xms256m -Xmx256m -classpath "lib/*:." -DKERBY_LOGFILE=kdc org.apache.kerby.kerberos.kdc.KerbyKdcServer -start conf runtime > /tmp/kdc.log 2>&1 &
sleep 10
cat /tmp/kdc.log
实测回显:
KDC started.
验证进程与堆参数(jps -v):
jps -v
实测回显:
5721 KerbyKdcServer -Xms256m -Xmx256m -DKERBY_LOGFILE=kdc
验证 88 端口监听:
python3 -c "import socket;s=socket.socket();print('tcp88_connect',s.connect_ex(('127.0.0.1',88)));s.close()"
实测回显:
tcp88_connect 0
逐项说明:connect_ex 返回 0 表示 88 端口已监听(KDC 同时监听 TCP/UDP 88);-start 后跟两个参数,第一个是配置目录 conf,第二个是工作目录 runtime(必须已存在,否则启动报错,见 FAQ);-DKERBY_LOGFILE=kdc 指定日志文件名前缀。
4.9 创建测试账号并完成认证验证
用 admin keytab 进入 kadmin 管理界面,创建测试账号 root(密码 q1w2e3r4):
cd /opt/kerby/kdc-dist-2.1.2
printf "addprinc -pw q1w2e3r4 root@EXAMPLE.COM
listprincs
quit
" | LC_ALL=C.UTF-8 java -classpath "lib/*:." org.apache.kerby.kerberos.tool.kadmin.KadminTool conf -k keytab/admin.keytab
实测回显(节选):
KadminTool.local: Principal "root@EXAMPLE.COM" created.
KadminTool.local: Principals are listed:
admin@EXAMPLE.COM
adminprotocol/localhost@EXAMPLE.COM
host/localhost@EXAMPLE.COM
kadmin/EXAMPLE.COM@EXAMPLE.COM
krbtgt/EXAMPLE.COM@EXAMPLE.COM
root@EXAMPLE.COM
说明:kadmin 工具通过 keytab 以 kadmin/EXAMPLE.COM@EXAMPLE.COM 身份登录本地后端;addprinc -pw 直接指定密码;listprincs 列出后端全部主体,内置的 krbtgt/kadmin/adminprotocol 与新建的 root/admin 并列。
到客户端工具目录,用 kinit 申请 TGT 并用 klist 查看票据:
cd /opt/kerby/tool-dist-2.1.2
echo "q1w2e3r4" | LC_ALL=C.UTF-8 java -classpath "lib/*:." org.apache.kerby.kerberos.tool.kinit.KinitTool -conf /opt/kerby/kdc-dist-2.1.2/conf root@EXAMPLE.COM
实测回显:
Password for root@EXAMPLE.COM:
Successfully requested and stored ticket in /tmp/krb5cc_0
LC_ALL=C.UTF-8 java -classpath "lib/*:." org.apache.kerby.kerberos.tool.klist.KlistTool -conf /opt/kerby/kdc-dist-2.1.2/conf
实测回显:
Ticket cache: /tmp/krb5cc_0
Default principal: root@EXAMPLE.COM
Valid starting Expires Service principal
1970-01-01 00:00:00 2026-10-15 17:15:42 krbtgt/EXAMPLE.COM@EXAMPLE.COM
renew until 2026-10-16 17:15:42
逐项说明:kinit 成功后票据缓存写入 /tmp/krb5cc_0;klist 显示默认主体 root@EXAMPLE.COM 与 TGT(krbtgt/EXAMPLE.COM@EXAMPLE.COM);Valid starting 列显示 1970 是 Kerby klist 工具对票据内起始时间为 0(立即生效)的展示方式,过期时间与续期时间均正常;TGT 默认有效期 24 小时(2026-10-15 17:15 到 2026-10-16 17:15)。
五、方案二(备用):依赖 jar 组装最小运行环境
5.1 思路说明
若目标是得到一个"纯运行时"部署包(不带源码、不带 Maven),可以跳过整包构建,只把 kdc-dist 模块声明的全部依赖 jar 从 Maven 仓库复制到一个目录,再复用 conf 配置即可启动 KDC。该方案与方案一产出的 lib 完全等价,只是获取 jar 的路径不同。
5.2 拉取全量依赖
在源码树的 kdc-dist 模块目录执行 copy-dependencies(依赖已在方案一的本地仓库中,若从未构建过则会联网下载):
export PATH=/opt/apache-maven-3.9.16/bin:$PATH
cd /opt/kerby/kerby-all-2.1.2/kerby-dist/kdc-dist
mvn -q dependency:copy-dependencies -DoutputDirectory=/opt/kerby/kdc-lib
ls /opt/kerby/kdc-lib | wc -l
实测回显:
40
说明:共复制 40 个 jar 到 /opt/kerby/kdc-lib,数量与 kdc-dist-2.1.2/lib 内的 jar 一致。
5.3 组装与启动验证
新建最小部署目录,仅包含 conf、keytab 与依赖 jar:
mkdir -p /opt/kerby/kdc-minimal
cp -r /opt/kerby/kdc-dist-2.1.2/conf /opt/kerby/kdc-dist-2.1.2/keytab /opt/kerby/kdc-minimal/
mkdir -p /opt/kerby/kdc-minimal/runtime
cd /opt/kerby/kdc-minimal
nohup java -Xms256m -Xmx256m -classpath "/opt/kerby/kdc-lib/*:." org.apache.kerby.kerberos.kdc.KerbyKdcServer -start conf runtime > /tmp/kdc-min.log 2>&1 &
sleep 10
cat /tmp/kdc-min.log
jps -v
实测回显:
log4j:WARN No appenders could be found for logger (org.apache.kerby.kerberos.kerb.identity.backend.AbstractIdentityBackend).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
KDC started.
6869 KerbyKdcServer -Xms256m -Xmx256m
逐项说明:最小目录下没有 log4j.properties,启动时会出现三条 log4j 警告(属预期,不影响服务),需要日志时把 kdc-dist-2.1.2/log4j.properties 一并复制过去;KDC started. 与 jps 显示的 -Xms256m -Xmx256m 证明服务正常。验证端口:
python3 -c "import socket;s=socket.socket();print('tcp88_connect',s.connect_ex(('127.0.0.1',88)));s.close()"
实测回显:
tcp88_connect 0
六、方案对比
| 对比项 | 方案一:源码包完整构建 | 方案二:依赖 jar 组装 |
|---|---|---|
| 前置条件 | JDK 17 + Maven 3.9 + 阿里云镜像 | JDK 17 + Maven(或已构建过的本地仓库) |
| 产物完整性 | kdc-dist + tool-dist 全套脚本/配置/lib | 仅依赖 jar,需自行拼 conf 与启动命令 |
| 构建耗时 | 实测 4 分 27 秒(含依赖下载) | copy-dependencies 秒级(仓库已热) |
| 可维护性 | 高,脚本齐全,升级重跑 mvn 即可 | 中,jar 清单需人工维护 |
| 适用场景 | 标准服务器部署、长期运行 | CI 流水线、集成测试、最小化分发 |
表后逐项说明:生产环境优先选方案一,脚本与文档齐全;方案二适合把 KDC 嵌入测试流程或制作精简镜像,但需要自行管理 log4j.properties 与 keytab。
七、常见问题(FAQ)
Q1:构建时报 Detected Maven Version: 3.6.3 is not in the allowed range [3.9,) 怎么办? A:Kerby 2.1.2 根 pom 的 enforcer 规则要求 Maven 3.9 以上,Ubuntu 22.04 apt 源的 maven 只有 3.6.3。下载官方 3.9.x 二进制包解压到 /opt/apache-maven-3.9.16,再 export PATH=/opt/apache-maven-3.9.16/bin:$PATH 后重新构建即可(实测 3.9.16 通过)。
Q2:运行 bin/start-kdc.sh 报 No matches found 或 Usage: sh bin/start-kdc.sh <conf-dir> <working-dir>? A:start-kdc.sh 的参数格式是"配置目录 + 工作目录"两个参数,例如 sh bin/start-kdc.sh conf runtime。不传参数或只传一个都会打印 Usage 退出。
Q3:启动报 The work-dir is invalid or does not exist? A:第二个参数指定的工作目录必须真实存在。先 mkdir -p runtime 再启动。
Q4:启动报 The built-in principals do not exist in the backend, please run the kdcinit tool? A:说明后端是空库。Kerby 不在启动时自动创建内置主体,必须先执行一次 kdcinit(java -classpath "lib/*:." org.apache.kerby.kerberos.tool.kdcinit.KdcInitTool conf keytab),它创建 kadmin/krbtgt 等内置主体并导出管理 keytab,之后正常启动即可。kdcinit 只需执行一次。
Q5:kdcinit 生成的 admin.keytab 和 protocol.keytab 有什么用,丢了怎么办? A:admin.keytab 是 kadmin 工具登录后端用的管理凭证,protocol.keytab 是远程 kadmin 协议凭证。丢失后无法以管理身份操作主体,只能清空后端目录(backend.conf 里 backend.json.dir 指向的路径)重新 kdcinit,因此这两个文件务必备份。
Q6:88 端口被占用或者没有 root 权限绑定 88? A:修改 /opt/kerby/kdc-dist-2.1.2/conf/kdc.conf 里的 kdc_tcp_port 与 kdc_udp_port(例如 1088),同时把 conf/krb5.conf 中 realms 段的 kdc = localhost:88 改成 kdc = localhost:1088,重启 KDC 后 kinit 即走新端口。实测:改 1088 重启后 tcp88 连接被拒绝(connect_ex 返回 111)、tcp1088 连接成功(返回 0),kinit 正常出票。
Q7:kinit 输出中文乱码或问号? A:KDC 相关工具都用 java 直接启动,stdout 编码跟随 locale。非交互管道下 JVM 用 ASCII 输出,日志中文会变问号。给 java 命令前加环境变量 LC_ALL=C.UTF-8 LANG=C.UTF-8 即可(实测解决)。
Q8:kinit 在脚本里如何免交互输密码? A:KinitTool 支持从 stdin 读密码(无 TTY 时退化为 Scanner),用管道传入即可:echo "q1w2e3r4" | java -classpath "lib/*:." org.apache.kerby.kerberos.tool.kinit.KinitTool -conf /opt/kerby/kdc-dist-2.1.2/conf root@EXAMPLE.COM。无管道输入时会抛 java.util.NoSuchElementException: No line found。
Q9:sha512sum -c 提示 no properly formatted SHA512 checksum lines found? A:官方 .sha512 文件只有 128 字节的哈希串,没有"哈希 文件名"两列格式。在下载目录执行 echo "$(cat kerby-all-2.1.2-source-release.zip.sha512) kerby-all-2.1.2-source-release.zip" | sha512sum -c 拼接后校验(注意哈希与文件名之间两个空格),实测回显 OK。
Q10:KDC 进程内存占用怎么限制? A:KerbyKdcServer 是普通 java 进程,启动命令中直接加 -Xms256m -Xmx256m。用 jps -v 验证,实测回显中进程行会带上这两个参数:5721 KerbyKdcServer -Xms256m -Xmx256m -DKERBY_LOGFILE=kdc。
八、卸载与清理
PID=$(jps | awk '/KerbyKdcServer/ {print $1}')
[ -n "$PID" ] && kill "$PID"
rm -rf /opt/kerby/kdc-dist-2.1.2 /opt/kerby/tool-dist-2.1.2 /opt/kerby/kdc-lib /opt/kerby/kdc-minimal
rm -rf /opt/kerby/kerby-all-2.1.2
rm -rf /opt/dl/kerby-all-2.1.2-source-release.zip /opt/dl/kerby-all-2.1.2-source-release.zip.sha512
rm -rf /tmp/kerby /tmp/krb5cc_0 /tmp/kdc.log /tmp/kdc2.log /tmp/kdc-min.log
说明:先停止 KDC 进程再删除目录;/tmp/kerby 下的 json-backend.json 保存了全部主体密钥,若还要保留账号数据请先备份;若不再用 Maven 构建,可一并删除 /root/.m2/repository 与 /opt/apache-maven-3.9.16。
九、参考链接
- Apache Kerby 官方主页:https://directory.apache.org/kerby/
- Kerby 下载页:https://directory.apache.org/kerby/download.html
- 2.1.2 发行目录(源码包与校验文件):https://dlcdn.apache.org/directory/kerby/dist/2.1.2/
- Apache Kerby GitHub 仓库:https://github.com/apache/directory-kerby
- Maven Central 上的 Kerby 构件:https://repo.maven.apache.org/maven2/org/apache/directory/kerby/
- Maven 3.9.16 官方下载:https://dlcdn.apache.org/maven/maven-3/3.9.16/binaries/
- OpenJDK 17(Ubuntu 官方源):https://packages.ubuntu.com/jammy/openjdk-17-jdk-headless
- 阿里云 Maven 镜像说明:https://maven.aliyun.com/repository/public