Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
secrets-manager-rs — 一个命令行工具,用于使用可互操作的标准(如 age 加密和 coreutils)安全地备份、恢复和验证机密,确保长期可访问性且无供应商锁定。 | Kitploit
工具/GitHubGitHub/fran314/secrets-manager-rs
加密/解密工具数据恢复云安全DevSecOps实用工具与框架身份验证
GitHubfran314/secrets-manager-rs

secrets-manager-rs

一个命令行工具,用于使用可互操作的标准(如 age 加密和 coreutils)安全地备份、恢复和验证机密,确保长期可访问性且无供应商锁定。

查看仓库
21232个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

secs-man

secs-man 是一个用于管理机密备份的工具,其设计以工具无关性为核心原则:如果你用本软件加密了机密信息,那么即使没有本软件,你也应该能够解密并恢复它们。即使 secs-man 从地球上消失,你的数据依然可访问。

secs-man 可用于管理本地和远程机器的机密,非常适合创建仅限本地的备份,适用于那些过于敏感、不宜存放在云端的场景。

设计理念

理论

你不应该依赖任何特定软件来备份极其重要的数据。

任何强迫你在使用后仍留存在其生态系统中的软件(例如:“如果你用这个软件加密,就只能用这个软件解密”)都会让你产生依赖。

因此,你的重要数据的加密、解密和恢复应该是解耦的,也就是说,如果你用软件 X 加密了数据,那么即使没有软件 X,你也应该能解密它。

实践

在实践中,你无法创建一个让机密完全免受数据丢失威胁的配置。即使你的软件 X 与 Y、Z、W 兼容,如果 X、Y、Z、W 同时停止工作,你仍然会失去对数据的访问。

实践中你要做的是,确保只依赖那些“标准”或接近标准的技术。我可以接受依赖 bash 解释器、USB 端口和 Linux 机器的存在。

因此,secs-man 的真正目标是实现仅通过以下工具即可完美复现:

  • 一个终端
  • 核心工具集,如 cp、mv 和 sha256sum
  • age
  • 手动操作和一点点时间

对 age 的依赖是最微妙的,但对某种加密库的依赖是不可避免的,而 age 既广受欢迎,又在 Rust 中有良好的绑定。

这确保了即使本软件发生任何意外,导致你无法再次使用它,只要 age 仍然存在,并且你愿意花上 30 分钟时间,你仍然能够恢复所有机密。

手动恢复 部分说明了如何在不使用本软件的情况下导入由本软件导出的机密,仅需核心工具集、age 和一个终端。

安装

secs-man 未在任何地方发布(它既不是已发布的 crate,也不在 nixpkgs、AUR 或类似渠道中)。只能通过以下方式从本仓库直接安装。

使用 nix run

如果你只是偶尔需要运行 secs-man,可以直接运行而不安装(需要启用 flakes)

root@kitploit:~
nix run github:Fran314/secrets-manager-rs -- export /path/to/secrets /path/to/export/endpoint

通过 Nix 配置

要使 secs-man 系统级可用,可以在 Nix 配置中使用 fetchGit 导入此仓库,并将生成的包添加到 environment.systemPackages(或使用 home-manager 添加到 home.packages)

root@kitploit:~
let
  secs-man = pkgs.callPackage "${builtins.fetchGit {
    url = "https://github.com/Fran314/secrets-manager-rs.git";
    ref = "main";
    # rev = "<commit>"; # 固定到特定提交以确保可重现性
  }}/default.nix" { };
in
# 将 `secs-man` 添加到 environment.systemPackages 或 home.packages

使用 cargo

如果你不在 NixOS 上,可以通过指向此仓库的 cargo 安装 secs-man 二进制文件

root@kitploit:~
cargo install --git https://github.com/Fran314/secrets-manager-rs

注意,这些方法都不会安装 secs-man-ssh 脚本,该脚本是 远程机器 所需的:它是一个需要从本仓库单独复制的独立脚本

用法

该工具允许从指定源目录导出和加密文件,并通过导入到同一目录来恢复它们。推荐的使用方式是将所有“机密”(密钥、文件等)集中存放在一个目录中。

在机密目录的根目录下,应有一个 .secrets-manifest 纯文本文件,其中包含要管理的机密列表,形式为相对于机密目录的路径。文件路径不能包含空格。每个条目还可以指定 owner 和 mode,用于在导入时设置正确的权限。语法参见 .secrets-manifest.example。

在导出过程中,清单中列出的文件将通过 age 使用交互式提示输入的密码短语进行加密(secs-man 绝不会从文件、参数或环境变量中读取密码短语)。导入时会再次要求输入相同的密码短语以解密文件。文件的完整性由一个配套的 *.sha256 文件保证,如果缺少则会自动生成。加密后的文件会导出到导出目标目录下一个带有时间戳的快照中。

然后可以通过指定导出目标目录(导入最新快照)或该目录内的特定快照来解密和导入文件。

以下命令可以在没有 sudo 的情况下运行,但如果清单中指定了与执行命令的用户不同的所有者,则会失败(因为内部的 chown 调用会失败)。

