进程的安全上下文
(1)、用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限
(2)、程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组
(3)、进程拥有的访问权限,取决于属主的访问权限
(a) 进程的属主,同文件属主,则应用文件属主权限
(b) 进程的属主,属于文件的属组,则应用文件属组的权限
(c) 否则应用其他权限
SUID:
展示于文件属主的执行权限位,s表示属主原本拥有x权限,S表示属主原本无x权限
功用:对于一个可执行文件来讲,任何用户运行此程序为进程之后,其属主不再是进程的发起者,而是程序文件自己的属主,这种机制即为SUID
权限设定:
chmod u+s FILE...
chmod u-s FILE...
例如:用户需要修改密码,输入passwd命令之后,则运行/usr/bin/passwd文件,该文件的属主、属组都是root,其他用户只有执行权限。
而运行该命令修改密码后它会更新/etc/passwd和/etc/shadow文件,而这两个文件只有root用户才具修改限限。
所以,/usr/bin/passwd文件的SUID权限会让该程序运行后就具有root的权限,那么以root的身份就能修改,
/etc/passwd、/etc/shadow这两个文件了。
SGID:
展示于文件属组的执行权限位
默认情况下,用户创建文件时,其属组为此用户所属的基本组;
一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建文件,这些所属的组均为该目录的属组。
权限设定:
chmod g+s FILE...
chmod g-s FILE...
例如:有一群人需要在某个目录协同工作时,可为目录设置SGID权限。这样在该目录中创建的文件属组都是该目录的属组,再把该组添加为用户的附加组,对组分配相应的权限。在该目录下大家就可协同工作了。
在一个公共的目录,给目录的属组分配rwx权限,这样只要隶属于该组的用户都可以在该目录内创建文件,而创建的文件或目录大家都有权打开和修改。为了防止用户误操作,限制用户只能删除自己创建的文件,这就是特殊权限Sticky的作用。
Sticky:
展示于其他用户的执行权限位,小写字母t
对一个公共目录,此权限用于限制每个用户只能删除自己创建的文件
权限设定:
chmod o+t FILE...
chmod o-t FILE...
特殊权限的二进制数表示方式
SUID, SGID, STICKY
000 | 0 | 无 |
001 | 1 | STICKY |
010 | 2 | SGID |
011 | 3 | SGID+STICKY |
100 | 4 | SUID |
101 | 5 | SUID+STICKY |
110 | 6 | SUID+SGID |
111 | 7 | SUID+SGID+STICKY |
特殊权限也可以跟文件正常的权限一起设置:
chmod 4777 FILE
chmod 2755 DIR
chmod 3755 DIR
实例:
//在/home下创建个pub目录,为该目录同时设置SUID和Sticky权限