【问题标题】:Can't drop privileges with suid binary?不能使用 suid 二进制文件删除权限?
【发布时间】:2018-11-06 20:43:03
【问题描述】:

我想知道是否有办法使用 suid 二进制文件(使用 Ubuntu 18.04)来放弃特权。看:

# cp /bin/bash .
# chown www-data bash
# chmod 4700 bash
# ls -lh
-rws------ 1 www-data root 1,1M abr  4  2018 bash
# ./bash
# id
uid=0(root) gid=0(root) groups=0(root)

有没有解释为什么可以使用 suid 二进制文件获得特权但不能放弃它们?

你可能想知道我想要完成什么,但这只是为了学习。

谢谢!

【问题讨论】:

    标签: linux suid


    【解决方案1】:

    这适用于一般情况:

    # cp /usr/bin/id .
    # chown www-data id
    # chmod 4700 id
    # ./id
    uid=0(root) gid=0(root) euid=33(www-data) groups=0(root)
    

    bash 是一个特例。来自bash 手册的“INVOCATION”部分,特别强调了相关部分:

    如果 shell 启动时有效用户(组)id 不等于 真实的用户(组)ID,并且没有提供-p 选项,没有启动 读取文件,不从环境继承 shell 函数, SHELLOPTSBASHOPTSCDPATHGLOBIGNORE 变量,如果它们 出现在环境中,被忽略,有效用户id为 设置为真实的用户 ID。如果在调用时提供了 -p 选项, 启动行为相同,但有效用户id不同 重置。

    传递-p(特权)标志确实会抑制这种行为:

    # cp /bin/bash .
    # chown www-data bash
    # chmod 4700 bash
    # ./bash -p
    bash-4.4$ id
    uid=0(root) gid=0(root) euid=33(www-data) groups=0(root)
    

    【讨论】:

      【解决方案2】:

      就 set-uid 而言,没有权限层次结构——它只是将有效用户 ID 更改为程序所有者的用户 ID。 Root 的处理方式与任何其他用户没有任何区别。

      您看到的是bash 的蓄意行动。运行 shell 脚本 setuid 有许多安全隐患,而 bash 默认情况下不允许这样做。当bash启动时,它会检查有效的UID是否与真实的UID相同。如果不是,则意味着它正在运行 set-uid。除非它以一种允许的方式运行,否则它会调用像 setuid() 这样的函数来将 back 更改为真实的 UID。

      这就是这里发生的事情。 root 运行 bash,操作系统将有效 UID 更改为 www-databash 检测到这一点并改回 root

      【讨论】:

        猜你喜欢
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-02
        • 1970-01-01
        • 2016-08-20
        相关资源
        最近更新 更多