【问题标题】:Is it possible for a process in Linux to change another process's UID?Linux中的进程是否可以更改另一个进程的UID?
【发布时间】:2020-11-11 10:05:39
【问题描述】:

我想知道 Linux 中的一个进程(假设它具有 root 访问权限)是否可以更改另一个进程的 UID,包括 RUID、SUID 和 EUID,如果可以,是否有特定的实现我可以做(无论是 C++ 还是 bash 脚本等)。我主要是试图阻止某些循环进程在生成时立即以 root 权限执行,它们似乎在生成时执行。

谢谢!如果问题不清楚,我深表歉意。如果是的话,我可以澄清任何细节。

【问题讨论】:

    标签: linux security process privileges multiple-users


    【解决方案1】:

    不,一个进程不可能更改另一个进程的 UID。如果是这样,那将是一个巨大的安全问题。如果您在进程 A 中,您不知道进程 B 处于什么状态,也不知道此时提升权限是否安全。同样,如果您强制特权进程意外放弃特权,您可能会导致特权进程占用共享资源并使其他进程死锁,因为它可能会在关键部分的中间失败。

    即使您能以某种方式解决此问题,您仍然会遇到一种竞争条件,即您生成的进程可以在强制它放弃之前以 root 身份执行任意数量的代码(多少,您不知道)特权。

    您应该弄清楚是什么产生了您的进程并将其调整为不以 root 身份产生它们或完全阻止它产生它们。

    【讨论】:

    • 非常感谢 bk2204,这是一个非常好的答案。不过我有一个问题,我只是想澄清一下关于死锁其他特权的部分,因为我不明白放弃特权是如何意外导致的。您认为您可以详细说明一下吗?谢谢!
    • 另外,如果有很多问题要问,我很抱歉,但是您是否知道一旦我知道什么进程正在产生这个进程,如何处理该进程以使其停止产生作为根?谢谢!
    • 如果它占用了共享锁或资源,然后尝试并未能执行特权进程通常可以执行的操作,然后未能释放该资源或过度重试,则可能发生死锁。如何阻止它以 root 身份生成它取决于生成它的内容。例如,systemd 具有可以在单元文件中使用的用户设置。
    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    相关资源
    最近更新 更多