在 updatedb 上使用 root 权限设置 setuid 有什么危险吗?

Is there any dangers to setuid with root permission on updatedb?

我很想使用

# chmod u+s /usr/bin/updatedb

能够 运行 它随处可见。我有什么理由不应该这样做吗?

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

我能想到的主要原因是 updatedb 在我所知道的任何发行版中都还没有 setuid,所以它可能没有被审查到通常 setuid 程序应该达到的程度。即使 locate 在 Arch Linux:

上也只​​是 setgid
$ stat --format %A $(which locate)
-rwxr-sr-x

这意味着它与文件所有者的一起执行:

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

所以它作为 "locate" 组执行,但 作为原始用户执行。 这最大限度地减少了 "locate" 组有权访问的攻击面,大概只是定位数据库。

setuid 和 setgid 是您作为用户很少需要自己更改的东西(在 Linux 使用 10 多年的时间里我从来不需要这样做)。如果需要的话,包中的可执行文件在安装时是 setuid 或 setgid,例如上面的 locate 或者可以说是最著名的 setuid 程序 sudo:

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

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

  • 运行 sudo updatedb(不需要 su)只要你想要一个最新的文件列表。
  • 增加cron 作业的频率。这可能会在首先安装 cron 作业的软件包的下一次更新中被覆盖,但另一方面,它可能只是添加另一个 cron 作业。
  • 添加另一个频率更高的 cron 作业。
  • 运行 a service 以 root 身份监视重要目录的更改和 运行 updatedb 添加或删除文件时。这可能已经存在(我不知道),或者您可以使用 inotifywait 创建您自己的。只需确保两件事:
    1. 不要监视整个磁盘的变化,因为它会 运行ning updatedb 不断。
    2. 不要 运行 一个 updatedb 每个文件更改 ,因为这样你可能会 运行 背对背成千上万。