目录
Linux中除了rwx权限外,另外还有三种特殊权限:SUID、SGID、SBIT
假如本来在该位上有x, 则这些特别标志 (SUID, SGID,SBIT)显示为小写字母 (s,s,t)。否则显示为大写字母 (S,S,T) 。在数字权限上与rwx类似,对应三位数的二进制,有权限的位置上为1,无权限的位置上为0。SUID,SGID,SBIT分别表示4,2,1。并且需要在最前面增加一位。看个例子就懂了,/usr/bin/passwd的权限:
一、SUID
s出现在文件所有者的x权限上
1)SUID只能用于二进制可执行文件,对目录无效
2)执行者若具有该文件的x权限,则将具有文件所有者的权限
3)权限只在文件执行时有效,执行完毕不再拥有所有者权限
s权限的具体含义是,当某个文件的拥有者执行权限位是s的话,其他用户执行这个二进制时,在执行期间,用户获得文件拥有者的权限。需要注意的是,执行程序的用户本身要对这个程序有x权限。如果一个属于root:root的文件的权限是-rws------,那么让一般用户来执行还是没有权限的。必须改成-rws-----x才可。
使用SUID的场景比较经典的有“有限制地对文件进行读写”。比如有一个属于root的文件file,我希望其他用户可以在一定限制下对其进行读写。显然不能开放rw给他们。那么我可以这么做,将这个文件设置成只有root可读可写,然后写一个二进制程序(程序所有者得是root),在程序中做出读写的控制,而后把这个程序的所属者执行位设置为s。这样其他用户可以通过这个程序来对文件读写,做到了“有限制的读写”。这种做法有点类似于面向对象编程中的私有变量。不