1 个不稳定版本
0.1.0 | 2023年6月27日 |
---|
#11 在 #search-file
被 hashfind 使用
35KB
464 行
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
时,如果以非root用户运行hashfind,则hashfind不会使用全局数据库(这不是一个安全特性!;默认值为false
)。
生成数据库
要使用hashfind程序,您首先需要生成用于缓存的数据库(否则此程序将无法使用,运行缓慢)。您可以手动运行updatehashdb或设置cron作业,使其始终自动更新(警告:在运行之前请阅读安全通知和推荐排除路径)
updatehashdb
或
crontab -e
然后追加
@reboot updatehashdb
用法
现在您可以使用hashfind [HASH]
来搜索哈希,例如。
hashfind 8663bab6d124806b9727f89bb4ab9db4cbcc3862f6bbf22024dfa7212aa4ab7d
安全通知(在以root身份运行之前阅读)
没有机制可以仅允许读取文件的用户查找其哈希,因此恶意用户可以查找(以及什么)文件是否有已知内容。由于哈希函数的单向性,这并不总是问题,但如果秘密已经在路径中,它就会暴露,或者如果未知部分很小,它可能会被暴力破解。
解决此问题的方法是以非root
用户运行updatehashdb
,而不是以root
用户运行(秘密在这里定义为系统上的某些用户的秘密,这意味着如果您没有其他用户在系统上,并且您信任所有软件都不是恶意软件且无错误,这不是问题)。这样做的问题是,那么即使是特权用户也无法访问秘密文件的哈希。
要作为非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
~142K SLoC