真实用户ID,有效用户ID和保存的用户ID之间的区别

我已经知道真正的用户ID。 这是系统中用户的唯一号码。 在我的系统中,我的uid是

$ echo $UID 1014 $ 

另外两个ID代表什么? 什么是有效的用户ID和保存的用户ID和我们在系统中使用它的用途。

真正的和有效的用户ID之间的区别是因为你可能需要暂时采取另一个用户的身份(大部分时间,这将是root ,但它可能是任何用户)。 如果你只有一个用户ID,那么之后就没有办法改回原来的用户ID了(除非你认为是理所当然的,如果你是root ,使用root的权限改变为任何用户) 。

所以,真正的用户ID就是你真正的身份(拥有这个进程的人),而有效的用户ID是操作系统要做的决定,无论你是否被允许做某事(大部分时间,有一些例外)。

login时,loginshell会将实际和有效的用户标识设置为与密码文件所提供的相同的值(您的真实用户标识)。

现在,它也发生,你执行一个setuid程序,除了作为另一个用户(例如root )运行setuid程序应该为你做一些事情。 这个怎么用?
在执行setuid程序之后,它将拥有你真正的id(因为你是进程所有者)和文件所有者的有效用户id(例如root ),因为它是setuid。

该程序做了任何超级用户权限需要做的魔术,然后想代表你做一些事情。 这意味着,试图做一些你不应该做的事情应该会失败 。 它是如何做到的? 那么,显然通过改变其有效的用户ID到真正的用户ID!

现在,setuid程序没有办法切换回来,因为所有的内核知道你的ID和… 你的ID 。 砰,你死了。

这是保存的设置用户ID的用途。