Bash 在updatedb上具有root权限的setuid是否存在任何危险?

Bash 在updatedb上具有root权限的setuid是否存在任何危险?,bash,locate,Bash,Locate,我很想用它 # chmod u+s /usr/bin/updatedb 能够在任何地方运行它。有什么理由我不应该这样做吗 我的意思是,这是否增加了我系统的不安全性,因为我知道只有root用户可以使用updatedb,而每个人都可以使用locate?我能想到的主要原因是updatedb在我知道的任何发行版中都还没有setuid,因此,它可能没有像通常的setuid程序那样被仔细检查。甚至locate在Arch Linux上也只是setgid: $ stat --format %A $(which

我很想用它

# 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”组可以访问的攻击面最小化,这可能只是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作业
  • 以root用户身份运行服务以查看重要目录的更改,并在添加或删除文件时运行
    updatedb
    。这可能已经存在(我不知道),或者您可以使用
    inotifywait
    创建自己的。只需确保两件事:
  • 不要监视整个磁盘的更改,因为它将持续运行
    updatedb
  • 不要每次文件更改都运行一个
    updatedb
    ,因为这样可能会导致数千次背靠背运行

为什么除了
root
之外的任何人都需要运行
updatedb
?任何以
根目录运行的代码都有风险,因为每个这样的程序都是攻击的载体。程序应该只在需要权限的情况下运行,而不是更多。因为当我创建/复制一些文件到我的计算机(git等)时,我必须更新B才能在新文件上使用locate。我不使用sudo,因为我不希望我的帐户拥有这些权限。所以当我进行git克隆时,我必须su-to-root,updatedb才能注销。这真的很糟糕。你可以配置
sudo
,这样你唯一可以用
sudo
运行的东西就是
updatedb
。难道没有办法让updatedb作为普通用户运行吗?你可以,但是
updatedb
只能为该用户可读的文件编制索引。你是说如果我安装了一个包(在我的例子中,通过apt)如果这样配置,它将自动成为setuid?我喜欢监视特定的dir来运行updatedb的想法。但是,如果该代码总是以root身份运行并且看起来是“无辜的”,那么允许用户以root身份运行代码(比如su,iirc)是否存在任何漏洞作为updatedb?假设有人恶意访问updatedb。他能做什么?这是一个非常不同的问题,可能更适合security.SE或unix.SE。