禁用requiretty可以吗?


39

我试图使用Capistrano设置部署脚本。 在一步,cap deploy:setup脚本正在连接到我的服务器,并试图运行用于创建目录的命令。然后我看到一个错误:msudo: sorry, you must have a tty to run sudo

有一个建议的解决方案可以在我的服务器上禁用requiretty。https://unix.stackexchange.com/a/49078/26271

我想知道这样做是否安全?

Answers:


40

requiretty服务器上拥有一个非常有限的安全性优势。如果利用了某些非root用户代码(例如,PHP脚本),则该requiretty选项表示利用代码无法通过运行来直接升级其特权sudo

攻击者可能有另一种方法来获得root权限,当然,攻击者仍然可以破坏您的站点,但不让攻击者获得root权限意味着作为不同用户运行的其他服务将继续正常运行,并且攻击者不会无法删除系统日志。如果您的sudo规则都没有做任何危险(例如创建目录),那么就不用担心了。

此外,更令人讨厌的requiretty是,不需要创建tty的特权,例如,与Expect一样。因此,您最好关闭requiretty:单独关闭它并不能提供安全优势。当用户执行时,它确实提供了适度的可审核性优势(因为日志可以更好地了解调用的对象sudo以及用户来自何处),但是当从后台作业执行时则不能。


1
您是说,如果用户可以运行expect(或screen例如),那么requiretty从安全角度来看是没有用的?(我不太理解您在那句话中“
该死

@GeorgesDupéron是的,就是这样。由于任何人都可以创建tty,因此该requiretty选项不会阻止任何人使用sudo。
吉尔(Gilles)“所以

3
requiretty如果用户正在执行通过ssh要求输入密码的sudo命令,则可以防止用户以明文形式泄露密码。它在那里强迫用户调用ssh -t。
克里斯·贝蒂

1
@Chris Betti-为什么执行ssh -t ...是一件好事?
罗普

当时我的想法是,在这种情况下,如果您正在执行提示输入密码的远程sudo命令,则最好利用远程计算机的askpass程序,而不是通过控制台以明文形式填充密码。老实说,我不知道这样做是否可以提供增强的安全性,除了可能防止您键入密码时在屏幕上回显密码的情况外,我不知道。我相信我在想,如果没有tty或伪tty,将不会调用askpass程序。
克里斯·贝蒂
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.