与流程可以拥有的所有不同UID有什么关系?

时间:2008-10-15 15:05:14

标签: linux security unix

真正的UID,有效的UID,有些系统甚至还有“已保存的UID”。所有这些的目的是什么,特别是最后一个?

5 个答案:

答案 0 :(得分:51)

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

真实UID

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

有效UID

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

已保存的UID

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

答案 1 :(得分:6)

真正的uid是启动流程的用户的ID。

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

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

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

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

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

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

答案 2 :(得分:4)

除了真实,有效和保存的UID之外,启用了审计的Unix系统也具有审计UID。进程的AUID标识启动进程的用户;它不会被setuid(2)或seteuid(2)改变。目的是通过该过程保持不变,仅用于标记审计记录。因此,如果用户执行特权shell(甚至是通过su或sudo的授权用户),则会从该用户标记该进程的审计记录。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

  

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