Linux学习014特殊权限
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习014特殊权限相关的知识,希望对你有一定的参考价值。
一、特殊权限
实际上权限位一共有四组,共12位,而使用umask命令查看反掩码对应的也是12位,其中前三位就是特殊掩码对应的位。
三种特殊权限分别是:SUID、SGID、SBIT
二、SUID
程序文件拥有该权限之后,运行某程序的时候,相应进程的属主是程序文件自身的属主,而不再是启动者。
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文件了。
三、SGID
当程序文件拥有该权限之后,运行某程序的时候,相应进程的数组是程序文件自身的属组,而不是启动者所属的基本组。
chmod g+s FILENAME :给文件加上SGID权限 chmod g-s FILENAME :将文件的SGID权限取消
实际上SGID权限最经常加到目录上,当该权限加到目录上之后,所有用户在该目录中创建的文件的属组将不再是启动者,而是目录的属组。
[email protected]:/tmp/test# chmod g+s . [email protected]:/tmp/test# chmod o+w . [email protected]:/tmp/test# ll drwxr-srwx 2 root root 4096 2月 10 20:36 ./ drwxrwxrwt 13 root root 4096 2月 10 20:35 ../ [email protected]:/tmp/test# touch a.root [email protected]:/tmp/test# su user1 [email protected]:/tmp/test$ touch b.user1 [email protected]:/tmp/test$ exit exit [email protected]:/tmp/test# su user2 [email protected]:/tmp/test$ touch a.user2 [email protected]:/tmp/test$ exit exit [email protected]:/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 [email protected]:/tmp/test#
可见三个用户创建的三个文件的属组都是目录的属组root,这样的好处就是如果所有用户的属组都是相同的,那么可以只修改该属组的权限就能够批量修改所有用户对该目录及子目录的访问权限,这在实际 项目开发中比较有用。
四、SBIT
当一个公共目录拥有该权限之后,每个用户都能够在该目录中创建和删除自己的文件,但是不能够删除别人的文件。
chmod o+t FILENAME :给目录加上SBIT权限 chmod o-t FILENAME :将目录的SBIT权限删掉
实际上该功能是很常见的,比如/tmp目录就拥有SBIT权限,这样所有用户都能够在该目录中添加和删除自己的文件,但是却不能删除别人的文件。
1.首先使用root用户创建/tmp/test目录并赋予写权限
[email protected]:/tmp# mkdir test [email protected]:/tmp# chmod o+w ./test/
2.切换用户并分别创建文件
[email protected]:/tmp/test# su user1 [email protected]:/tmp/test$ touch a.user1 [email protected]:/tmp/test$ exit exit [email protected]:/tmp/test# su user2 [email protected]:/tmp/test$ touch a.user2 [email protected]:/tmp/test$ exit exit [email protected]:/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
3.尝试使用user1删除user2创建的文件
[email protected]:/tmp/test# su user1 [email protected]:/tmp/test$ rm a.user2 rm: remove write-protected regular empty file ‘a.user2’? y [email protected]:/tmp/test$ ls a.user1 [email protected]:/tmp/test$
结果发现能够删除掉,但是如果给目录加上SBIT权限之后就不一样了,user1将不能删除user2的文件:
[email protected]:/tmp/test# chmod o+t /tmp/test/ [email protected]:/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 [email protected]:/tmp/test# rm * [email protected]:/tmp/test# ll total 8 drwxr-xrwt 2 root root 4096 2月 10 21:06 ./ drwxrwxrwt 13 root root 4096 2月 10 21:06 ../ [email protected]:/tmp/test# su user1 [email protected]:/tmp/test$ touch a.user1 [email protected]:/tmp/test$ exit exit [email protected]:/tmp/test# su user2 [email protected]:/tmp/test$ touch a.user2 [email protected]:/tmp/test$ exit exit [email protected]:/tmp/test# su user1 [email protected]:/tmp/test$ rm a.user a.user1 a.user2 [email protected]:/tmp/test$ rm a.user2 rm: remove write-protected regular empty file ‘a.user2’? y rm: cannot remove ‘a.user2’: Operation not permitted [email protected]:/tmp/test$
本文出自 “狂盗一枝梅的博客” 博客,请务必保留此出处http://kdyzm.blog.51cto.com/8316029/1741479
以上是关于Linux学习014特殊权限的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段
Linux脚本练习之script014-判断参数文件是否为 `.sh` 后缀的普通文件,如果是,则添加所有人可执行权限,否则提示非脚本文件。