【问题标题】:What's the purpose of each of the different UIDs a process can have?进程可以拥有的每个不同 UID 的目的是什么?
【发布时间】:2008-10-15 15:05:13
【问题描述】:

真实的UID、有效的UID,有些系统甚至还有“保存的UID”。所有这些的目的是什么,尤其是最后一个?

【问题讨论】:

    标签: linux security unix


    【解决方案1】:

    每个 UNIX 进程都有 3 个与之关联的 UID。超级用户权限是 UID=0。

    真实的 UID

    这是创建此进程的用户/进程的 UID。仅当正在运行的进程的 EUID=0 时才能更改。

    有效的 UID

    此 UID 用于评估进程执行特定操作的权限。 EUID 可以更改为 RUID,如果 EUID!=0,则可以更改为 SUID。如果 EUID=0,则可以更改为任何值。

    已保存的 UID

    如果您运行一个设置了 set-UID 位的可执行文件,则生成的运行进程将以运行它的真实用户的真实 UID 以及可执行文件所有者的有效且保存的 UID 开始。如果该进程随后调用 setuid() 或 seteuid() 来更改其有效 UID,由于保存的 UID,它们仍然可以再次恢复其原始权限。如果未设置 set-UID 位,则 SUID 将是 RUID。

    【讨论】:

    • 保存的 UID 的用途是什么?
    • 这是出于安全和审计目的,即能够确定哪个用户帐户实际启动了二进制文件?如果它不存在,您将能够获得的只是文件所有者的 UID,因为以文件所有者权限运行是 SUID 位的用途。
    • 保存的UID是这样一个进程可以将它的有效UID切换到它的真实UID,然后再切换回来;否则将是单向操作。
    • 我试图用你所说的 MarkR 来阐明 Saved UID 的用途。
    • "只有在运行进程的 EUID=0 时才能更改。" @Barth 我认为上述陈述对于 Real UID 或任何其他 UID 都不正确。确实,只有当 EUID = 0 时,任何 UID 都可以更改为任意值。但是,无论当前的 EUID、RUID 或 SUID 是什么,任何用户都可以将任何 UID 更改为 RUID、EUID 或 EUID 之一。我已经验证了这一点并建议对答案进行编辑,但我不明白为什么它被拒绝了。如果我错了,请纠正我。
    【解决方案2】:

    真正的uid是启动进程的用户的id。

    有效的 uid 通常与真实的 uid 相同。只有在以下情况下才会有所不同:

    • 可执行文件设置了 set-uid 位,并且可执行文件所有者与调用它的用户不同

    • 或者如果 set-uid 进程调用 setuid(2)。如果进程具有超级用户权限,则允许 setuid(2) 的任何参数(但所有 *-uid 都设置为相同的值);否则,可以使用 real-uid 或有效 uid 或保存的 uid 调用 setuid(2)。

    保存的 uid 是进程启动时的有效 uid,它被保存是为了允许作为各种 set*uid 系统调用的参数。

    请注意,具有超级用户权限的进程调用 setuid(2) 来更改其有效 uid 也会将真实 uid 和保存的 uid 更改为相同的值,因此应使用非 POSIX seteuid(2)。

    以上所有内容也适用于(真实|有效|保存的)组 ID。

    【讨论】:

    • 第二个项目符号不正确 - 调用 setuid() 本身不会使 EUID 与 RUID 不同,除非该进程先前具有 RUID != EUID(因此它可能会在程序中恢复状态开始)。子弹的其余部分或多或少是准确的。
    • 感谢您的建议;我相信我通过添加一个单词更正了第二个项目符号。
    【解决方案3】:

    除了真实的、有效的和保存的 UID,启用审计的 Unix 系统也有审计 UID。进程的 AUID 标识启动进程的用户; setuid(2) 或 seteuid(2) 不会更改它。目的是它在整个过程中保持不变,并且仅用于标记审计记录。因此,如果用户执行特权 shell(甚至是通过 su 或 sudo 获得授权的用户),该进程的审计记录将来自该用户。

    【讨论】:

      【解决方案4】:

      每个 Linux 进程都有 3 个与之关联的 UID。

      • Real UID:创建 THIS 进程的进程的 UID。
      • 有效的 UID:用于评估进程执行特定操作的权限。
      • 保存的 UID:用于带有 setuid 位的二进制图像文件。

      【讨论】:

        【解决方案5】:

        关于真正的 UD 不能由除 root 之外的任何人更改,接受的答案是不正确的。 从 setuid 的手册页: (我无法发表评论)

        setuid() 函数设置真实有效的用户 ID 和 保存的 set-user-ID 的 当前进程为指定值。 setuid() 函数是允许的,如果 有效用户 ID 是超级用户的用户 ID,或者如果指定的用户 ID 与 有效用户ID。如果不是,但指定的用户ID与真实用户相同 ID,setuid()会将有效用户ID设置为真实用户ID。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-17
          • 2020-11-11
          • 2018-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多