Minarca Server 6.2 配置参数详解

面向 Minarca Server 6.2.5 与 Minarca Client 7.2.0 的配置参数实操手册:服务端覆盖配置文件与 conf.d 分片语法、环境变量与命令行四层来源及优先级、监听端口、日志级别、会话与登录限流、口令强度策略、品牌本地化、邮件通知、仓库维护与配额、SSH 备份通道等参数的改值→重启→验证→还原全过程实测;客户端覆盖 minarcaN.properties 全部键、patternsN 包含/排除语法、调度与暂停机制及 crontab 联动。含未知参数排障与口令表单排障实录。

Minarca备份恢复Minarca2026/10/22

Minarca Server 6.2 配置参数详解

目标:把 Minarca 服务端(minarca-server 6.2.5)与客户端(minarca-client 7.2.0-1)的配置参数讲透——每个关键参数都给出查看方式、默认值、修改方法,并按「改值 → 重启 → 观察效果 → 还原」的流程在真实环境逐项实测。安装部署步骤见 《Ubuntu 22.04 安装 Minarca 指南(服务端与客户端)》,产品定位与选型背景见 《Minarca 介绍与选型指南》。日常命令操作见 《Minarca 7.2 常用 CLI 命令与工具详解》。

一、环境信息

本文沿用安装篇的「1 台服务端 + 1 台客户端」双机拓扑:

角色主机名操作系统软件版本
备份服务器minarca-serverUbuntu 22.04.5 LTSminarca-server 6.2.5
被备份主机client02Ubuntu 22.04.5 LTSminarca-client 7.2.0-1

服务端版本实测:

minarca-server --version
minarca-server 6.2.5
dpkg -l minarca-server | tail -1
ii  minarca-server 6.2.5        amd64        Minarca is a self-hosted open source data backup software that allows you to manage your computer and server backups for free from a direct online accessible centralized view of your data with easy retrieval in case of displacement, loss or breakage.

客户端版本实测(在 client02 上执行,下同):

minarca -v
minarca 7.2.0

服务端由 systemd 托管(单元名 minarca-server,服务用户 minarca),客户端没有常驻服务进程,靠 crontab 定时触发。这一差异决定了两者的配置生效方式:服务端改配置要重启服务,客户端改配置即时生效。

二、前置条件

  1. 已按安装篇完成双角色部署:服务端可访问(监听 8080)、客户端已关联服务器并完成过备份。
  2. 已知 Web 管理员账号。本文示例沿用安装篇的 admin / admin123(官方文档明示的初始口令,生产环境务必修改,见 5.5 节口令策略)。
  3. 服务端健康检查基线(本节命令在服务端执行):
systemctl is-active minarca-server
active
ss -ltn | grep 8080
LISTEN 0      5            0.0.0.0:8080       0.0.0.0:*
  1. 管理员凭据可用性检查(通过 RESTful API 验证,返回 JSON 即表示账号可用、仓库在线):
curl -s -u admin:admin123 http://127.0.0.1:8080/api/currentuser/
{"id": 1, "username": "admin", "fullname": "", "email": "admin@ops.example.com", "disk_usage": 383149789184, "disk_quota": 843834499072, "lang": "", "mfa": "", "role": 0, "report_time_range": 0, "repos": [{"name": "client01", "maxage": 0, "keepdays": -1, "ignore_weekday": [], "display_name": "client01", "last_backup_date": "2026-10-21T18:07:38Z", "status": "ok", "encoding": "utf-8"}, {"name": "client02", "maxage": 0, "keepdays": -1, "ignore_weekday": [], "display_name": "client02", "last_backup_date": "2026-10-22T05:51:16Z", "status": "ok", "encoding": "utf-8"}]}

解读:disk_quota 为该用户配额(字节),disk_usage 为已用空间;repos 数组列出该账号名下仓库及最近备份状态。账号、仓库正常是调参的前提。

三、参数查看与修改方式

3.1 参数清单从哪里来:--help

服务端全部参数可通过主程序 --help 查看(输出较长,此处节选头部 usage 与说明段):

minarca-server --help
usage: minarca-server [-h] [-f FILE] [--database-uri URI] [-d]
                      [--admin-user USERNAME] [--admin-password USERNAME]
                      [--default-lang DEFAULT_LANG]
                      [--default-theme {default,blue,orange,custom}]
                      [--environment {development,production}]
                      [--email-encryption {none,ssl,starttls}]
                      [--email-host HOST] [--email-sender EMAIL]
                      [--email-notification-time TIME]
                      [--email-username USERNAME] [--email-password PASSWORD]
                      [--email-send-changed-notification]
                      [--email-catch-all EMAIL] [--brand-favicon FAVICON]
                      [--brand-logo LOGO] [--brand-header-logo HEADER_LOGO]
                      [--brand-header-name HEADER_NAME]
                      [--brand-link-color LINK_COLOR]
                      [--brand-btn-bg-color BTN_BG_COLOR]
                      [--brand-btn-fg-color BTN_FG_COLOR]
                      [--brand-btn-rounded BTN_ROUNDED]
                      [--brand-navbar-color NAVBAR_COLOR]
                      [--brand-font-family FONT_FAMILY] [--add-missing-user]
                      [--add-user-default-role {admin,maintainer,user}]
                      [--add-user-default-userroot ADD_USER_DEFAULT_USERROOT]
                      [--login-with-email] [--ldap-uri LDAP_URI]
                      [--ldap-base-dn DN]
                      [--ldap-scope {base,onelevel,subtree}] [--ldap-tls]
                      [--ldap-username-attribute ATTRIBUTE]
                      [--ldap-user-filter LDAP_USER_FILTER]
                      [--ldap-required-group CN]
                      [--ldap-group-filter LDAP_GROUP_FILTER]
                      [--ldap-group-attribute ATTRIBUTE]
                      [--ldap-group-attribute-is-dn] [--ldap-bind-dn DN]
                      [--ldap-bind-password PASSWORD] [--ldap-version {2,3}]
                      [--ldap-network-timeout SECONDS]
                      [--ldap-timeout SECONDS] [--ldap-encoding ENCODING]
                      [--ldap-fullname-attribute LDAP_FULLNAME_ATTRIBUTE]
                      [--ldap-firstname-attribute LDAP_FIRSTNAME_ATTRIBUTE]
                      [--ldap-lastname-attribute LDAP_LASTNAME_ATTRIBUTE]
                      [--ldap-email-attribute LDAP_EMAIL_ATTRIBUTE]
                      [--oauth-provider-name OAUTH_PROVIDER_NAME]
                      [--oauth-client-id OAUTH_CLIENT_ID]
                      [--oauth-client-secret OAUTH_CLIENT_SECRET]
                      [--oauth-scope OAUTH_SCOPE]
                      [--oauth-auth-url OAUTH_AUTH_URL]
                      [--oauth-token-url OAUTH_TOKEN_URL]
                      [--oauth-userinfo-url OAUTH_USERINFO_URL]
                      [--oauth-userkey-claim OAUTH_USERKEY_CLAIM]
                      [--oauth-fullname-claim OAUTH_FULLNAME_CLAIM]
                      [--oauth-firstname-claim OAUTH_FIRSTNAME_CLAIM]
                      [--oauth-lastname-claim OAUTH_LASTNAME_CLAIM]
                      [--oauth-email-claim OAUTH_EMAIL_CLAIM]
                      [--oauth-required-claims OAUTH_REQUIRED_CLAIMS]
                      [--log-access-file FILE] [--log-file FILE]
                      [--log-level {ERROR,WARN,INFO,DEBUG}]
                      [--max-depth DEPTH] [--quota-set-cmd COMMAND]
                      [--quota-get-cmd COMMAND] [--quota-used-cmd COMMAND]
                      [--remove-older-time TIME] [--server-host IP]
                      [--server-port PORT] [--external-url URL]
                      [--rate-limit-dir FOLDER] [--rate-limit LIMIT]
                      [--session-idle-timeout MINUTES]
                      [--session-absolute-timeout MINUTES]
                      [--session-persistent-timeout MINUTES]
                      [--ssl-certificate CERT] [--ssl-private-key KEY]
                      [--tempdir FOLDER] [--disable-ssh-keys]
                      [--password-min-length PASSWORD_MIN_LENGTH]
                      [--password-max-length PASSWORD_MAX_LENGTH]
                      [--password-score PASSWORD_SCORE]
                      [--latest-version-url LATEST_VERSION_URL]
                      [--welcome-msg HTML] [--minarca-user-base-dir FOLDER]
                      [--minarca-shell FILE] [--minarca-auth-options OPTIONS]
                      [--minarca-remote-host HOST:PORT]
                      [--minarca-remote-host-identity FOLDER]
                      [--minarca-help-url URL]
                      [--minarca-rdiff-backup-extra-args ARGS]
                      [--minarca-quota-api-url URL] [--version]

