Linux 特权 SUID/SGID 的详解
导航[*]0 前言
[*]1 权限匹配流程
[*]2 五种身份变化
[*]3 有效用户/组
[*]4 特权对 Shell 脚本无效
[*]5 Sudo 与 SUID/SGID 的优先级
[*]6 SUID、SGID、Sticky 各自的功能
0、前言
Linux最优秀的地方之一,就在于他的多人多工环境。而为了让各个使用者具有较保密的档案资料,因此档案的权限管理就变的很重要了。
Linux一般将档案可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限。
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182038334-9777211.png
故对于"静态"的档案来说,其中的权限属性即确定了“哪些身份的人拥有什么样的权限可以去做什么动作”,如上图所示。
而对于"动态"的历程来说,操作系统又为历程分配了它们的用户身份,即有效用户身份euid、有效群组身份egid、群组身份groups、还有继续uid、继续gid。【注:不管历程是否有SUID/SGID加持,历程都将拥有这5个身份,只不过无差异时 id 命令默认不显示euid/egid而已,默认euid=uid、egid=gid】
注:以下实验中涉及的 id、cat、touch 命令均是通过 cp $(which id) /tmp 从系统命令拷贝而来,通过对 id 命令赋予特权以观察同样被赋予特权的cat、touch 命令在此景象之下历程内部发生的变化,以及实际会产生什么样的效果。
1、权限匹配流程
于是,当一个历程想要操作某个档案文件时,操作系统便会根据历程拥有的身份和档案拥有的权限标记去做判断。判断流程如下(示例以读权限 r 举例):
[*]如果历程的 euid 即是档案的 owner-id,则继续开始判断档案拥有者对应的权限位中是否包含 r 权限,若包含则文件被历程顺利读取,若不包含则提示历程无权限,此时不管 r 权限包含与否判断流程都将不再继续;如果历程的 euid 不即是档案的 owner-id,则开始步骤 2 的判断。
[*]如果历程的 groups 包含档案的 group-id,则继续开始判断档案所属群组对应的权限位中是否包含 r 权限,若包含则文件被历程顺利读取,若不包含则提示历程无权限,此时不管 r 权限包含与否判断流程都将不再继续;如果历程的 groups 不包含档案的 group-id,则开始步骤 3 的判断。
[*]此时直接开始判断档案别的人对应的权限位中是否包含 r 权限,若包含则文件被历程顺利读取,若不包含则提示历程无权限。至此,流程不再递归判断,直接结束。
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182119295-2041795746.png
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182125002-548506268.png
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182129677-1250818299.png
2、五种身份变化
当一个二进制命令被授予 SUID/SGID 特权时,命令历程中 5 种身份的变化。
[*]当无特殊权限时,uid=继续shell的uid,gid=继续shell的gid,euid=uid,egid=gid,groups=uid所加入的群组。
[*]当授予suid特殊权限时,uid=继续shell的uid,gid=继续shell的gid,euid=suid的值,egid=gid,groups=uid所加入的群组。
[*]当授予sgid特殊权限时,uid=继续shell的uid,gid=继续shell的gid,euid=uid,egid=sgid的值,groups=uid所加入的群组+sgid。
[*]当授予suid和sgid特殊权限时,uid=继续shell的uid,gid=继续shell的gid,euid=suid的值,egid=sgid的值,groups=uid所加入的组+sgid。
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182210113-1495436243.png
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182218161-715724283.png
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182224389-1476560489.png
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182229697-1647884014.png
3、有效用户/组
不管实验2中历程的5种身份如何变化,当历程产生新档案时,档案的拥有者和所属群组都是以euid和egid的值去赋予的。
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182300007-1401388326.png
4、特权对 Shell 脚本无效
特殊权限 SUID/SGID 对于 shell 脚本不起作用,授予和不授予的状态一样。
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182309446-1472225931.png
5、Sudo 与 SUID/SGID 的优先级
当 Sudo 和 SUID/SGID 同时作用二进制命令时,优先以SUID/SGID的权限为主,这其实就相称于在root shell下实行特殊授权的命令一样,命令历程的5种身份依旧按照小节(2)描述的过程一样,root也不例外。
https://img2024.cnblogs.com/blog/1503193/202407/1503193-20240701182317572-2051837233.png
6、SUID、SGID、Sticky 各自的功能。
[*]SUID:只作用于二进制文件,当命令被实行时,命令会以命令拥有者的身份走完历程的整个生命周期,而非以当前 shell 的用户身份运行。
[*]SGID:当作用于二进制文件时,效果与 SUID 类似,只是在命令历程的整个整个生命周期中又多了一个群组的援助;当作用于目录时,使用者进入此目录下时他的有效群组将会酿成该目录的群组,此时新建的任何文件目录,他们的 群组id 都将和该目录的 群组id 一样。
[*]Sticky:只作用于目录,使用者在该目录下新建的任何文件目录,都将只有自己与 root 才有权力删除。如 /tmp 目录。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]