实际上权限位一共有四组,共12位,而使用umask命令查看反掩码对应的也是12位,其中前三位就是特殊掩码对应的位。
三种特殊权限分别是:SUID、SGID、SBIT
程序文件拥有该权限之后,运行某程序的时候,相应进程的属主是程序文件自身的属主,而不再是启动者。
chmod u+s FILENAME :给文件加上SUID权限 chmod u-s :讲文件的SUID权限取消
举例说明SUID权限的作用:
passwd命令文件本身就带有SUID权限:
普通用户和管理员用户都能狗使用该命令修改密码,所谓的修改密码实际上只是修改了/etc/shadow文件的内容罢了,查看/etc/shadow文件的权限:
可以看到只有管理员才有权限修改该文件的内容,普通用户没有权限修改该文件的内容,那么普通用户是怎么使用passwd命令修改该配置文件的呢?
正是因为/usr/bin/passwd文件拥有SUID权限才使得普通用户能够修改/etc/passwd文件,当passwd命令运行时,相应的进程的属主不在是启动者,而是/usr/bin/passwd的属主,即root,而/etc/shadow文件的属主也是root,而且拥有写权限,所以passwd命令的进程才能够有权限修改/etc/shadow文件,这样普通用户也就能够成功修改/etc/shadow文件了。
当程序文件拥有该权限之后,运行某程序的时候,相应进程的数组是程序文件自身的属组,而不是启动者所属的基本组。
chmod g+s FILENAME :给文件加上SGID权限 chmod g-s FILENAME :将文件的SGID权限取消
实际上SGID权限最经常加到目录上,当该权限加到目录上之后,所有用户在该目录中创建的文件的属组将不再是启动者,而是目录的属组。
root@kdyzm:/tmp/test# chmod g+s . root@kdyzm:/tmp/test# chmod o+w . root@kdyzm:/tmp/test# ll drwxr-srwx 2 root root 4096 2月 10 20:36 ./ drwxrwxrwt 13 root root 4096 2月 10 20:35 ../ root@kdyzm:/tmp/test# touch a.root root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ touch b.user1 user1@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# su user2 user2@kdyzm:/tmp/test$ touch a.user2 user2@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# ll total 8 drwxr-srwx 2 root root 4096 2月 10 20:39 ./ drwxrwxrwt 13 root root 4096 2月 10 20:35 ../ -rw-r--r-- 1 root root 0 2月 10 20:36 a.root -rw-rw-r-- 1 user1 root 0 2月 10 20:38 a.user1 -rw-rw-r-- 1 user2 root 0 2月 10 20:39 a.user2 root@kdyzm:/tmp/test#
可见三个用户创建的三个文件的属组都是目录的属组root,这样的好处就是如果所有用户的属组都是相同的,那么可以只修改该属组的权限就能够批量修改所有用户对该目录及子目录的访问权限,这在实际 项目开发中比较有用。
当一个公共目录拥有该权限之后,每个用户都能够在该目录中创建和删除自己的文件,但是不能够删除别人的文件。
chmod o+t FILENAME :给目录加上SBIT权限 chmod o-t FILENAME :将目录的SBIT权限删掉
实际上该功能是很常见的,比如/tmp目录就拥有SBIT权限,这样所有用户都能够在该目录中添加和删除自己的文件,但是却不能删除别人的文件。
root@kdyzm:/tmp# mkdir test root@kdyzm:/tmp# chmod o+w ./test/
root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ touch a.user1 user1@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# su user2 user2@kdyzm:/tmp/test$ touch a.user2 user2@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# ll total 8 drwxr-xrwx 2 root root 4096 2月 10 20:59 ./ drwxrwxrwt 13 root root 4096 2月 10 20:59 ../ -rw-rw-r-- 1 user1 user1 0 2月 10 20:59 a.user1 -rw-rw-r-- 1 user2 user2 0 2月 10 20:59 a.user2
root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ rm a.user2 rm: remove write-protected regular empty file ‘a.user2’? y user1@kdyzm:/tmp/test$ ls a.user1 user1@kdyzm:/tmp/test$
结果发现能够删除掉,但是如果给目录加上SBIT权限之后就不一样了,user1将不能删除user2的文件:
root@kdyzm:/tmp/test# chmod o+t /tmp/test/ root@kdyzm:/tmp/test# ll total 8 drwxr-xrwt 2 root root 4096 2月 10 20:59 ./ drwxrwxrwt 13 root root 4096 2月 10 21:06 ../ -rw-rw-r-- 1 user1 user1 0 2月 10 20:59 a.user1 root@kdyzm:/tmp/test# rm * root@kdyzm:/tmp/test# ll total 8 drwxr-xrwt 2 root root 4096 2月 10 21:06 ./ drwxrwxrwt 13 root root 4096 2月 10 21:06 ../ root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ touch a.user1 user1@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# su user2 user2@kdyzm:/tmp/test$ touch a.user2 user2@kdyzm:/tmp/test$ exit exit root@kdyzm:/tmp/test# su user1 user1@kdyzm:/tmp/test$ rm a.user a.user1 a.user2 user1@kdyzm:/tmp/test$ rm a.user2 rm: remove write-protected regular empty file ‘a.user2’? y rm: cannot remove ‘a.user2’: Operation not permitted user1@kdyzm:/tmp/test$