要导出你的机密,运行

root@kitploit:~
sudo secs-man export /path/to/secrets /path/to/export/endpoint

要验证现有导出的完整性(见下面的注释),运行

root@kitploit:~
# 验证所有已导出快照的完整性
sudo secs-man verify-export /path/to/export/endpoint

# 验证特定快照的完整性
sudo secs-man verify-export /path/to/export/endpoint/export-YYYY-MM-DD_HH-MM-SSZ

注意,每次导出都会自动进行完整性检查。只有在你想检查可能已损坏的旧导出时,才需要手动执行此操作。

要导入你的机密,运行

root@kitploit:~
# 导入最新快照
sudo secs-man import /path/to/export/endpoint /path/to/secrets

# 导入特定快照
sudo secs-man import /path/to/export/endpoint/export-YYYY-MM-DD_HH-MM-SSZ /path/to/secrets

# 仅导入特定机密
sudo secs-man import /path/to/export/endpoint /path/to/secrets --pick ssh/id_ed25519 wg/wg0.key

与远程机器一起使用

该工具也可用于在远程机器上部署和备份机密。

导出远程机密最简单的方法是先在远程主机上导出到临时目录,然后将导出的快照复制到本地备份。类似地,导入本地备份最简单的方法是将本地快照复制到远程主机上的临时目录,然后从那里导入。然而,这样做的缺点是加密/解密密码短语必须经过远程主机,而远程主机可能被视为不受信任的。

为了在不受信任的远程主机上部署/备份,且不让密码短语经过远程主机,你可以使用 secs-man-ssh 脚本。该脚本不假设通过 SSH 进行 root 登录(出于安全原因可能被禁用),但假设远程用户具有 sudo 权限(以便让 secs-man 运行 chown 和 chmod)。

要从远程主机导出,运行:

root@kitploit:~
secs-man-ssh export <user@host> <remote-secrets-dir> <local-backup>

# 流程如下:
# 1. 脚本将远程机密复制到远程主机上的临时目录中
# 2. 临时目录的所有者更改为远程普通用户,以便无需 sudo 即可读取并复制到本地
# 3. 临时目录被复制到本地主机,并从远程主机删除
# 4. 本地目录被导出到本地备份,然后删除

要导入到远程主机,运行:

root@kitploit:~
# 远程主机上必须安装 secs-man 才能使脚本导入正常工作
secs-man-ssh import <user@host> <local-container> <remote-secrets-dir>

# 流程如下:
# 1. 最新快照被导入到本地临时目录(使用 `--skip-chown-chmod` 标志),以便无需 sudo 即可读取并复制到远程主机
# 2. 本地目录被复制到远程主机上的临时目录,并从本地主机删除
# 3. 远程临时目录被导入到远程机密目录(使用 `--from-plaintext`),因为文件已经解密
# 4. 远程临时目录被删除

手动恢复

导出

导出的文件使用 age 通过密码短语加密。导出的文件名是原始名称加上额外的 .age 扩展名。

要实现相同的行为,你可以使用以下命令:

root@kitploit:~
age --passphrase --output filename.txt.age --encrypt filename.txt

注意:

  • 在导出之前,会检查源文件的校验和
  • 在导出过程中,明文文件的现有校验和会与加密文件一起导出
  • 在导出之后,会为所有加密文件创建另一个校验和,以便以后检查导出的完整性

验证导出

验证导出的完整性包括检查每个校验和是否匹配。为此,只需在导出的快照目录中运行

root@kitploit:~
find . -name "sha256sums.txt" -execdir sha256sum -c sha256sums.txt \;

导入

导入的文件使用 age 通过密码短语解密。导入后的文件名是导出的文件名去掉 .age 扩展名。如果清单中为某个条目指定了 owner 和/或 mode,导入的文件会被设置为指定的所有者和权限。如果没有指定 mode,则默认为 600。

要实现相同的行为,你可以使用以下命令:

root@kitploit:~
age --output filename.txt --decrypt filename.txt.age

# 如果没有指定 mode,则默认为 600
chmod <mode> filename.txt

# 如果没有指定 owner,则跳过此步骤
chown <owner> filename.txt

注意:

  • 在导入之前,会检查源文件的校验和
  • 在导入之后,会检查导入文件的校验和

威胁模型

该工具在导出时会自动创建快照,不会由工具本身清理。这意味着在导出机密时需要格外小心。

当导出“认证”机密(SSH/WireGuard 密钥、令牌)时,这些密钥很容易轮换,快照的存在不会带来额外风险。

然而,当导出“解密”机密(磁盘密钥、age/PGP 身份、密码管理器主密钥)时,快照的存在意味着,如果导出中的机密泄露并以某种方式被解密,攻击者可能获得当前和过去的解密密钥。因此,在轮换“解密”机密时,最好也删除旧的导出快照(可以通过 rm -r /path/to/export/endpoint/export-YYYY-MM-DD_HH-MM-SSZ 轻松完成)。请注意,泄露旧解密密钥的关键路径也意味着知道当前的机密,这可能是更严重的问题。

下载工具