1 个不稳定版本

0.1.0 2023年6月27日

#1644文件系统


用于 3 个 Crates (2 直接)

GPL-3.0-or-later

20KB
325

hashfindutils

hashfindutils 提供了 findutils 的基于哈希的版本 locate(1)updatedb(1) (它们本身就是 findutils 的 find(1) 的缓存版本)。使用 updatehashdb 创建所有文件的哈希值数据库(目前哈希值是 SHA-256,但会添加其他哈希值),然后使用 hashfind 将哈希值转换为路径(libhashfind 提供了库接口)。

安装

要安装它,您需要 Rust。通常推荐的安装方式是使用 Rustup,但您也可以使用您发行版的包管理器版本(对于 Debian:apt install rustc cargo)。

安装过程的其余部分取决于您是希望手动安装还是使用 cargo 安装。

手动安装

首先,您需要下载 hashfindutils 的源代码

cd /your/place/for/downloaded/software/source/code
git clone https://codeberg.org/zvavybir/hashfindutils.git
cd hashfindutils

然后,编译它

cargo build
# cargo build --release # If you want to activate optimizations use this instead,
                        # but I do not recommend it currently.

现在,您需要决定是否希望它在全局范围内运行或仅对您的用户运行。

如果您希望它在全局范围内运行,请将程序复制到全局目录中(如果您想启用优化,请将 "debug" 替换为 "release")

cp target/debug/updatehashdb /usr/bin/updatehashdb
cp target/debug/hashfind /usr/bin/hashfind

否则,将其复制到您的用户 bin 目录中

cp target/debug/updatehashdb ~/.local/bin/updatehashdb
cp target/debug/hashfind ~/.local/bin/hashfind

使用 cargo 安装

要使用 cargo 安装,请以您想要安装的用户身份运行以下命令(root 用于全局,您的用户用于本地)

cargo install updatehashdb
cargo install hashfind

配置

配置文件是 /etc/hashfindutils(全局)或 ~/.zvavybir/hashfindutils/config(本地)。一个示例配置文件如下(警告:在使用之前,请阅读安全通知和推荐的排除路径)

db_path=/usr/share/hashfindutils/db
search_path=/
exclude_path=/dev
exclude_path=/proc
exclude_path=/sys

这会导致数据库写入到 /usr/share/hashfindutils/db(此选项可以省略,因为它是默认值)并索引除 /dev/proc/sys 之外的所有文件。

可能的选项有

  • db_path:数据库路径(最多出现一次;根用户的默认值是 /usr/share/hashfindutils/db,非根用户的默认值是 ~/.zvavybir/hashfindutils/db。)
  • search_path:索引的目录(可出现多次)
  • exclude_path:未索引的目录/文件(可出现多次,建议查看安全提示和推荐排除路径)
  • no_global:当此选项为true时,hashfind作为非root用户运行时不使用全局数据库(这不是一个安全特性!;默认值为false)。

生成数据库

要使用hashfind程序,首先需要生成用于缓存的数据库(否则此程序将无法使用,速度缓慢)。您可以手动运行updatehashdb,或者创建一个cron作业,以便它始终自动更新(警告:在运行之前请阅读安全提示和推荐排除路径)

updatehashdb

或者

crontab -e

然后附加

@reboot updatehashdb

用法

现在您可以使用hashfind [HASH]来搜索一个哈希值,例如。

hashfind 8663bab6d124806b9727f89bb4ab9db4cbcc3862f6bbf22024dfa7212aa4ab7d

安全提示(在以root身份运行之前阅读)

没有机制仅允许可以读取文件的用户查找其哈希值,因此恶意用户可以查找(以及是什么)文件有已知的内容。由于哈希函数的单向性,这并不总是问题,但如果秘密已经在路径中,它将被暴露,或者如果未知部分很小,它可能会被暴力破解。

解决此问题的方法是不要以root身份运行updatehashdb,而是以没有访问秘密文件(在这里定义为对您的系统上的某些用户来说是秘密的,这意味着如果您没有其他用户在您的系统上,并且您信任所有软件都不是恶意和没有错误的,这并不是一个问题)的无特权的用户身份运行。这样做的缺点是,即使是特权用户也无法访问秘密文件的哈希值。

要能够以非root用户身份运行updatehashdb,您必须以root身份创建其全局数据目录(将unprivilegeduser替换为您想要使用的用户)。

mkdir /usr/share/hashfindutils
chown unprivilegeduser /usr/share/hashfindutils

root的默认推荐行为是索引/下的所有文件。这不是一个好的(或可能的)想法,因为索引所有文件。特别是/dev下的文件(它有所有硬件的文件表示,可以非常大,有时甚至无限,例如输入设备)以及/proc/sys(它们是虚拟文件系统,以文件的形式暴露了一些内核功能,其中一些文件,如/proc/dmesg,也是无限的)。

要解决这个问题,您必须使用配置文件的exclude_path功能(阅读那里了解更多信息)。

贡献

任何形式的贡献都受到热烈欢迎!如果您有想法,发现了错误或拼写错误,或其他事情,请随时填写问题或创建PR(但请记住,所有代码都必须在GPLv3+许可下才能被包含)。

依赖关系

~4–12MB
~141K SLoC