如何使用 dpkg-statoverride 强化 su?

Dre*_*rew 8 ubuntu su sudo dpkg hardening

我正在阅读 Ubuntu 14 强化指南,这是建议之一:

确保只有 sudo 组中的用户才能运行 su 命令以充当(或成为)root 用户似乎是一个明智的想法:

dpkg-statoverride --update --add root sudo 4750
/bin/su

我查看了dpkg-statoverride命令,但我仍然无法弄清楚上面的命令到底在做什么?

这似乎意味着默认情况下 Ubuntu 14 允许任何人 sudo。为了测试,我创建了一个新用户,以该用户身份登录,尝试 sudo 并且失败了——这很好。

那么以上建议的目的是什么?

Nat*_*zoo 18

目的是防止普通用户运行su命令(su与sudo类似,区别在于sudo执行一个命令,su以新用户的身份启动一个新的会话,一直持续到那个用户运行退出)

su 的默认模式是 4755 或 rwsr-xr-x,“s”表示该命令是 set-UID(这意味着它始终以拥有它的用户身份运行,而不是以碰巧执行它的用户身份运行。在这种情况下 su 归 root 所有,所以它总是以 root 权限运行)

su 有自己的安全措施来确保执行它的用户有权成为另一个用户(通常是通过询问其他用户的密码),但可以想象 su 中会有一个安全漏洞,允许攻击者以某种方式说服它在没有权限的情况下做其他事情。

通过将模式更改为 4750,它可以防止普通用户(root 和 sudo 组中的用户以外的用户)甚至首先读取或执行它,因此攻击者需要更改该文件的所有权,或者更改文件的模式,或者在他们甚至可以尝试利用 su 中的这个理论漏洞之前更改自己的有效 UID/GID。

dpkg-statoverride 命令在这种情况下很有用,因为它指示包管理器使用该文件的所有权/模式值,即使它被更新的版本替换(即通过 apt 升级)。换句话说,它使它比 chown 和 chmod 更持久。

这是我为此实例推荐的通用策略:每当我在 Linux/UNIX 机器上调整 su/sudo 或任何身份验证组件的配置时,我都会打开另一个到该服务器的 ssh/putty 会话并以身份登录root 用户,然后让该会话在另一个窗口中打开。这样,如果我搞砸了某些事情并将自己锁在外面,我已经有了一个登录会话,我可以在其中修复我破坏的任何东西。

  • +1 用于辅助根会话。我设法使动态链接器运行一次。顺便说一下,sudo 和 su 在我的机器上都是动态链接的。 (3认同)
  • 对于 Ubuntu 系统,我认为您的意思可能是“apt-get/aptitude/synaptic”而不是“yum”? (2认同)