Linux文件特殊权限(SUID、SGID和SBIT)设置详解
还是要依赖 chmod 命令。我们知道,使用 chmod 命令给文件或目录设定权限,有 2 种方式,分别是使用数字形式和字母形式。例如:
#数字形式
[root@localhost ~]# chmod 755 ftest
#字母形式
[root@localhost ~]# chmod u=rwx,go=rx ftest
有关 chmod 命令的用法,可以阅读《Linux chmod命令》一节。
我们知道,给 chmod 命令传递 3 个数字,即可实现给文件或目录设定普通权限。比如说,"755" 表示所有者拥有 rwx 权限,所属组拥有 rx 权限,其他人拥有 tx 权限。给文件或目录设定特殊权限,只需在这 3 个数字之前增加一个数字位,用来放置给文件或目录设定的特殊权限,就这么简单。
因此,我们有必要知道 SUID、SGID、SBIT 分别对应的数字,如下所示:
4 --> SUID
2 --> SGID
1 --> SBIT
chmod 4755 文件名
命令,就完成了-rwsr-xr-x 权限的设定。关于 -rwsr-xr-x 的普通权限是 755,你可以这样理解,标记有 s 和 t 的权限位,隐藏有 x 权限,对此,本节后续会给出更详细的解释。
同样的道理,如果某文件拥有 SUID 和 SGID 权限,则只需要给 chmod 命令传递 6---(- 表示数字)即可;如果某目录拥有 SGID 和 SBIT,只需要给 chmod 命令传递 3--- 即可。注意,不同的特殊权限,作用的对象是不同的,SUID 只对可执行文件有效;SGID 对可执行文件和目录都有效;SBIT 只对目录有效。当然,你也可以给文件设置 7---,也就是将 SUID、SGID、SBIT赋予一个文件或目录,例如:
[root@localhost ~]# chmod 7777 ftest
#一次赋予SetUID、SetGID和SBIT权限
[root@localhost ~]# ll ftest
-rwsrwsrwt. 1 root root Apr 19 23:54 ftest
除了赋予 chmod 命令 4 个数字设定特殊权限,还可以使用字母的形式。例如,可以通过 "u+s" 给文件赋予 SUID 权限;通过 "g+s" 给文件或目录赋予 SGID 权限;通过 "o+t" 给目录赋予 SBIT 权限。
举一个例子:
[root@localhost ~]#chmod u+s, g+s, o+t ftest
#设置特殊权限
[root@localhost ~]# ll ftest
-rwsr-sr-t. 1 root root Apr 19 23:54 ftest
[root@localhost ~]# chmod u-s, g-s, o-t ftest
#取消特殊权限
[root@localhost ~]# ll ftest
-rwxr-xr-x. 1 root root Apr 19 23:54 ftest
细心的读者可能发现这样一个问题,使用 chmod 命令给文件或目录赋予特殊权限时,原文件或目录中存在的 x 权限会被替换成 s 或 t,而当我们使用 chmod 命令消除文件或目录的特殊权限时,原本消失的 x 权限又会显现出来。
这是因为,无论是 SUID、SGID 还是 SBIT,它们只针对具有 x 权限的文件或目录有效。没有 x 权限的文件或目录,即便赋予特殊权限,也无法发挥它们的功能,没有任何意义。
例如,我们就是要给不具有 x 权限的文件或目录赋予特殊权限,看看有什么效果:
[root@localhost ~]# chmod 7666 ftest
[root@localhost ~]# ll ftest
-rwSrwSrwT. 1 root root Apr 23:54 ftest
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算