我一直在浏览NSA关于强化Mac OS X和Linux的build议 ,并注意到这个小小的信息:
Setuid程序以文件所有者(通常是root)的特权运行,不pipe用户执行哪个程序。 这些程序中的错误可能允许特权升级攻击。 要查找setuid和setgid程序,请使用以下命令:
find / -perm -04000 -ls find / -perm -02000 -ls
在识别setuid和setgid二进制文件之后,在系统或任务操作不需要的那些位置上使用setuid和setgid位(使用chmod ug -s programname)。
我的问题是,如何确定哪些应用程序可以禁用setuid / setgid位? 例如,我假设一些像su,sudo和login这样的应用程序必须有setuid。 另一方面,像写的东西可能不需要setuid。 有没有一个很好的方法来找出一个应用程序是否真的需要它?
这是个好问题。
通常,需要setuid和setgid位的应用程序需要由非root用户执行pipe理任务。
以passwd程序为例。 它用于更改密码。 密码存储在/ etc / shadow文件中,只能由root读取,因此使用setuid位。
通常,在stream行的Linux发行版中,这些应用程序可以安全使用,因为它们都经过了testing并且没有bug。
我不知道你是怎么知道应用程序是否需要这些位,但是你可以安装一个像snort或AIDE这样的应用程序来检查文件的完整性,当某个文件被更改时可以提醒你 – 尤其是那些setuid和setgid位。