【问题标题】:How find out who is the owner of a program?如何找出谁是程序的所有者?
【发布时间】:2014-08-30 18:51:43
【问题描述】:

我正在研究 Set-UID Privileged Programs,似乎一个程序以其自己的所有者权限执行。 示例:passwd 可以读/写影子文件,因为它属于 root 用户。我如何才能找到其他程序的此类信息?

【问题讨论】:

    标签: linux ubuntu root setuid


    【解决方案1】:

    当您为可执行文件设置用户标识(4755 模式)权限时,运行该文件的进程将根据文件的所有者获得访问权限。

    在这种情况下,您将 /bin/zsh 复制为 root 用户,然后设置 4755 模式,/tmp/zsh 因此将授予运行文件的用户 root 权限而不是用户权限。

    此特殊权限允许用户访问通常只有所有者才能访问的文件和目录。

    您是否尝试过按要求完成?

    【讨论】:

    • 我的尝试是这样的:我使用root用户复制文件(zsh),并尝试以普通用户身份执行。所以,我做了一个程序,它执行一个命令(在这个例子中,一个 passwd 命令)。我的想法,如果这个命令以 root 身份运行,我可以更改其他用户的密码。 root 用户可以做到这一点,所以如果我可以作为运行此脚本的普通用户做到这一点,那显然是对安全性的破坏。但是……没有办法。我尝试将 root 用户设置为该程序的所有者,但我无法以普通用户身份正确执行此操作(没有 root 权限)。
    【解决方案2】:

    适当地使用getuid(2)geteuid(2)getresuid(2)和对应的setuid(2)setreuid(2)。另请参阅capabilities(7)credentials(7) 以及仔细execve(2)。阅读proc(5)

    阅读Setuid 维基页面。运行 setuid 可执行文件的进程可以调用seteuid 来获得特权。

    【讨论】:

    • 我的问题是这样的:在 Linux 中运行 Set-UID shell 程序,并描述和解释你的观察。 (a) 以root登录,将/bin/zsh复制到/tmp,使其成为set-root-uid程序,权限为4755。然后以普通用户登录,运行/tmp/zsh。你会得到root权限吗?请描述你的观察。如果我以 root 身份移动,这意味着该程序具有 root 权限,对吗?但我正在寻找一种方法来证明这一点!
    • 如果你是root,你可以做像mkdir /hacked这样的普通用户做不到的事情。 (记得自己清理。)
    • 然而,/tmp 文件系统经常被挂载,因此二进制文件上的 setuid 位在那里不受尊重。这是一项安全功能,可精确禁用此类黑客攻击。 mount | grep nosuid
    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2013-05-11
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多