使用 sudo 运行用户可写脚本的安全隐患

使用 sudo 运行用户可写脚本的安全隐患

我需要使用 sudo 运行一些命令。这些命令位于 或 中.bashrc~/bin并存储在 git 存储库(即点文件)中。

~root我已经放置了指向我的用户的符号链接$HOME,但我认为这样做在安全性方面不太好,所以我删除了它们。

我担心的是,如果非根如果用户对这些文件具有写入权限,则恶意程序可以设法执行权限升级。然而,我发现许多点文件存储库在我的书中是不安全的。

.bashrc, sudo 命令启用/etc/sudoersNOPASSWD。在bin/*.sh脚本上,我正在考虑从命令中省略 sudo 并将它们 chown 到 root,但这可能是一个问题,因为 git 不存储所有权。 (几乎)所有单独的命令都需要 sudo ,所以我想从技术上来说它是相同的,除了将脚本分配给 root 应该更安全。我猜 Git 会造成一些麻烦。

一个想法:如果我使用 NOPASSWD 授予每个命令/etc/sudoers,那么如果请求 root 密码,我会闻到有些东西不对劲。

附加信息:

  • 这适用于几个本地单用户计算机;
  • 未经授权访问我的台式计算机不是问题,因此我设置了自动登录;
  • 我的笔记本电脑需要密码才能启动会话。

如果现在问题还不清楚,我会问,如何以安全的方式安排这些脚本/命令?使用 root 进行权限提升是否比恶意程序对我自己的用户数据造成的危害更大?也许只是我想太多了?

答案1

一个可写的脚本可以在你不注意的时候被一些邪恶的东西所取代,如果 root 运行它,游戏就结束了。

确实,如果您是这台机器的唯一用户,那么风险就很低。但破解普通用户的帐户通常更容易(阅读带有恶意软件的电子邮件,连接到恶意网站,随意编译并运行随机源“看看它会做什么”,......),这将允许升级到 root 权限。

答案2

考虑到我知道的所有选项(/usr/local/bin、所有者 root、删除写入权限),我在每个版本化文件上使用了不可变标志:

sudo chattr +i filename

非 root 用户,甚至所有者都无法重置该标志。文件或父目录也不能被删除或替换。

为了编辑该文件,我添加了以下函数.bashrc

editrc () {
    sudo chattr -i $1
    nano $1
    sudo chattr +i $1
}

在其他计算机上,我必须提取点文件,需要在之前删除该标志git pull,然后重新应用。制作了一个以标志作为参数的辅助函数。

protect-config () {
    FLAG=$1
    FILES=$(git ls-files | xargs -I @ -- find @ -type f | xargs echo)
    lsattr $FILES
    if [ "$FLAG" ]; then
        sudo chattr $FLAG $FILES
    fi
}

那就是说,是的,我想太多了。不过,现在它已经就位了。主要是出于良好的习惯。


编辑:我不再使用这个,因为它比它所增加的安全感更不方便。

相关内容