Web server to browse and restore backups.

(输出节选:后半部分为逐参数说明,每个参数的帮助文本都标注了对应的环境变量与默认值,本文第四章总览表即以此为基础,并结合逐项实测补充。)

3.2 四层配置来源与优先级

--help 输出的最后一段原文说明了配置来源与优先级:

Args that start with '--' can also be set in a config file
(/etc/minarca/minarca-server.conf or /etc/minarca/conf.d/*.conf or specified
via -f). Configuration file syntax allows: key=value, flag=true. In general,
command-line values override environment variables which override config file
values which override defaults.

即四层来源,从高到低:命令行参数 > 环境变量(MINARCA_*)> 配置文件 > 内置默认值。两点实用结论:

  • 每个参数都有同名环境变量(形如 --email-host 对应 MINARCA_EMAIL_HOST),帮助文本中以 [env var: MINARCA_EMAIL_HOST] 标注,适合在无法改服务启动参数的场合注入;
  • 配置文件里写的是去掉 -- 前缀的键名(--server-port 写成 server-port=8400),布尔值写 flag=true 形式。

3.3 配置文件语法与分片

主配置文件为 /etc/minarca/minarca-server.conf,同目录 conf.d/ 下所有 *.conf 会作为分片一并加载(按文件名顺序,后加载的同名键覆盖先加载的)。当前环境的主文件内容:

cat /etc/minarca/minarca-server.conf
# Host name or IP address to bind to.
# If you want to bind to all interface, use 0.0.0.0
# Default: 127.0.0.1
server-host=0.0.0.0

session-dir=/var/lib/minarca
ls -A /etc/minarca/conf.d/
placeholder

解读:安装模板只设置了两项——server-host=0.0.0.0(监听所有网卡,默认 127.0.0.1 仅本机可访问,远程客户端连不上)、session-dir=/var/lib/minarca(限流计数目录,该键是 rate-limit-dir 的旧别名,帮助文本明确标注 deprecated,新配置建议直接写 rate-limit-dir)。conf.d/ 里默认只有一个空的 placeholder 文件,本文的参数实验全部通过在该目录创建分片完成,删掉分片即还原。

推荐用「分片」方式做参数调整,而不是直接改主文件:一个实验一个文件,回滚时删除文件即可。下面的实测统一采用这个模式。

3.4 修改后如何生效与验证

服务端参数在启动时读取,改完必须重启服务:

systemctl restart minarca-server

验证三件套(服务存活、端口监听、页面可访问):

systemctl is-active minarca-server
active
ss -ltn | grep 8080
LISTEN 0      5            0.0.0.0:8080       0.0.0.0:*
curl -s -o /dev/null -w "%{http_code}\n" -u admin:admin123 http://127.0.0.1:8080/api/currentuser/repos/
200

3.5 排障实录:不认识的参数导致服务无法启动

配置文件的键名写错(或把只存在于其他版本的参数抄了进来)时,服务会直接启动失败,这是最容易踩的坑。实测过程(写一个不存在的键 bogus-key-demo):

printf "bogus-key-demo=1\n" > /etc/minarca/conf.d/zz-bogus.conf
systemctl restart minarca-server
systemctl is-active minarca-server
failed
systemctl is-failed minarca-server
failed

查看日志定位原因:

journalctl -u minarca-server --no-pager -n 12 | grep -iE "unrecognized|INVALID" | head -5
Oct 22 06:38:22 minarca-server minarca-server[16983]: minarca-server: error: unrecognized arguments: --bogus-key-demo=1
Oct 22 06:38:22 minarca-server systemd[1]: minarca-server.service: Main process exited, code=exited, status=2/INVALIDARGUMENT

解读:进程把配置文件键名拼回命令行参数去解析,遇到不认识的键报 unrecognized arguments 并以退出码 2 退出,systemd 记为 status=2/INVALIDARGUMENT。处置:删除问题分片后重启即恢复。

rm -f /etc/minarca/conf.d/zz-bogus.conf
systemctl restart minarca-server
systemctl is-active minarca-server
active

四、参数总览

4.1 服务端参数总览

按下表分组。「默认值」列来自 --help 文本或实测观察;「实测」列标注本文是否做过改值验证(✔=第五章有实测小节;—=仅定义核对,未做效果演示)。

运行与监听

参数(配置键)说明默认值实测
server-hostHTTP 监听 IP127.0.0.1(模板改为 0.0.0.0)✔
server-portHTTP 监听端口8080(实测观察)✔
external-url对外访问 URL,仅用于生成邮件通知里的链接无—
ssl-certificate / ssl-private-keyHTTPS 证书与私钥(官方标注不推荐,建议前置反向代理)无—
environmentdevelopment / production,控制出错页面的信息量production—
debug(-d)调试模式:日志升 DEBUG、页面打印异常栈关闭—

数据与目录

参数说明默认值实测
database-uri持久化数据库(SQLite 路径或 PostgreSQL URI)SQLite,实际落盘 /etc/minarca/rdw.db—
minarca-user-base-dir所有备份仓库的根目录,用户根必须在其下/backups(实测观察)—
rate-limit-dir(旧名 session-dir)登录限流计数文件目录内存(不指定时)—
tempdir恢复文件时的临时目录TEMPDIR 环境变量或 /tmp—

日志

参数说明默认值实测
log-file应用日志文件/var/log/minarca/server.log✔
log-access-fileHTTP 访问日志/var/log/minarca/access.log—
log-levelERROR / WARN / INFO / DEBUGINFO✔

会话与登录限流

参数说明默认值实测
rate-limit敏感端点每小时请求上限,超限返回 HTTP 42920 次/小时✔
session-idle-timeout非持久会话的滑动不活动超时15 分钟✔
session-absolute-timeout会话绝对寿命(不随活动续期)43200 分钟(30 天)—
session-persistent-timeout「记住我」持久会话的滑动超时7 天(登录页实测显示 7 day(s))—

口令策略

参数说明默认值实测
password-min-length口令最小长度帮助未标注默认✔
password-max-length口令最大长度128✔
password-scorezxcvbn 强度最低分,1–42✔

品牌与本地化

参数说明默认值实测
header-name(brand-header-name)应用名,出现在浏览器标题与页头Minarca✔
default-lang界面默认语言(如 fr)en✔
default-themedefault / blue / orange / customdefault—
brand-logo / brand-header-logo / brand-favicon登录页、页头、收藏夹图标无—
brand-link-color / brand-btn-bg-color / brand-btn-fg-color / brand-btn-rounded / brand-navbar-color / brand-font-family界面配色与字体(CSS 值)无—
welcome-msg(另有 -ca/-en/-es/-fr/-ru 语言变体)替换登录页欢迎语(HTML)无✔(未见渲染,见 5.6)

邮件通知

参数说明默认值实测
email-hostSMTP 服务器,形式 <host>:<port>无(未配置则不发信)✔
email-sender发件人地址无✔
email-encryptionnone / ssl / starttlsnone—
email-username / email-passwordSMTP 认证凭据无—
email-notification-time备份不活跃告警邮件的发送时刻23:00—
email-send-changed-notification敏感信息变更时发通知关闭—
email-catch-all所有通知邮件密送(Bcc)到该地址无—

仓库维护与配额

参数说明默认值实测
remove-older-time每日清理过期备份点的调度时刻23:00✔(见 5.8 说明)
max-depth在用户根目录下查找仓库的最大目录深度——
latest-version-url新版本检查地址,置空可禁用https://latest.ikus-soft.com/rdiffweb/latest_version—
quota-set-cmd / quota-get-cmd / quota-used-cmd对接外部配额命令(设置/查询/用量)无—
minarca-quota-api-urlminarca-quota-api 服务地址无—

SSH 备份通道与 Minarca 专属

参数说明默认值实测
minarca-shell处理客户端 SSH 连接的受限 shell 路径/opt/minarca-server/minarca-shell✔(见 5.9)
minarca-auth-options写入 authorized_keys 的限制选项no-port-forwarding 等(实测观察)—
minarca-remote-host客户端关联时下发的 SSH 地址(HOST:PORT)由 HTTP URL 推导—
minarca-remote-host-identity下发给客户端做服务器认证的 SSH 主机指纹目录与 Web 同机时自动—
minarca-rdiff-backup-extra-args(旧名 rdiffbackup-args)传给服务端 rdiff-backup 的额外参数无—
minarca-help-url界面「帮助」按钮跳转地址无—
disable-ssh-keys隐藏 Web 端 SSH 公钥管理入口关闭✔(无可见变化,见 5.9)
admin-user / admin-password初始管理员账号 / SSHA 加密口令admin / admin123—
add-missing-user / add-user-default-role / add-user-default-userrootLDAP/OAuth 登录时自动建号及默认角色/根目录关闭—
login-with-email允许用邮箱登录(OAuth 必需)关闭—

认证集成(LDAP / OAuth)

参数组说明实测
ldap-uri、ldap-base-dn、ldap-scope、ldap-tls、ldap-versionLDAP 服务器地址、搜索起点(如 dc=my,dc=domain)、范围(base/onelevel/subtree)、TLS、协议版本(默认 3)未部署 LDAP,未实测
ldap-username-attribute、ldap-user-filter、ldap-group-filter、ldap-required-group、ldap-group-attribute、ldap-group-attribute-is-dn用户名属性(默认 uid)、用户/组过滤、准入组、组成员属性(默认 member)同上
ldap-bind-dn、ldap-bind-password、ldap-network-timeout、ldap-timeout、ldap-encoding绑定凭据与超时、编码同上
ldap-fullname-attribute、ldap-firstname-attribute、ldap-lastname-attribute、ldap-email-attribute用户资料字段映射同上
oauth-provider-name、oauth-client-id、oauth-client-secret、oauth-scopeOAuth 服务商名称与客户端凭据(scope 默认 openid profile email)未部署 OAuth,未实测
oauth-auth-url、oauth-token-url、oauth-userinfo-url授权/令牌/用户信息端点同上
oauth-userkey-claim、oauth-fullname-claim、oauth-firstname-claim、oauth-lastname-claim、oauth-email-claim、oauth-required-claims用户标识与资料字段映射、必要声明同上

解读:LDAP/OAuth 参数组只在对接企业目录或单点登录时才需要配置,小团队场景可全部留默认;add-missing-user 打开前务必同时设置 add-user-default-userroot(如 /backups/{uid[0]}/),否则自动创建的用户没有备份根目录。

4.2 客户端配置文件总览

客户端没有集中式配置命令,配置落在 /etc/minarca/ 目录的一组文件里(按实例编号 N 区分,支持一台机器多个备份实例):

文件作用
minarcaN.properties实例 N 的关联与调度参数(Java properties 格式)
patternsN实例 N 的包含/排除规则
id_rsaN、id_rsaN.pub实例 N 的 SSH 私钥/公钥(关联时自动生成,公钥上传服务器)
known_hostsN实例 N 记录的服务器 SSH 主机指纹

当前环境(一个远端实例 + 一个本地实例)的文件清单:

ls -A /etc/minarca/
id_rsa0
id_rsa0.pub
known_hosts0
minarca0.properties
minarca1.properties
patterns0
patterns1

properties 键含义总览(实例 0 为远端实例,实例 1 为本地目的端实例,故有 local* 系列键):

键实测值(实例 0)说明
usernameadmin服务器登录账号
repositorynameclient02服务器端仓库名(默认取主机名)
remotehostminarca-serverSSH 目标主机
remoteurlhttp://minarca-server:8080服务器 Web 地址
remoterole0关联角色
schedule24调度间隔小时数(24=每天,1=每小时,见 5.11)
configuredTrue是否已完成关联
maxage0备份新鲜度告警阈值(小时,0=不告警)
ignore_weekday[]忽略调度的星期列表
keepdays-1保留天数(-1=不自动清理)
check_latest_versionTrue是否检查新版本
ignore_hook_errorsFalse钩子脚本失败是否忽略
remote_capabilities[]服务器能力协商结果
pause_until(无)暂停截止时间的 epoch 毫秒值(未暂停则无此键)
localmountpoint / localuuid / localrelpath / localcaption(仅本地实例)本地目的端挂载点 / 文件系统 UUID / 相对路径 / 显示名

解读:properties 是 Minarca CLI 各子命令的数据源——schedule、pause、include/exclude 等命令本质上就是在改这些键和 patterns 文件。日常优先用 CLI 修改(见 5.11),直接手改文件仅适合批量修补。

五、核心参数分类详解

5.1 监听与访问入口(server-host / server-port)

server-host 已在安装阶段设为 0.0.0.0。这里实测 server-port 改端口:为了让一次重启验证多个参数,创建一个包含 7 个参数的分片(后文 5.3、5.6、5.8、5.9 的验证都基于这次重启):

cat > /etc/minarca/conf.d/zz-doc-test.conf <<CONF
server-port=8400
header-name=Ops Backup Center
welcome-msg=Welcome to the Ops Backup Center
default-lang=fr
log-level=DEBUG
remove-older-time=23:59
disable-ssh-keys=True
CONF
systemctl restart minarca-server
systemctl is-active minarca-server
active
ss -ltn | grep -E "8400|8080"
LISTEN 0      5            0.0.0.0:8400       0.0.0.0:*

解读:8080 不再监听,8400 生效,说明 server-port 无需其他配合。验证完毕后删除分片重启,端口回到 8080:

rm -f /etc/minarca/conf.d/zz-doc-test.conf
systemctl restart minarca-server
ss -ltn | grep 8080
LISTEN 0      5            0.0.0.0:8080       0.0.0.0:*

注意:改端口后,所有客户端的 remoteurl、防火墙规则、反向代理目标都要同步调整,否则客户端关联检查(Verifying connection...)会失败。

5.2 数据与目录(database-uri / minarca-user-base-dir / rate-limit-dir / tempdir)

database-uri:账户、仓库元数据全在这里。帮助原文:默认使用 SQLite 内嵌数据库,也支持 PostgreSQL(URI 形如 postgresql://user:pass@10.255.1.34/dbname)。本环境实际落盘文件:

ls -la /etc/minarca
total 1216
drwxr-x--- 3 minarca minarca    4096 Oct 21 17:51 .
drwxr-xr-x 1 root    root       4096 Oct 21 18:04 ..
drwxr-x--- 2 minarca minarca    4096 Oct 21 17:49 conf.d
-rw-r----- 1 minarca minarca     160 Apr 21  2025 minarca-server.conf
-rw-r--r-- 1 minarca minarca    4096 Oct 21 17:51 rdw.db
-rw-r--r-- 1 minarca minarca   32768 Oct 21 18:12 rdw.db-shm
-rw-r--r-- 1 minarca minarca 1182472 Oct 21 18:11 rdw.db-wal

(安装完成当天的目录基线,与安装篇一致;rdw.db 会随使用增长,并伴随 rdw.db-shm、rdw.db-wal 两个 SQLite 附属文件——迁移备份服务器时三者要一起拷贝。)

minarca-user-base-dir:备份仓库根。每个用户的仓库必须位于该目录之下(帮助原文:any user_root outside this repository will be refused)。本环境为安装默认的 /backups,用户 admin 的根目录是 /backups/admin,仓库 client02 实际落在 /backups/admin/client02/。该参数还决定默认配额:5.8 节 API 实测 disk_quota=843834499072 字节(约 786 GiB),与 /backups 分区容量一致——未配置外部配额命令时,配额取用户根目录所在文件系统的大小。

rate-limit-dir(安装模板里写的旧名 session-dir):登录限流的计数文件目录。帮助原文标注:不指定时计数只保存在内存里;指定后以 ratelimit-<哈希>.txt 文件形式持久化在该目录(本环境为 /var/lib/minarca,文件名按来源地址哈希生成)。持久化的意义是重启服务后限流计数不丢。

tempdir:恢复文件时的临时空间。帮助原文:默认取 TEMPDIR 环境变量或 /tmp;若系统盘空间紧张而备份盘宽裕,可指向备份盘(如 /backups/tmp)。

5.3 日志(log-file / log-access-file / log-level)

日志三件套的实际位置:/var/log/minarca/server.log(应用日志,含调度器)、access.log(HTTP 访问日志)、shell.log(SSH 备份通道日志,由 minarca-shell 写,路径跟随 log-file 所在目录)。

log-level 默认 INFO。改为 DEBUG 后,server.log 出现大量框架级调试行(实测 grep 计数 17 条 DEBUG,节选):

grep -m 3 "DEBUG" /var/log/minarca/server.log
[2026-10-22 06:04:18,102][DEBUG  ][-][-][MainThread][tzlocal] /etc/timezone found, contents:
[2026-10-22 06:04:18,102][DEBUG  ][-][-][MainThread][tzlocal] /etc/localtime found
[2026-10-22 06:04:18,103][DEBUG  ][-][-][MainThread][tzlocal] 2 found:

删除分片并重启即恢复默认 INFO 级别。生产环境保持 INFO 即可,排障时临时开 DEBUG。

shell.log 的行格式为 [时间][级别][来源IP][用户][PID][模块] 内容,实测样例(这是排查「客户端连不上/备份中断」的第一手材料):

tail -3 /var/log/minarca/shell.log
[2026-10-22 05:52:21,699][INFO   ][10.89.66.3][admin][PID:11307][__main__] rdiff-backup terminated successfully
[2026-10-22 06:19:50,009][INFO   ][10.89.66.3][admin][PID:16278][__main__] running command [/usr/bin/rdiff-backup-2.2 --server] in jail [/backups/admin] for: minarca/7.2.0 rdiff-backup/2.2.6 (Linux 6.8.0-138-generic x86_64)
[2026-10-22 06:19:50,145][INFO   ][10.89.66.3][admin][PID:16278][__main__] rdiff-backup terminated successfully

解读:running command [/usr/bin/rdiff-backup-2.2 --server] in jail [/backups/admin] for: minarca/7.2.0 rdiff-backup/2.2.6 (Linux 6.8.0-138-generic x86_64) 一行信息量很大——服务端按客户端上报的 rdiff-backup 版本(2.2.6)选择对应后端(rdiff-backup-2.2),并在以 /backups/admin 为可写根的隔离环境中执行(详见 5.9)。

5.4 会话与登录限流(session-idle-timeout / session-persistent-timeout / rate-limit)

session-idle-timeout(默认 15 分钟):登录页的「记住我」复选框标题会动态显示会话时长。默认值下的页面原文(curl 登录页实测):

curl -s http://127.0.0.1:8080/login/ | grep -o "your session will last[^\"']*" | head -1
your session will last for 0 hour(s).

(15 分钟不足 1 小时,向上取整显示为 0 hour(s);同一行还显示持久会话时长 Check this to stay signed in for 7 day(s).,对应默认 7 天的 session-persistent-timeout。)

把 session-idle-timeout=120 写入分片重启后:

curl -s http://127.0.0.1:8080/login/ | grep -o "your session will last[^\"']*" | head -1
your session will last for 2 hour(s).

(120 分钟 = 2 小时,显示随之变化,参数生效可观测。)还原后重新显示 0 hour(s).。

rate-limit(默认 20 次/小时):登录页与 RESTful API 等敏感端点的请求限速,帮助原文明确这是防暴力破解措施,超限返回 HTTP 429。实测把它压到 2 次/小时:写入分片、重启,并清空计数文件后再次重启(确保从零计数):

printf "rate-limit=2\n" > /etc/minarca/conf.d/zz-rl.conf
systemctl restart minarca-server
systemctl is-active minarca-server
active
rm -f /var/lib/minarca/ratelimit-*.txt
systemctl restart minarca-server

连做两次错误口令登录,第三次用正确口令登录:

curl -s -d "login=admin&password=badpass-one" -o /dev/null -w "bad-login-1=%{http_code}\n" http://127.0.0.1:8080/login/
bad-login-1=200
curl -s -d "login=admin&password=badpass-two" -o /dev/null -w "bad-login-2=%{http_code}\n" http://127.0.0.1:8080/login/
bad-login-2=200
curl -s -d "login=admin&password=admin123" -o /tmp/rl429.html -w "good-login-locked=%{http_code}\n" http://127.0.0.1:8080/login/
good-login-locked=429

第 3 次请求即使口令正确也被拒绝,429 响应页面含标题(实测):

grep -o "<h2>[^<]*</h2>" /tmp/rl429.html | head -1
<h2>429 Too Many Requests</h2>

删除分片(恢复默认 20 次/小时)并重启后,同一账号正常登录恢复 303(登录成功跳转):

curl -s -d "login=admin&password=admin123" -o /dev/null -w "good-login-after=%{http_code}\n" http://127.0.0.1:8080/login/
good-login-after=303

解读:限流按「来源 + 端点」计数且持久化在 rate-limit-dir,错误口令尝试和正常登录共用配额——运维时如果团队共享出口 IP,20 次/小时的默认值可能误伤,可适当调大;被锁后等待计数窗口滚过或清理对应 ratelimit-*.txt 计数文件。

5.5 口令策略(password-min-length / password-max-length / password-score)

口令策略在 Web 表单修改口令时校验。先把 password-min-length=12 写入分片重启,尝试把 admin 的口令改成 6 位的 abc123:

printf "password-min-length=12\n" > /etc/minarca/conf.d/zz-minlen.conf
systemctl restart minarca-server
curl -s -c /tmp/cml -d "login=admin&password=admin123" -o /dev/null -w "login=%{http_code}\n" http://127.0.0.1:8080/login/
login=303
curl -s -b /tmp/cml -d "action=set_password&current=admin123&new=abc123&confirm=abc123&set_password=" http://127.0.0.1:8080/prefs/general/ -o /tmp/ml.html -w "HTTP=%{http_code}\n"
HTTP=200
grep -o "Password must[^<]*" /tmp/ml.html
Password must have between 12 and 128 characters.
curl -s -o /dev/null -w "api=%{http_code}\n" -u admin:admin123 http://127.0.0.1:8080/api/currentuser/repos/
api=200

解读:返回 200(表单页重渲染)而非 303,页面告警框给出 Password must have between 12 and 128 characters.,API 用旧口令仍返回 200——口令没有被改掉。这条报错同时说明默认的 password-max-length 为 128。

password-score(默认 2):基于 zxcvbn 口令强度评分(1–4,帮助原文标注)。删除上面的分片恢复默认策略后,尝试把口令改成常见的 q1w2e3r4:

rm -f /etc/minarca/conf.d/zz-minlen.conf
systemctl restart minarca-server
curl -s -c /tmp/cw -d "login=admin&password=admin123" -o /dev/null -w "login=%{http_code}\n" http://127.0.0.1:8080/login/
login=303
curl -s -b /tmp/cw -d "action=set_password&current=admin123&new=q1w2e3r4&confirm=q1w2e3r4&set_password=" http://127.0.0.1:8080/prefs/general/ -o /tmp/wk.html -w "HTTP=%{http_code}\n"
HTTP=200
grep -o "Password too weak[^<]*" /tmp/wk.html
Password too weak. This is a very common password. Add another word or two. Uncommon words are better.
curl -s -o /dev/null -w "q1w2e3r4-api=%{http_code}\n" -u admin:q1w2e3r4 http://127.0.0.1:8080/api/currentuser/repos/
q1w2e3r4-api=401
curl -s -o /dev/null -w "admin123-intact=%{http_code}\n" -u admin:admin123 http://127.0.0.1:8080/api/currentuser/repos/
admin123-intact=200

解读:q1w2e3r4 被默认策略拒绝(200 + too weak 告警 + API 401),原口令 admin123 未受影响——安装篇第八章「弱口令 q1w2e3r4 会被拒绝」即来自这条策略。

初始口令 admin123 同样过不了表单校验。在默认策略下先把口令改为强口令 T3mp-Passphrase-2026#x(该序列取自 5.7 节的邮件实验,中间还包含为 admin 设置邮箱的步骤):

curl -s -c /tmp/cm -d "login=admin&password=admin123" -o /dev/null -w "login=%{http_code}\n" http://127.0.0.1:8080/login/
login=303
curl -s -b /tmp/cm -d "action=set_password&current=admin123&new=T3mp-Passphrase-2026%23x&confirm=T3mp-Passphrase-2026%23x&set_password=" http://127.0.0.1:8080/prefs/general/ -o /dev/null -w "chg1=%{http_code}\n"
chg1=303

再尝试把口令改回初始口令 admin123:

curl -s -c /tmp/cn -d "login=admin&password=T3mp-Passphrase-2026%23x" -o /dev/null -w "login=%{http_code}\n" http://127.0.0.1:8080/login/
login=303
curl -s -b /tmp/cn -d "action=set_password&current=T3mp-Passphrase-2026%23x&new=admin123&confirm=admin123&set_password=" http://127.0.0.1:8080/prefs/general/ -o /dev/null -w "chg2=%{http_code}\n"
chg2=200
curl -s -o /dev/null -w "admin123-api=%{http_code}\n" -u 'admin:admin123' http://127.0.0.1:8080/api/currentuser/repos/
admin123-api=401

解读:admin123 本身就是 zxcvbn 评分低于 2 的常见口令——它能作为初始口令登录(安装时直接写入数据库,不走表单校验),但一旦改掉就无法通过表单设回去。因此首次登录后应立即改成强口令并妥善保管,不要指望「改回 admin123」。

排障实录:表单字段不完整导致「改了但没改」。修改口令的 POST 必须携带隐藏域 action=set_password 与 current(当前口令)字段,漏掉时服务端返回 200 且口令纹丝不动。抓取 /prefs/general/ 页面可见完整表单结构(实测):

curl -s -c /tmp/cf -d "login=admin&password=admin123" -o /dev/null -w "login=%{http_code}\n" http://127.0.0.1:8080/login/
login=303
curl -s -b /tmp/cf http://127.0.0.1:8080/prefs/general/ | grep -E 'name="action"|name="current"|name="new"|name="confirm"'
    <input name="action" type="hidden" value="set_profile_info">
    <input name="action" type="hidden" value="set_password">
        <input class="form-control" name="current" required type="password" value="">
        <input class="form-control" name="new" required type="password" value="">
        <input class="form-control" name="confirm" required type="password" value="">
    <input name="action" type="hidden" value="update_repos">

解读:同一页面有三个表单(资料、口令、仓库设置),靠隐藏域 action 区分,口令表单还要带 current 字段做身份复核。判别成败的方法:成功=303,失败/未登录=200,再用 curl -u 账号:新口令 打一次 API 做最终确认。

5.6 品牌与本地化(header-name / default-lang / welcome-msg)

仍用 5.1 的分片(含 header-name=Ops Backup Center 与 default-lang=fr)。重启后登录页标题与页头 Logo 文本都变成自定义应用名(实测):

curl -s http://127.0.0.1:8400/login/ | grep -n "Ops Backup Center" | head -2
9:        - Ops Backup Center
55:          <img alt="Ops Backup Center"

default-lang=fr 使页面语言与文案切换为法语(实测登录页前 12 行):

curl -s http://127.0.0.1:8400/login/ | head -12
<!DOCTYPE html>
<html lang="fr">
  <head>
    
      <title>
        
  Connexion

        - Ops Backup Center
      </title>
      <meta charset="utf-8" />
      <meta content="noindex" name="robots" />
curl -s http://127.0.0.1:8400/login/ | grep -ioE "connecter|identifier" | head -2
connecter

解读:<html lang="fr"> + 标题 Connexion(法语「登录」)+ 按钮 connecter,语言参数直接生效;header-name 同时作用于标题与页头图标 alt 文本。两者叠加说明分片内多个参数一次性生效。

welcome-msg:定义了登录页欢迎语(支持按语言变体分别设置)。本环境实测在登录页 grep 自定义欢迎语文本 Welcome to the Ops Backup Center 无任何命中(未渲染出来),故此处不给效果描述,仅保留参数定义供参考。default-theme、brand-* 系列为界面配色/图标类参数,按 CSS 值填写即可,本文未逐一验证显示效果。

5.7 邮件通知(email-host / email-sender)

未配置 SMTP 时,触发性邮件(口令变更通知等)只记日志不发信。实测在 admin 账号已配置邮箱的前提下修改口令,server.log 出现(实测节选):

[2026-10-22 06:07:18,607][INFO   ][127.0.0.1][admin][CP Server Thread-6][cherrypy.error.130827192286720] SMTP cannot send email because SMTP Server is not configured

配置一个不可达的 SMTP 地址来观察发信链路。写入分片 email-host=127.0.0.1:2525、email-sender=minarca@ops.example.com 并重启,登录后为 admin 设置邮箱(表单 action=set_profile_info):

printf "email-host=127.0.0.1:2525\nemail-sender=minarca@ops.example.com\n" > /etc/minarca/conf.d/zz-doc-test.conf
systemctl restart minarca-server
curl -s -c /tmp/cm -d "login=admin&password=admin123" -o /dev/null -w "login=%{http_code}\n" http://127.0.0.1:8080/login/
login=303
curl -s -b /tmp/cm -d "action=set_profile_info&username=admin&fullname=&email=admin%40ops.example.com&set_profile_info=" http://127.0.0.1:8080/prefs/general/ -o /dev/null -w "setemail=%{http_code}\n"
setemail=303
curl -s -b /tmp/cm -d "action=set_password&current=admin123&new=T3mp-Passphrase-2026%23x&confirm=T3mp-Passphrase-2026%23x&set_password=" http://127.0.0.1:8080/prefs/general/ -o /dev/null -w "chg1=%{http_code}\n"
chg1=303

口令变更成功(303)触发通知邮件,server.log 记录发信动作与失败堆栈(实测):

[2026-10-22 06:06:46,516][INFO   ][127.0.0.1][anonymous][CP Server Thread-4][rdiffweb.core.notification] User admin login to web application
[2026-10-22 06:06:46,570][INFO   ][127.0.0.1][admin][CP Server Thread-6][rdiffweb.core.notification] Email address of the user admin has been changed
[2026-10-22 06:06:46,570][INFO   ][127.0.0.1][admin][CP Server Thread-6][rdiffweb.core.notification] can't sent mail to user [admin] without an email
[2026-10-22 06:06:46,692][INFO   ][127.0.0.1][admin][CP Server Thread-8][rdiffweb.core.notification] User's password admin changed
Traceback (most recent call last):
  File "apscheduler/executors/base.py", line 131, in run_job
  File "rdiffweb/plugins/smtp.py", line 132, in _send_message
  File "smtplib.py", line 255, in __init__
  File "smtplib.py", line 341, in connect
  File "smtplib.py", line 312, in _get_socket
  File "socket.py", line 865, in create_connection
  File "socket.py", line 850, in create_connection
ConnectionRefusedError: [Errno 111] Connection refused

解读:三个可观测点——① 变更邮箱/口令都会触发通知任务;② 收件地址缺失时记 can't sent mail to user [admin] without an email(变更类通知发给变更前的旧地址,当时旧地址为空);③ SMTP 不可达时在 rdiffweb/plugins/smtp.py 的 _send_message 抛 ConnectionRefusedError。生产配置时先确认服务器到 SMTP 端口的网络连通,再填 email-host。测完删除分片重启还原:

rm -f /etc/minarca/conf.d/zz-doc-test.conf
systemctl restart minarca-server
systemctl is-active minarca-server
active
ss -ltn | grep 8080
LISTEN 0      5            0.0.0.0:8080       0.0.0.0:*

5.8 仓库维护与配额(remove-older-time / max-depth / 配额)

remove-older-time(默认 23:00):每日过期备份点清理任务的触发时刻。该调度任务确实存在——server.log 中调度器启动日志可见(实测节选):

[2026-10-22 06:04:15,419][INFO   ][-][-][MainThread][apscheduler.scheduler] Added job "rdiffweb.core.remove_older:cherrypy.remove_older.remove_older_job" to job store "default"

实测把它改为 23:59 后,日志中未出现与该时刻直接对应的可观控行(到点执行才可见),故只保留定义:清理的保留策略由仓库级参数决定(客户端 properties 中的 keepdays=-1 表示不按天数清理、maxage=0 表示不按新鲜度告警,均可按仓库在 Web 端或客户端设置)。

max-depth:在用户根目录下递归查找仓库的最大深度,仓库按子目录组织时需要调大。

配额:未配置 quota-set-cmd/quota-get-cmd/quota-used-cmd 外部命令时,配额取用户根目录所在文件系统大小(见 5.2)。API 实测(disk_quota=843834499072 ≈ 786 GiB,与安装篇 df -h /backups 的 786G 一致)。minarca-quota-api-url 用于对接 minarca-quota-api 服务做集中配额管理。

5.9 SSH 备份通道与 Minarca 专属参数

客户端到服务端的备份走 SSH,但登录 shell 被替换成受限的 minarca-shell。用户首次关联时,服务端自动把该用户的 SSH 公钥写入 /backups/.ssh/authorized_keys,每行是一条强制命令(实测内容前缀,行尾截断):

command="export MINARCA_USERNAME='admin' MINARCA_USER_ROOT='/backups/admin';/opt/minarca-server/minarca-shell",no-port-forwarding,no-X11-forwarding,no-agent-for

解读:command= 强制该公钥发起的 SSH 会话只能执行 minarca-shell(并注入用户名与用户根两个环境变量),no-port-forwarding 等选项封掉端口/代理转发——对应 minarca-auth-options 参数的默认效果。客户端无论发什么命令,最终都落到 minarca-shell 里受控执行。

minarca-shell 的工作方式(shell.log 实测,见 5.3):以用户根目录(如 /backups/admin)为唯一可写根构建隔离环境,把 /bin、/lib、/lib64、/usr、/opt 只读挂入后 chroot 执行 rdiff-backup --server。服务端并存三个版本的 rdiff-backup 后端(dpkg 实测节选):

dpkg -l | grep rdiff-backup
ii  rdiff-backup-1.2            1.2.8-8                                 amd64        remote incremental backup
ii  rdiff-backup-2.0            2.0.5-12                                amd64        Backup and Restore utility, easy to use, efficient, locally and remotely usable
ii  rdiff-backup-2.2            2.2.6-13                                amd64        Backup and Restore utility, easy to use, efficient, locally and remotely usable

按客户端上报的版本自动选择(客户端 7.2.0 自带 rdiff-backup 2.2.6,服务端即用 rdiff-backup-2.2 承接)。

相关参数:

  • minarca-remote-host:客户端关联时下发的 SSH 地址。Web 服务与 SSH 服务不在同一台或 SSH 端口非 22 时必须配置(形式 ssh.example.com:2222),否则客户端拿到的连接目标不可达。
  • minarca-remote-host-identity:下发服务器 SSH 主机指纹的目录;SSH 服务与 Web 服务分离部署时需要指定。
  • minarca-rdiff-backup-extra-args:追加给服务端 rdiff-backup 的参数(如 --no-compression)。
  • disable-ssh-keys:隐藏 Web 端 SSH 公钥管理页的添加入口。实测开启后访问 /prefs/sshkeys/ 页面仍返回 200 且无权限类报错,未观察到可见变化,故不做效果声明,参数定义以 --help 为准(hide SSH Key management to avoid users to add or remove SSH Key)。
  • minarca-help-url:界面「帮助」按钮的自定义跳转地址。

排障提示:若客户端报 The remote server could not create the necessary security context(退出码 39),优先检查服务端 /backups、/backups/<user>、/backups/.ssh 及 authorized_keys 的属主是否为 minarca 用户——sshd 对 authorized_keys 属主/权限有严格校验(Authentication refused: bad ownership or modes),属主不对时认证直接失败;隔离环境创建也需要运行账号具备相应的内核权限。

5.10 认证集成参数(LDAP / OAuth)

LDAP 与 OAuth 两组参数的完整清单见 4.1 总览表。最小可用配置示例(凭 --help 定义整理,本环境未部署目录服务,未做连通实测):

ldap-uri=ldap://ldap.example.com:389
ldap-base-dn=dc=my,dc=domain
ldap-user-filter=(objectClass=person)

解读:配置 ldap-uri 后用户认证即转由 LDAP 校验;要允许「首次登录自动建号」需同时打开 add-missing-user 并配好默认角色与用户根目录。OAuth 同理,且必须打开 login-with-email(帮助原文:This option is required when using OAuth)。接入前建议先用 ldapsearch 等工具在服务器上验证目录可达与过滤条件有效。

5.11 客户端配置详解(/etc/minarca/)

多实例机制:minarca configure 远端关联创建实例 0;已有关联时再执行 minarca configure -d <本地目录> 会新建一个本地目的端实例(编号顺延)。本地实例不依赖服务器,把备份存到本机目录。实测创建本地实例(目的端 /srv/localbak,名 local-dest):

minarca configure -d /srv/localbak -n local-dest
Linked successfully

生成的实例 1 配置文件全文:

cat /etc/minarca/minarca1.properties
#Thu Oct 22 05:52:20 UTC 2026
repositoryname=local-dest
schedule=24
configured=True
pause_until=1792651939269
check_latest_version=True
localmountpoint=/
localuuid=d3d87d74-2704-46f8-a5e8-f571274ec400
localrelpath=srv/localbak
localcaption=localbak
ignore_hook_errors=False

解读:localuuid/localrelpath/localcaption 记录目的端文件系统标识与位置;pause_until=1792651939269 是创建时刻 +1 小时的 epoch 毫秒值——新建本地实例默认暂停 1 小时(避免关联完成立即触发全量备份),状态页会显示 Paused until。

远端实例的 properties(实例 0 全文,见 4.2 总览表的逐键说明):

cat /etc/minarca/minarca0.properties
#Thu Oct 22 05:52:21 UTC 2026
username=admin
repositoryname=client02
remotehost=minarca-server
remoteurl=http\://minarca-server\:8080
remoterole=0
schedule=24
configured=True
maxage=0
ignore_weekday=[]
keepdays=-1
check_latest_version=True
ignore_hook_errors=False
remote_capabilities=[]

包含/排除规则 patternsN。语法:+ 开头=包含,- 开头=排除,# 注释,支持 *、? 通配(help 原文:May contain * or ? wildcard)。实例 0 当前文件尾部(实测):

tail -6 /etc/minarca/patterns0
# Hidden temporary files
-**/.~*
# Vim temporary files
-**/*~
+/srv/data
-**/*.tmp

用 CLI 追加排除规则并核对生效视图:

minarca exclude '**/*.tmp' --instance 0

(执行后 patterns0 尾部即出现上面的 -**/*.tmp 行。)查看合并默认规则后的生效清单:

minarca patterns --instance 0
-/dev
-/proc
-/sys
-/tmp
-/run
-/mnt
-/media
-**/lost+found
-**/.~*
-**/*~
+/srv/data
-**/*.tmp

解读:CLI 视图 = 文件规则 + 内置默认规则(/dev、/proc、/sys、/tmp、/run、/mnt、/media、lost+found 等永不备份)。+ 规则放在成片 - 规则之后即可把例外目录捞回来(如 +/srv/data)。实例 1 的 patterns1 还多一条默认头部 +/etc/minarca/patterns*,保证客户端自己的规则文件随备份走。

调度参数 schedule。值=间隔小时数。实测切换与还原:

minarca schedule --hourly

(该命令无标准输出,退出码 0。)

grep schedule /etc/minarca/minarca0.properties
schedule=1
minarca status | grep frequency
Backup frequency:         every 1h  
Backup frequency:         every 1h  
minarca schedule --daily

(该命令无标准输出,退出码 0。)

grep schedule /etc/minarca/minarca0.properties
schedule=24

解读:schedule --hourly 写入 schedule=1,--daily 写回 schedule=24,--weekly 对应 168。schedule/unschedule 子命令同时维护 crontab——当前环境的计划任务(实测):

crontab -l

7,22,37,52 * * * * /opt/minarca/minarca backup

暂停参数 pause_until。pause -d <小时数> 把暂停截止时间写进 properties(epoch 毫秒)。实测对实例 0 暂停 6 小时:

minarca pause -d 6 --instance 0

(该命令无标准输出,退出码 0。)

grep pause_until /etc/minarca/minarca0.properties
pause_until=1792669940957
minarca status | grep -B 1 "Paused"
Backup instance:          client02  
Paused until:             2026-10-22T11:52:20+0000

(05:52 UTC 执行 +6 小时 = 11:52 UTC,与显示一致。)解除暂停恢复自动备份:

minarca pause --clear

(该命令无标准输出,退出码 0。)验证 properties 中 pause 键已清零:

grep -c pause /etc/minarca/minarca0.properties
0

当前实例状态总览(本节所有实测完成后的状态,作为对照基线):

minarca status
Verifying connection...
----------------------------------------------------
Backup instance:          client02
Identifier:               0
Remote server:            minarca-server
Backup frequency:         every 24h
Connectivity status:      Connected
Last successful backup:   2026-10-22T05:51:19+0000
Last backup date:         2026-10-22T05:51:19+0000
Last backup status:       SUCCESS
----------------------------------------------------
Backup instance:          local-dest
Identifier:               1
Local device:             localbak
Paused until:             2026-10-22T06:52:19+0000
Backup frequency:         every 24h
Connectivity status:      Connected
Last successful backup:   Never
Last backup date:         Never
Last backup status:       UNKNOWN

解读:实例 0 已完成备份闭环(SUCCESS);实例 1 尚未到触发点(UNKNOWN)且处于创建后的默认 1 小时暂停中。参数调优后看 Last backup status 是否仍为 SUCCESS 是最直接的回归验证。

六、生产配置模板

以下模板按「小团队单机服务端」场景整理,写入 /etc/minarca/conf.d/production.conf 后重启生效。所有键名均与 6.2.5 的 --help 一致,标注「实测」的为本文验证过的项:

# ---- 监听 ----
# 监听所有网卡(实测:默认 127.0.0.1 仅本机可访问)
server-host=0.0.0.0
# 端口按需调整,改后需同步客户端 remoteurl 与防火墙(实测 8400 生效)
server-port=8080

# ---- 日志 ----
log-level=INFO

# ---- 会话与限流 ----
# 默认 20 次/小时;团队共享出口 IP 时可调大
rate-limit=60
# 登录会话不活动超时(默认 15 分钟,按安全基线调整)
session-idle-timeout=30

# ---- 口令策略 ----
# zxcvbn 最低分 1-4,默认 2;要求更强口令可提到 3(实测默认策略拒绝常见弱口令)
password-score=3
password-min-length=10

# ---- 邮件通知 ----
email-host=smtp.example.com:587
email-sender=minarca@example.com
email-encryption=starttls
email-username=minarca@example.com
email-password=CHANGE-ME
email-notification-time=22:00

# ---- SSH 备份通道 ----
# SSH 与 Web 不同端口/不同机时必须下发正确地址
minarca-remote-host=backup.example.com:22

解读:CHANGE-ME 为唯一需人工替换的值(SMTP 密码);email-* 与 LDAP/OAuth 参数在无对应设施时应整段删除而非留空键(留空键无副作用,但保留未用参数会误导后续维护)。配置完成后用 systemctl restart minarca-server 加载,并按 3.4 节三件套验证。

客户端侧的生产建议:schedule 按数据变化频率选择(数据库目录建议 hourly);把备份目的目录、数据库转储目录用 include 显式加入;对挂载点、缓存目录用 exclude 收窄;多实例场景远端与本地各一个实例互为冗余。改完任一参数跑一次 minarca backup --force 做闭环验证(命令详解见 《Minarca 7.2 常用 CLI 命令与工具详解》)。

七、常见问题

Q1:改了配置文件为什么不生效? 服务端参数在启动时读取,必须 systemctl restart minarca-server。重启后用 systemctl is-active minarca-server(应输出 active)与 ss -ltn | grep 8080 双重确认。客户端参数则相反——CLI 子命令即时生效,无需重启任何进程。

Q2:重启后服务起不来,journalctl 报 unrecognized arguments? 配置文件里写了 6.2.5 不认识的键。实测记录:minarca-server: error: unrecognized arguments: --bogus-key-demo=1,随后 status=2/INVALIDARGUMENT。找到最近改动的 conf.d/*.conf 分片删除(或改正键名,键名以 minarca-server --help 为准),再重启即恢复。这也是优先用「一个实验一个分片」的原因。

Q3:登录返回 429 Too Many Requests? 触发了 rate-limit(默认 20 次/小时,错误尝试与正常登录共用配额,按来源计数且重启不丢)。等待计数窗口滚过,或清理 /var/lib/minarca/ratelimit-*.txt 中对应的计数文件后重启服务;内网 Scanner 或监控探针高频探测登录页也会触发,应将其排除或调大 rate-limit。

Q4:口令总是改不成功? 三种实测过的原因:① 长度不足——报 Password must have between 12 and 128 characters.;② 强度不足——报 Password too weak. This is a very common password. Add another word or two. Uncommon words are better.(默认 score=2 即拒绝 q1w2e3r4 这类常见弱口令,也拒绝把口令改回初始值 admin123——初始口令写库时不走表单校验,一旦改掉在默认策略下就设不回去,见 5.5);③ 表单字段不全——POST 必须带隐藏域 action=set_password 与 current 字段,缺了返回 200 且口令不变。判别标准:303=成功,200=失败重渲染,最后用 curl -u 账号:新口令 打 API 确认。

Q5:客户端报 The remote server could not create the necessary security context(退出码 39)? 服务端为客户端构建 rdiff-backup 隔离执行环境失败。按顺序排查:/backups、/backups/<user>、/backups/.ssh 的属主与权限(sshd 校验 authorized_keys 属主,报 Authentication refused: bad ownership or modes 时认证都过不去);运行账号是否能创建用户命名空间(部分发行版默认限制非特权 user namespace,需按发行版文档放开)。服务端 /var/log/minarca/shell.log 会记录 fail to create rdiff-backup jail 类错误,是定位第一现场。

Q6:邮件发不出去? 两种日志:SMTP cannot send email because SMTP Server is not configured(没配 email-host)与 ConnectionRefusedError: [Errno 111] Connection refused(email-host 指向的 SMTP 不可达,堆栈出自 smtp 插件 _send_message)。先在服务器上验证到 SMTP 主机端口的连通性,再检查 email-encryption 与服务商要求是否匹配(587 端口通常配 starttls)。另外确认收通知的用户已在 Web 端填写邮箱,否则记 can't sent mail to user [admin] without an email。

Q7:客户端状态一直 FAILURE 或 Not connected? 先看实例 0 的 remoteurl/remotehost 是否与服务器当前地址一致(改过 server-port 必须重新关联或手改 properties);再在服务端查 shell.log 与 journalctl -u minarca-server;最后在客户端跑 minarca status 看 Connectivity status 与 Details 字段的错误码。暂停中的实例显示 Paused until,到点自动恢复,不是故障。

八、参考链接