RUID、EUID、SUID

转载自:https://www.jianshu.com/p/2c374f9522bd
RUID, EUID,SUID表示实际用户ID,有效用户ID,设置用户ID。另外用户ID是个整型数,这几个ID的作用:

RUID, 用于在系统中标识一个用户是谁,当用户使用用户名和密码成功登录后一个UNIX系统后就唯一确定了他的RUID.
EUID, 用于系统决定用户对系统资源的访问权限,通常情况下等于RUID。
SUID,用于对外权限的开放。跟RUID及EUID是用一个用户绑定不同,它是跟文件绑定而不是跟用户绑定。

1|0root用户的权限

root总是具有对文件和目录的完全访问权限。文件主人一般来说也是这样,但有时候不是。如下:
-rw-r--r-- 1 debian debian 0 Jan 30 14:29 test
debian是主人,但是他只能读和执行;而root仍然拥有完全访问权限(读、写和执行)。

2|0RUID

real user ID,永远不会变:当一个用户登录系统之后,该shell的ruid就是该用户了。从该shell产生的所有进程都会继承ruid,即该用户。

3|0EUID

effective user id,如果user1的可执行文件设置了suid位,且该文件可被user2执行,那么user2执行时,该进程的euid是user1,而ruid是user2.
因为user2登录后去执行,所以ruid是user2;
因为user1设置了suid位且该文件是user1的,所以euid是user1.
那么,euid和ruid什么时候不一样呢?
答:只有上述的这一种情况,即,某可执行文件设置了suid位,然后由非owner用户来执行。
经典例子:passwd
-rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd
user2有权限执行passwd,user2登录后执行passwd
执行时,ruid仍是user2,而euid是root
user2之所以能够改变他自己的密码,是因为passwd内部会检查ruid是否是root,若不是,则其行为会局限于修改ruid的密码
让euid变成root是必须的,因为密码的改变必然要求写 /etc/shadow 文件,而该文件权限位是 640,即只有root能写,所以euid必须是root.

4|0SUID

详细请查看Linux特殊权限 SUID、SGID、Sticky

另:
特权进程(即euid=0,即euid=root)可以设置euid和ruid为非0值(正如login,su和sudo所做的那样)。一般,一个特权进程一旦将其ruid和euid变成非0值,它就变不回root了。


__EOF__

本文作者Bushilushan
本文链接https://www.cnblogs.com/bushilushan/p/16993795.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   进击的ccy  阅读(421)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示