资讯动态

Kanidm 服务器配置与部署指南:server.toml 全参数解析、容器启动与管理员账户初始化

发布时间:2026/10/13 6:05:34 来源:尧图企业网站定制
后端认证鉴权安全【免费下载链接】kanidmKanidm: A simple, secure, and fast identity management platform项目地址https://gitcode.com/gh_mirrors/ka/kanidm点击查看免费下载Kanidm 是一个以简单、安全、快速为目标的身份管理平台。本文基于 book/src/server_configuration.md 编写围绕服务器实例的完整上线流程展开从server.toml的两种配置方式与每个参数的含义到用configtest校验配置、启动容器、使用NET_BIND_SERVICE能力绑定低端口再到初始化admin/idm_admin双管理员账户。读完本文你将掌握 Kanidm 服务器从零到可用的全部配置与运维要点并能结合源码理解每个配置项的底层行为。前置条件本文的docker run命令假定你已按照 评估快速上手 创建了名为kanidmd的 Docker 数据卷volume用于持久化/data目录中的数据库、TLS 证书和配置文件。若尚未完成请先阅读该文档其中包含拉取镜像、创建卷、kanidmd cert-generate生成评估证书等步骤。两种配置方式配置文件与环境变量Kanidm 服务器二进制名kanidmd支持两种并列的配置方式在数据卷中提供server.toml配置文件。容器内默认路径为/data/server.toml启动时服务器会自动加载它docker run -p 443:8443 -v kanidmd:/data kanidm/server:latest这类命令即依赖此默认路径。使用环境变量指定配置项。将配置项名称大写并加上KANIDM_前缀即可例如KANIDM_DOMAIN、KANIDM_ORIGIN、KANIDM_LOG_LEVEL。两种方式可以单独使用也可以混合使用环境变量的优先级高于配置文件中的同名选项。[!WARNING]domain、origin、tls_chain、tls_key四个选项是必须设置的无论用文件还是环境变量否则服务器无法启动从源码看这种“文件为底、环境变量覆盖”的机制是这样实现的proto/src/cli.rs 中定义了一个全局的KanidmdCli结构体每个字段都通过 clap 的env KANIDM_...属性绑定到对应环境变量例如KANIDM_DOMAIN、KANIDM_ORIGIN、KANIDM_DB_PATH、KANIDM_TLS_CHAIN、KANIDM_TLS_KEY、KANIDM_BINDADDRESS、KANIDM_LDAPBINDADDRESS、KANIDM_ONLINE_BACKUP_PATH等而 server/core/src/config.rs 中的ConfigurationBuilder::add_cli_config会把这些 CLI/环境变量值覆盖到最终配置上。配置合并的完整优先级为命令行参数 环境变量 server.toml 文件 内置默认值。完整选项说明可查阅你所用构建版本的kanidmd_core::config::ServerConfig的 rustdoc 文档本文仓库中对应 server/core/src/config.rs。另外配置文件路径本身也可以由KANIDM_CONFIG环境变量或-c参数指定见 server/daemon/src/opt.rs 中KanidmdParser的定义默认值为/data/server.toml。server.toml 参数逐项详解以下是官方提供的带注释示例配置完整文件见 examples/server_container.toml另有面向 Linux 原生部署的 examples/server.toml 可作为对照。# The server configuration file version. version 2 # The webserver bind address. Requires TLS certificates. # If the port is set to 443 you may require the # NET_BIND_SERVICE capability. This accepts a single address # or an array of addresses to listen on. # Defaults to 127.0.0.1:8443 bindaddress 0.0.0.0:8443 # # The read-only ldap server bind address. Requires # TLS certificates. If set to 636 you may require the # NET_BIND_SERVICE capability. This accepts a single address # or an array of addresses to listen on. # Defaults to (disabled) # ldapbindaddress 0.0.0.0:3636 # # The path to the kanidm database. db_path /data/kanidm.db # # If you have a known filesystem, kanidm can tune the # database page size to match. Valid choices are: # [zfs, other] # If you are unsure about this leave it as the default # (other). After changing this # value you must run a vacuum task. # - zfs: # * sets database pagesize to 64k. You must set # recordsize64k on the zfs filesystem. # - other: # * sets database pagesize to 4k, matching most # filesystems block sizes. # db_fs_type zfs # # The number of entries to store in the in-memory cache. # Minimum value is 256. If unset # an automatic heuristic is used to scale this. # You should only adjust this value if you experience # memory pressure on your system. # db_arc_size 2048 # # TLS chain and key in pem format. Both must be present. # If the server receives a SIGHUP, these files will be # re-read and reloaded if their content is valid. tls_chain /data/chain.pem tls_key /data/key.pem # The path where entry migrations will be read from. # This path should contain files that match the pattern # xx-name.json where xx are two number. For example: # 00-base.json # 10-groups.json # Migrations are applied in order. Migrations that fail # to apply, or have invalid syntax are skipped without # preventing server start up or reload. # migration_path /data/migrations.d # # The log level of the server. May be one of info, debug, trace # # NOTE: this can be overridden by the environment variable # KANIDM_LOG_LEVEL at runtime # Defaults to info # log_level info # # The DNS domain name of the server. This is used in a # number of security-critical contexts # such as webauthn, so it *must* match your DNS # hostname. It is used to create # security principal names such as williamidm.example.com # so that in a (future) trust configuration it is possible # to have unique Security Principal Names (spns) throughout # the topology. # # ⚠️ WARNING ⚠️ # # Changing this value WILL break many types of registered # credentials for accounts including but not limited to # webauthn, oauth tokens, and more. # If you change this value you *must* run # kanidmd domain rename immediately after. domain idm.example.com # # The origin for webauthn. This is the url to the server, # with the port included if it is non-standard (any port # except 443). This must match or be a descendent of the # domain name you configure above. If these two items are # not consistent, the server WILL refuse to start! # origin https://idm.example.com # # OR # origin https://idm.example.com:8443 origin https://idm.example.com # HTTPS requests can be reverse proxied by a loadbalancer. # To preserve the original IP of the caller, these systems # will often add a header such as Forwarded or # X-Forwarded-For. Some other proxies can use the PROXY # protocol v2 header. While we support the PROXY protocol # v1 header, we STRONGLY discourage its use as it has # significantly greater overheads compared to v2 during # processing. # This setting allows configuration of the list of trusted # IPs or IP ranges which can supply this header information, # and which format the information is provided in. # Defaults to none (no trusted sources) # Only one option can be used at a time. # [http_client_address_info] # proxy-v2 [127.0.0.1, 127.0.0.0/8] # # OR # [http_client_address_info] # x-forward-for [127.0.0.1, 127.0.0.0/8] # # OR # [http_client_address_info] # # AVOID IF POSSIBLE!!! # proxy-v1 [127.0.0.1, 127.0.0.0/8] # LDAPS requests can be reverse proxied by a loadbalancer. # To preserve the original IP of the caller, these systems # can add a header such as the PROXY protocol v2 header. # While we support the PROXY protocol v1 header, we STRONGLY # discourage its use as it has significantly greater # overheads compared to v2 during processing. # This setting allows configuration of the list of trusted # IPs or IP ranges which can supply this header information, # and which format the information is provided in. # Defaults to none (no trusted sources) # [ldap_client_address_info] # proxy-v2 [127.0.0.1, 127.0.0.0/8] # # OR # [ldap_client_address_info] # # AVOID IF POSSIBLE!!! # proxy-v1 [127.0.0.1, 127.0.0.0/8] [online_backup] # The path to the output folder for online backups path /data/kanidm/backups/ # The schedule to run online backups (see https://crontab.guru/) # every day at 22:00 UTC (default) schedule 00 22 * * * # four times a day at 3 minutes past the hour, every 6th hours # schedule 03 */6 * * * # We also support non standard cron syntax, with the following format: # sec min hour day of month month day of week year # (its very similar to the standard cron syntax, it just allows to specify the seconds # at the beginning and the year at the end) # Number of backups to keep (default 7) # versions 7核心参数速查表参数含义默认值是否必填version配置文件版本号当前为2缺失时按旧版legacy配置解析2推荐显式声明domainDNS 域名用于生成 Security Principal NameSPN如williamidm.example.com、WebAuthn 等安全关键上下文无必填origin面向用户的 HTTPS URL非 443 端口时需显式包含端口如https://idm.example.com:8443必须是domain本身或其子域否则服务器拒绝启动无必填tls_chain/tls_keyPEM 格式的 TLS 证书链与私钥路径两者必须同时存在收到 SIGHUP 时会在内容有效的情况下重新读取并热加载无必填bindaddressHTTPS 监听地址可写单个地址或地址数组如[[::]:443, 0.0.0.0:443]端口为 443 时可能需要NET_BIND_SERVICE127.0.0.1:8443否ldapbindaddress只读 LDAPS 监听地址同样支持数组不设置则禁用 LDAP禁用否db_pathKanidm 数据库文件路径无不设置时为内存库否db_fs_type数据库页大小调优zfs页大小 64k需在 ZFS 上设置recordsize64k或other页大小 4k修改后必须执行 vacuum才能生效other否db_arc_size内存缓存条目数最小 256不设置时按启发式自动伸缩仅在遇到内存压力时才建议手动调整自动否migration_path条目迁移文件目录文件需匹配xx-name.json两位数字前缀如00-base.json按顺序应用失败或语法无效的迁移会被跳过而不影响启动/重载无否log_level日志级别info、debug、trace可在运行时被KANIDM_LOG_LEVEL覆盖info否http_server_versions服务器提供的 HTTP 协议版本allHTTP/2 HTTP/1、1、2all否http_client_address_info/ldap_client_address_info反向代理场景下的客户端地址信息来源与可信 IP/CIDR 列表支持proxy-v2、x-forward-for、proxy-v1官方强烈不建议用proxy-v1处理开销显著大于 v2默认none无可信来源三者只能同时启用其一none否online_backup在线备份配置见下方小节默认启用否adminbindpath本地管理 socket 路径用于执行部分服务器控制任务按构建目标自动设置默认值构建期确定否thread_count异步工作线程池上限可用 CPU 核数否maximum_request_size_bytes最大请求体大小字节256 KiB否replication复制配置开发特性尚未达到生产就绪状态关闭否otel_grpc_endpointOpenTelemetry gRPC 收集器地址如localhost:4317不设置则关闭该特性关闭否关于version字段源码 server/core/src/config.rs 中的ServerConfigUntagged::new会先解析配置版本显式version 2走ServerConfigV2支持数组形式的绑定地址、http_client_address_info等新字段否则按旧版ServerConfig解析。因此新部署建议始终显式声明version 2。绑定地址的语义bindaddress默认是127.0.0.1:8443见 proto/src/constants.rs 中的DEFAULT_SERVER_ADDRESS只监听本机回环地址。要让外部设备访问必须改成0.0.0.0、[::]或具体网卡地址。若端口小于 1024如443、636在 Docker 内需要NET_BIND_SERVICE能力见下文。示例 examples/server.toml 展示了多地址数组写法例如同时监听 IPv6 与 IPv4bindaddress [[::]:443, 0.0.0.0:443]。源码中bindaddress与ldapbindaddress通过serde_as(as OptionOneOrMany_, PreferOne)解析见 server/core/src/config.rs 的ServerConfigV2因此单个字符串和数组两种写法都合法。domain 与 origin 的严格约束这是 Kanidm 配置里最容易出错、也最影响安全的两项一致性要求origin必须等于domain或为其子域两者不一致时服务器拒绝启动。安全关键上下文domain用于生成 SPN、绑定 WebAuthn 凭据、签发 OAuth2 token 等。修改domain会破坏已注册的 WebAuthn、OAuth token 等大量凭据因此必须立即执行kanidmd domain rename流程见 book/src/domain_rename.md先docker stop再改domain/origin执行kanidmd domain rename -c /data/server.toml最后启动。选域建议域名一经启用就很难更换选错还有凭据钓鱼、会话泄露等安全风险。更详尽的选域指南见 book/src/choosing_a_domain_name.md。反向代理场景的客户端地址当 HTTPS/LDAPS 请求经过负载均衡器反向代理时为保留调用方原始 IP可在http_client_address_info/ldap_client_address_info中声明受信任的来源 IP 或 CIDR 范围以及这些来源提供信息所用的格式proxy-v2PROXY 协议 v2 头推荐x-forward-forX-Forwarded-For头仅 HTTPS 支持proxy-v1PROXY 协议 v1 头尽量避免——处理开销显著高于 v2。三者在同一节中只能启用其一默认none表示没有任何受信任来源。源码 server/core/src/config.rs 中的HttpAddressInfo/LdapAddressInfo枚举对应上述取值并提供了 IP/CIDR 白名单匹配能力AddressSet::contains只有命中白名单的代理来源提供的头信息才会被采信。在线备份online_backup[online_backup]小节控制由kanidmd server进程在线定期执行的自动备份详见 book/src/backup_and_restore.md 的“Method 1 - Automatic Backup”path备份输出目录不设置时默认取db_path所在目录源码见 server/core/src/config.rsConfigurationBuilder::finish的兜底逻辑。schedulecron 表达式默认每日 22:00 UTC00 22 * * *。除标准 cron 语法外还支持扩展语法sec min hour day-of-month month day-of-week year秒在开头、年在末尾。例如1 2 3 5 12 * 2023表示仅在 2023 年 12 月 5 日 03:02:01 备份一次3 2 1 * * Mon *表示每个周一 03:02:01 备份。versions保留的备份版本数默认 7。compression压缩方式gzip默认或nocompression。注意examples/server_container.toml未启用compression而 examples/server.toml 中显式写了compression gzip默认值二者等价。校验配置configtest在正式启动前建议先用configtest子命令验证配置是否合法。该命令会加载配置但不启动网络监听适合在容器环境下快速检查。默认使用-c /data/server.toml即我们在 评估快速上手 中创建的kanidmd卷中的配置docker run --rm -i -t -v kanidmd:/data \ kanidm/server:latest /sbin/kanidmd configtest从源码看configtest是 server/daemon/src/opt.rs 中KanidmdOpt::ConfigTest定义的子命令“Test the IDM Server configuration, without starting network listeners”。配置加载与校验的核心逻辑位于 server/core/src/config.rs 的ServerConfigUntagged::new解析 TOML 并识别版本与ConfigurationBuilder::finish校验必填项。finish中会强制检查TLS 私钥与证书链必须同时存在、domain必须已设置、origin必须已设置任一缺失都会打印ERROR: ...并返回None这正是文档中“四个必填项缺失则服务器无法启动”的底层实现。启动服务器配置校验通过后即可启动容器对外提供服务。容器默认读取/data/server.tomldocker run -p 443:8443 -v kanidmd:/data kanidm/server:latest该命令将宿主机的 443 端口映射到容器内bindaddress所监听的 8443 端口。注意-p 443:8443是端口映射容器内的bindaddress端口保持 8443 即可若你想让容器直接占用宿主机的特权端口则属于下面的NET_BIND_SERVICE场景。使用 NET_BIND_SERVICE 能力如果你打算不使用 Docker 端口映射或反向代理而是让服务器进程直接绑定宿主机的低端口bindaddress或ldapbindaddress的端口小于1024如443/636就需要为容器附加NET_BIND_SERVICE能力docker run --cap-add NET_BIND_SERVICE \ --network [host OR macvlan OR ipvlan] \ -v kanidmd:/data \ kanidm/server:latest--cap-add NET_BIND_SERVICE授予容器绑定特权端口的能力--network host或macvlan/ipvlan让容器直接使用宿主网络端口映射不再适用。[!TIP] 无论你最终选择哪种方式启动服务器都应记录并妥善保存你所用的 docker run / docker create 命令。该命令在后续升级流程中会被再次使用升级步骤见 book/src/server_updates.md。更多启动后的运维命令容器镜像中kanidmd二进制提供了丰富的运维子命令定义见 server/daemon/src/opt.rs与配置直接相关的常见操作包括kanidmd database backup / restore手动备份与恢复见 book/src/backup_and_restore.mdkanidmd database vacuum回收未用页面并可在修改db_fs_type后真正变更数据库页大小kanidmd database reindex在添加自定义 schema 索引后强制重建索引触发日志通常形如Index EQUALITY name not foundkanidmd domain rename更换域后的必需步骤。初始化默认管理员账户服务器启动后需要初始化两个并行且职能分离的管理员账户账户职能admin管理 Kanidm 自身的系统配置域、TLS 等系统级设置idm_admin管理 Kanidm 中的账户与组人员、组等业务实体这两个账户应被视为“break-glass”应急破窗账户它们的存在是为了让服务器能够完成引导bootstrap并在紧急情况下提供访问入口不适合日常使用。日常管理请创建并使用普通账户。初始化方式是为每个账户生成新的随机密码。必须以与 kanidmd 进程相同的用户身份或 root 身份执行容器场景下即进入容器执行默认使用-c /data/server.tomldocker exec -i -t container name \ kanidmd recover-account admin # new_password: xjgG4...docker exec -i -t container name \ kanidmd recover-account idm_admin # new_password: 9Eux1...执行后命令行会输出新的随机密码如上注释所示请妥善保存。recover-account子命令的定义同样位于 server/daemon/src/opt.rs其核心逻辑由 server/core/src/admin.rs 的RecoverAccount管理任务实现——它会重置目标账户的凭据并生成新密码这也意味着它可以用于“恢复”被锁定的账户与此相对的是disable-account子命令可禁用账户且可用recover-account复位。拿到密码后即可按照 评估快速上手 的后续步骤安装客户端工具并登录kanidm login --name idm_admin开始创建你自己的账户与组。常见问题与排错要点服务器拒绝启动报 TLS/domain/origin 相关错误domain、origin、tls_chain、tls_key四项必须全部提供origin必须是domain或其后代子域。用kanidmd configtest可快速定位。外部设备无法访问确认bindaddress不是默认的127.0.0.1:8443需改为0.0.0.0/[::]等可外部访问的地址若走端口映射-p 443:8443容器内保持 8443 即可。低端口绑定失败Permission denied端口小于 1024 时需要--cap-add NET_BIND_SERVICE并配合--network host/macvlan/ipvlan。修改 domain 后凭据失效domain变更会破坏已注册的 WebAuthn、OAuth token 等凭据必须紧接着执行kanidmd domain rename并提前制定 WebAuthn 失效应对计划参见 book/src/domain_rename.md。内存压力可下调db_arc_size最小 256正常情况下建议保持自动伸缩。修改 db_fs_type 后未生效修改后必须执行kanidmd database vacuum才会应用新的页大小。总结本文完整走通了 Kanidm 服务器上线的主干流程通过server.toml或KANIDM_*环境变量两者可混用环境变量优先配置domain、origin、TLS 证书与监听地址用configtest在启动前校验配置以 Docker 容器方式启动服务并按需附加NET_BIND_SERVICE能力最后通过recover-account初始化admin与idm_admin两个应急管理员。文中每个参数的行为与必填约束均可追溯到 server/core/src/config.rs 的解析与校验实现。下一步可参考 book/src/administration.md 进行日常管理或阅读 book/src/backup_and_restore.md 配置自动备份以保障数据安全。赞分享后端认证鉴权安全【免费下载链接】kanidmKanidm: A simple, secure, and fast identity management platform项目地址https://gitcode.com/gh_mirrors/ka/kanidm点击查看免费下载相关推荐GaiaNet 节点部署实战指南安装、初始化、启动与配置管理GaiaNet 节点部署实战指南安装、初始化、启动与配置管理 本指南以仓库中的 README ar.md https://link.gitcode.com/iAI 应用大模型CLIRAGQuivr 的 Strapi CMS 实战cms/quivr 内容管理服务的启动、配置与容器化部署Quivr 的 Strapi CMS 实战cms/quivr 内容管理服务的启动、配置与容器化部署 本篇基于 Quivr 仓库中的 CMS 入门文档 http人工智能AI 应用大模型RAG后端前端终极Vim LSP配置指南轻松掌握初始化参数设置技巧终极Vim LSP配置指南轻松掌握初始化参数设置技巧 Vim galore是一款全面的Vim学习资源提供了从基础到高级的Vim使用技巧。其中LSP语言服文档教程开发工具上一篇Sonic架构深度剖析理解扩散模型在视频生成中的应用下一篇React DayPicker 的 PreviousMonthButton 组件源码解析与自定义导航按钮实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