以前对于文件管理的认识只限于UGO的管理,对于特殊权限的学习还是一知半解。重新学习了一遍,我自己理解的东东记录一下。
首先,列一下SUID、SGID、Sticy Bit所代表的权限数值。就好像rwx分别对应4,2,1一样,SUID、SGID、Sticy Bit分别对应的数值也是4、2、1。
SUID | 4 |
SGID | 2 |
Sticky Bit | 1 |
r | 4 |
w | 2 |
x | 1 |
为了下面的例子做准备,现在假设有一个文件a,权限为 -rw-rw-r--,对应的数值为664
全称:Set UID
对象:仅用于设置二进制文件的特殊权限
用途:用于开放二进制文件的执行权限。当用户执行文件a的时候,执行过程中暂时获得了文件a所属用户的权限。简单说,假如文件a的所有者是root,但是文件设置了SUID,那么其它用户也可以执行这个文件。
例子:/usr/bin/passwd
设置方法:chmod 4664 a
设置完成后文件a权限为:-rwSrw-r--
(现在我也知道为什么每个用户的umask值为四位数了,如果你不知道umask是什么赶紧google一下吧^_^)
全称:Set GID
对象:用于设置文件和目录的特殊权限
用途:
文件:如果该文件是二进制文件的话,其他用户执行该文件的时候会以文件所属用户组的神
目录:在该目录下建立的文件或目录都会自动继承该目录的用户组
设置方式:chmod 2664 a
设置完成后文件a权限为:-rw-rwSr--
全称:Set UID
对象:只用于设置目录的特殊权限
用途:在设置了Sticky Bit权限的目录下建立的文件只有文件的拥有者和root能删除。
设置方式:chmod 1664 a
设置完成后文件a权限为:-rw-rw-r-t
----------------------------------------------------------------华丽的分割线------------------------------------------------------------------------------
在测试上面个属性的时候发现一个问题总结一下。
同属一个用户组的两个用户A和用户B,给予用户A的家目录rwx权限以便用户B能够进入。
使用用户B在用户A的家目录下创建文件test,并将文件的属性设置为----rwx---,也就是只有用户组有所有权限。
这样就会出现:用户B不能修改文件test,但是用户A却能够修改。
以上实验的出两个结论:
1.如果一个文件属于一个用户组,并对用户组开放所有权限,那么该用户组下的所有用户都可以借助用户组的权限访问该文件。
2.如果一个文件的所属用户将自身的权限全部清楚,但是组的权限全部开放,那么文件的所属用户仍不能访问该文件。因为在操作文件是系统参考了当前用户对目标文件的执行权。