为什么我要为 sudo 要求一个 tty?要求它的安全好处是什么?

Why would I want to require a tty for sudo? What's the security benefit of requiring it?

我目前正在为我的学校做一个旨在在 VM 中创建服务器的项目。

主题的要求之一是在模拟的 Debian Linux 上安装 sudo,在 sudoers 配置文件中包含以下字段:

Defaults        requiretty

要求我设置的主题行:

我知道 tty 是一个打印当前连接到标准输入的终端文件名的命令。但是,我看不到这如何确保服务器的更多安全性。

设置 requiretty 时,sudo 必须是来自已登录终端会话(tty)的 运行。这可以防止 sudo 被守护进程或其他分离进程(如 cronjobs 或网络服务器插件)使用。这也意味着您不能在不设置终端会话的情况下直接从 ssh 调用 运行 它。

这可以防止某些类型的升级攻击。例如,如果我有办法为具有 NOPASSWD sudo 权限的用户修改 crontab,我可以使用它以 root 身份启动作业。使用 requiretty,我不能那样做...

...很容易。这种限制并不是特别难以规避,因此与它打破的有效用例相比,通常并不是那么有用。 Red Hat 曾经使用它,但是 removed it 几年前。