对updatedb具有root权限的setuid是否有任何危险?

时间:2017-06-10 13:28:55

标签: bash locate

我很想用

# chmod u+s /usr/bin/updatedb

能够在任何地方,任何地方运行它。我有什么理由不这样做吗?

我的意思是,它是否会增加我系统中的不安全感,只知道root用户可以使用updatedb,而每个人都可以使用locate

1 个答案:

答案 0 :(得分:0)

我能想到的主要原因是 updatedb在我知道的任何发行版中都没有设置,所以它可能没有经过详细检查通常是setuid程序。甚至locate在Arch Linux上只有 setgid

$ stat --format %A $(which locate)
-rwxr-sr-x

这意味着它是使用文件所有者的执行的:

$ stat --format %G $(which locate)
locate

因此,它作为群组执行"定位",但作为原始用户。这会将攻击面最小化为"定位&#34 ; group有权访问,可能只是locate数据库。

setuid和setgid很少是你需要改变自己作为用户的东西(我从未需要在10年以上的Linux使用中)。来自包的可执行文件在安装时是setuid或setgid,如果需要,例如上面的locate或可以说是最着名的setuid程序sudo

$ stat --format %A $(which sudo)
-rwsr-xr-x

updatedb通常由cron作业运行。如果这对你来说不够频繁,你有几种选择:

  • 只要您需要最新的文件列表,就可以运行sudo updatedb(无需su)。
  • 增加cron作业的频率。这可能会在第一次安装cron作业的软件包的下次更新时被覆盖,但另一方面它可能只是添加了另一个cron作业。
  • 添加另一个频率更高的cron作业。
  • 以root身份运行服务以查看重要目录以进行更改,并在添加或删除文件时运行updatedb。这可能已经存在(我不知道),或者您可以使用inotifywait创建自己的。只需要确定两件事:
    1. 请不要在整个磁盘上进行更改,因为它会不断运行updatedb
    2. 不要为每个文件更改运行一个updatedb ,因为这样你最终可能会连续运行数千个。