最可靠方式是脚本内嵌sha256自检:部署后生成并安全存储哈希,脚本开头强制校验自身完整性,再校验关键命令路径及环境变量,并配合sudoers绝对路径授权与严格权限控制。

要保障被授权脚本的绝对一致性,不能只靠sudoers里的路径白名单——攻击者替换脚本内容后,sudo仍会照常执行。Sudo本身不内置“运行前校验文件哈希”的功能,但可通过Digest(如SHA256)机制在脚本内部主动验证自身完整性,这是目前最可靠、最轻量的落地方式。
一、预存可信哈希值
在脚本部署完成后,立即生成其SHA256摘要,并安全保存:
- 执行
sha256sum /opt/bin/backup.sh > /etc/backup.sh.sha256 - 设置该摘要文件权限为
644,属主属组均为root:chown root:root /etc/backup.sh.sha256 && chmod 644 /etc/backup.sh.sha256 - 确保普通用户对该文件仅有读权限,无法覆盖或篡改
二、脚本开头强制自检
在被授权脚本的第一行(shebang之后)插入校验逻辑:
#!/bin/bash[[ "$(sha256sum "$0" | cut -d' ' -f1)" == "$(cat /etc/backup.sh.sha256 2>/dev/null | cut -d' ' -f1)" ]] || { echo "FATAL: script integrity check failed"; exit 1; }- 该检查在任何业务逻辑前执行,失败即退出,sudo不会继续运行后续命令
三、连带校验依赖命令路径
仅校验脚本自身不够,还需防止外部命令被劫持(如PATH污染导致调用恶意rsync):
- 在自检之后、正式执行前,逐个确认关键命令的真实路径:
command -v rsync | grep -q '^/usr/bin/rsync$' || exit 1 - 所有命令调用均使用绝对路径,或通过预定义变量封装:
RSYNC="/usr/bin/rsync" - 可进一步限制环境变量:
unset PATH; export PATH="/usr/bin:/bin"
四、配合sudoers最小化授权
Digest校验是纵深防御的一环,必须与sudo配置协同:
- sudoers中仅允许执行该脚本的**绝对路径**:
alice ALL=(root) NOPASSWD: /opt/bin/backup.sh - 禁止通配符、shell、重定向、参数注入:
!/bin/sh, !/usr/bin/python*, !/bin/bash - 脚本自身属主为
root,权限严格设为755,普通用户不可写










