一般的linux文件拥有r, w, x权限,但是有的文件含有特殊权限 suid.sgid,sticky
说到Linux 的有特殊权限,就要先说Linux的安全上下文
安全上下文:
前提:进程有属主和属组,文件有属主和属组
(1)任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
(2)启动为进程之后,其进程的属主为发起者,其属组为发起者的属组
(3)进程访问目标文件时的权限,取决于进程的发起者:
(a)进程的发起者,同文件的属主,则应用文件属主权限
(b)进程的发起者,属于文件属组,则应用文件属组权限
(c)应用文件“其他”权限
[nie@localhost ~]$ ls -l `which passwd`
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
[root@localhost ~]# cp /bin/cat /tmp/cat
[root@localhost ~]# chmod u+s /tmp/cat
[root@localhost ~]# ll /tmp/cat
-rwsr-xr-x. 1 root root 48568 May 15 06:55 /tmp/cat
[root@localhost ~]# su - nie
[nie@localhost ~]$ /tmp/cat /etc/shadow
root:$1$aXYjo8x3$Heu0FjiPC41Hf3OCHdKG.0:18002:0:99999:7:::
bin:*:15980:0:99999:7:::
.......
上述的文件就拥有suid,按照上述的操作方法,此时普通用户就能够查看/etc/passwd文件
suid:
(1)任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
(2)启动为进程之后,其进程的属主仍然为原程序文件的属主
权限设定:
chmod u+s FILE...
chmod u-s FILE...
sgid:
默认情况下,用户创建文件时,其属组为此用户所属的基本组:
一旦某目录设定了sgid,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
权限设定:
chmod g+s DIR...
chmod g-s DIR...
sticky:
对于一个多人可写的目录,如果设置了sticky权限,每个用户只能删除自己的文件
权限设定:
chmod o+t DIR...
chmod o-t DIR...
Suid Sgid Sticky --> 000 ... --> 111 次数类似于 rwx对应的数字
chmod 4777 /tmp/a.txt
几个权限位映射:
SUID:占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID:占据属组的执行权限位
s:属组拥有x权限
S:属组没有x权限
Sticky:占据other的执行权限位
t:other拥有x权限
T:other没有x权限