AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 847975
Accepted
Troels Arvin
Troels Arvin
Asked: 2017-05-04 03:15:18 +0800 CST2017-05-04 03:15:18 +0800 CST 2017-05-04 03:15:18 +0800 CST

使用 sudo 安全地使用 find

  • 772

在 Linux 服务器上,我需要从一组用户中删除 root 权限。但这些用户有正当理由能够使用“查找”实用程序根据文件名、修改日期和其他元数据搜索文件。

在服务器上,文件名不敏感,但文件内容可能。

我想使用 sudo 允许用户在服务器上的任何位置搜索文件。“查找”实用程序很棒,但它允许各种副作用,例如使用“-exec”生成任意命令。

我可以find在我的限制下工作吗?

linux
  • 3 3 个回答
  • 2845 Views

3 个回答

  • Voted
  1. Matthew Ife
    2017-05-04T04:09:07+08:002017-05-04T04:09:07+08:00

    根据man 7 capabilities

       CAP_DAC_READ_SEARCH
              * Bypass file read permission checks and directory read and execute permission checks;
              * Invoke open_by_handle_at(2).
    

    这对我有用。(以 '#' 开头的行是 root,那些以 '$' 开头的行是非 root)在这种情况下,非 root 用户在wheel组中。

    # cp /usr/bin/find /usr/bin/sudofind
    # chmod 710 /usr/bin/sudofind
    # chown root:wheel /usr/bin/sudofind
    # setcap cap_dac_read_search+ep /usr/bin/sudofind
    # exit
    $ find /root 
    find: ‘/root’: Permission denied
    $ sudofind /root
    /root /root 
    /root/Testbed 
    ...
    ... 
    $ sudofind /root -exec cat {} \;
    cat: /root: Permission denied 
    cat: /root/Testbed: Permission denied
    $ sudofind /root -printf "%u %g %m %c %p\n"
    root root 644 Mon Apr 20 09:20:48.0457518493 2015 /root
    root root 755 Fri Dec  4 02:34:03.0016294644 2015 /root/Testbed
    ...
    ...
    $ # Capability inheritance test..
    $ sudofind /root -exec /bin/sleep 10 \; &
    [1] 17017
    $ getpcaps $(pgrep find)
    Capabilities for `17017': = cap_dac_read_search+ep
    $ getpcaps $(pgrep sleep)
    Capabilities for `17019': =
    

    鉴于功能授予的内容,它完全符合您的要求。我没有彻底检查是否find有一个功能可以让你读取文件中的字节,但是由于 Linux 中 setuid 检查的性质,像库 shim 攻击这样明显的东西LD_PRELOAD不应该起作用,并且功能位没有得到由子进程继承(与原始 setuid 不同),这是另一个好处。

    请记住,您想要做的事情确实会引发与临时文件创建或访问有关的隐私问题,并且该程序可以用作安装竞争条件/特权升级尝试的基础(针对创建众所周知的文件名的程序但不要进行正确的安全检查)。

    此外,一些编写不佳的应用程序可能依赖文件元数据或树结构作为传达含义或隐藏数据的一种方式。这可能会导致发布受限信息或泄露其他不为人知的特权文档(我知道通过默默无闻的安全性,但不幸的是,这是闭源供应商特别喜欢做的事情)。

    因此,请注意并谨慎行事,并了解即使明显的事情不起作用,仍然存在与此相关的风险。

    哦,我很想看看是否有人有概念证明攻击,它使用这种机制作为评论中特权升级的基础!

    • 21
  2. Best Answer
    Lenniey
    2017-05-04T03:20:47+08:002017-05-04T03:20:47+08:00

    定位呢?

    locate 读取由 updatedb(8) 准备的一个或多个数据库,并将与至少一个 PATTERN 匹配的文件名写入标准输出,每行一个。如果未指定 --regex,则 PATTERN 可以包含通配符。如果任何 PATTERN 不包含 globbing 字符,则 locate 的行为就像模式是PATTERN一样。

    默认情况下,locate 不检查数据库中找到的文件是否仍然存在。locate 永远不能报告在最近更新相关数据库后创建的文件。

    甚至可能slocate:

    Secure Locate 提供了一种安全的方式来索引和快速搜索系统上的文件。它像 GNU locate 一样使用增量编码来压缩其数据库以加快搜索速度,但它还将存储文件权限和所有权,以便用户不会看到他们无权访问的文件。

    本手册页记录了 GNU 版本的 slocate。slocate 使系统用户能够搜索整个文件系统而不显示未经授权的文件。

    • 19
  3. yt7b97q-
    2017-05-04T06:34:10+08:002017-05-04T06:34:10+08:00

    我会给用户适当的权限。

    默认情况下,如果 umask 是022,则创建目录,以便每个人都可以列出和统计其中的文件。如果没有,您可以手动将目录的权限更改为按位或其旧权限,并且0555:

    chmod +0555 foo
    

    如果这些用户对该目录的所有父目录(例如,另一个用户的主目录)没有执行权限,则可能意味着您应该将第一个目录放在其他地方。

    如果您只想让某些用户读取和执行该目录,您可以将其模式更改为0750,将这些用户放在一个组中,并将目录的组所有者更改为该组:

    groupadd can_read_foo
    chmod 0750 foo
    chgrp can_read_foo foo
    gpasswd -a alice can_read_foo
    gpasswd -a bob can_read_foo
    
    • 2

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve