#文件搜索 #文件 #搜索 #数据库 #命令行界面

夜间版 应用程序 updatehashdb

更新所有文件哈希值的索引

1 个不稳定版本

0.1.0 2023年6月27日

#1194文件系统

GPL-3.0或更新版

40KB
647

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:数据库的路径(最多出现一次;默认值对于root是/usr/share/hashfindutils/db,对于非root用户是~/.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运行之前阅读)

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

为了解决这个问题,应将 updatehashdb 以非 root 用户身份运行,该用户无法访问秘密文件(“秘密”在这里定义为系统上某些用户的秘密,这意味着如果您没有其他用户在系统上,并且您信任所有软件都不是恶意和 bug-free,则这不是问题)。这样做的缺点是,即使特权用户也无法访问秘密文件的哈希值。

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

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

对于root用户,默认的推荐行为是索引根目录下的所有文件。这是一个问题,因为索引所有文件并不是一个好主意(或可能)。特别是/dev下的文件(其中包含所有硬件的文件表示形式,可能非常大,有时甚至无限,例如输入设备)和/proc/sys(这些是虚拟文件系统,以文件的形式暴露某些内核功能,其中一些文件,如/proc/dmesg,也是无限的)。

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

贡献

任何形式的贡献都非常受欢迎!如果您有想法、发现了错误或打字错误,或其他任何事情,请随时填写问题或制作一个PR(但请记住,所有代码都必须在GPLv3+许可下才能被包含)。

依赖项

~11-21MB
~399K SLoC