【转】Linux中的特殊权限粘滞位(sticky bit)详解
Linux下的文件权限
在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问。最为我们熟知的一个文件或目录可能拥有三种权限,分别是读、写、和执行操作,在这里不做详细说明。我们创建一个文件后系统会默认地赋予所有者读和写权限。当然我们也可以自己修改它,添加自己需要的权限。
特殊权限
但是这三种权限就足够了吗?我们现在来说说在linux下的另一个特殊权限。首先我们来看看在根目录下的一个目录tmp,可以看到tmp目录的other权限是'rwt',那么这里的t又是什么权限呢,有什么意义。

在理解这个权限之前我们先来看看tmp这个目录是存放什么东西的,linux下tmp目录是存放一些临时文件的,那么上图可以看到,该目录的所有者和组用户的权限都是rwx,对于other的权限是rwt。
我们知道如果一个目录的other权限设置有写和执行权限的话,那么别的用户也是可以在该目录下进行创建文件和删除文件等操作,我们来试一试:

现在是root用户,在它的根目录下创建了一个cur目录,并且赋予了777权限。

之后再给cur目录下新建了test1和test2两个文件,而此时我们可以看到这两个文件的other权限只有一个读权限。

现在我们切换用户到dh用户下,试着删除刚刚新建的文件,发现是完全可以删除的。那么这就存在了一个问题,像/tmp目录的权限是应该设置成"rwxrwxrwx"的,因为它要允许任何用户都能在该目录下创建、删除、移动文件等操作。但我们刚刚也看到了,我的dh用户是可以删除root用户在cur目录下创建的文件夹,那么对于tmp目录,任意用户都可以删除系统服务运行中的临时文件(别的用户的),那么这肯定是我们不想要的。
所以回到最初,我们看到tmp目录的权限是"rwxrwxrwt",这里的t就起了相当重要的作用。
粘滞位(粘着位)
上面所说的t权限就是我们在这里要讲的粘滞位(sticky bit),我们给刚刚的cur目录采用chmod o+t的方式给other用户设置粘滞位。

然后我们继续切换到dh用户,看看我们能否继续之前的删除操作:

可以看到此时我们是没有权限删除root用户创建的文件了,这也就是粘滞位的作用。
粘滞位权限便是针对此种情况设置,当⽬录被设置了粘滞位权限以后,即便⽤户对该⽬录有写⼊权限,也不能删除该⽬录中其他⽤户的⽂件数据,⽽是只有该⽂件的所有者和root⽤户才有权将其删除。设置了粘滞位之后,正好可以保持⼀种动态的平衡:允许各⽤户在⽬录中任意写⼊、删除数据,但是禁⽌随意删除其他⽤户的数据。
几点说明
对于特殊权限的添加是添加在原有的执行权限上的,所以特殊权限添加的要求需要文件或者目录本身具有可执行权限。

上图中,我去掉了cur的other的执行权限,可以看到本来't'的位置变成了'T',此时dh用户在cur目录中是不具有权限来进行一系列操作的。
那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 假如本来在该位上有x, 则这些特别标志 (suid, sgid, sticky) 显示为小写字母 (s, s, t).否则, 显示为大写字母 (S, S, T) 。
注意事项
》粘滞位权限是针对目录的,对文件无效

上述的这些操作是在root用户下创建了一个test.c文件,然后添加了t权限,然而在dh用户下还是可以直接进行删除的。所以粘滞位是针对有执行权限的目录的,对于文件添加粘滞位并没有什么作用。
Reference:
文章原创作者:Mr_Listening https://home.cnblogs.com/u/MrListening/
【转】Linux中的特殊权限粘滞位(sticky bit)详解的更多相关文章
- Linux中的特殊权限粘滞位(sticky bit)详解
Linux下的文件权限 在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问.最为我们熟知的一个文件或目录可能拥有三种权限,分别是读.写.和执行操作, ...
- Linux文件和目录的粘滞位(sticky bit)
今天维护系统时发现一个非常诡异的问题:AAA用户和BBB用户同属AAA组,但用AAA用户创建的文件,权限设置为777后,还是不能用BBB用户删除.诡异! 几经周转,发现AAA用户创建文件位置的上层目录 ...
- setuid setgid stick bit 特殊权限 粘滞位
1.setuid与setgid讲解 看一下系统中用到它的地方,以/etc/passwd和/usr/bin/passwd为例: 分析一下,/etc/passwd的权限为 -rw-r--r-- 也就是说: ...
- Linux 权限设置和 SUID, SGID 以及粘滞位sticky bit
suid是指在执行suid程序的过程中,去访问其他文件时拥有suid程序属主的权限,而不是指对suid程序本身拥有suid程序属主的权限! 一. Linux 文件权限的表示方法 文件权限用 12 个二 ...
- Linux中相关知识(atexit(),fork(),粘滞位)
1.atexit()函数 函数名: atexit 头文件:#include<stdlib.h> 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(v ...
- 深入理解linux的权限设置和SUID,SGID以及粘滞位
我们知道文件的权限可以用三个八进制数字表示.其实文件的权限应该用四个八进制来表示,不过用 ls -l 命令时,只显示三个罢了.那个没有显示的八进制数字其实是第一个,它用来设定一些特殊权限.这个八进制数 ...
- linux—粘滞位的设置
粘滞位(Stickybit),或粘着位,是Unix文件系统权限的一个旗标.最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件.如果不为目录设置粘滞位,任 ...
- Linux粘滞位的设置
粘滞位(Stickybit),或粘着位,是Unix文件系统权限的一个旗标.最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件.如果不为目录设置粘滞位,任 ...
- 自学linux——22.粘滞位的了解及使用
粘滞位的了解及使用 一.权限 1.文件的权限 r (read) :可读取该文件的实际内容w(write):可以编辑,新增或者修改该文件的内容(但不含删除该文件)x(execute):代表该文件可以被系 ...
随机推荐
- C# Lambda表达式和linq表达式 之 匿名对象查询接收
很多小伙伴都用过Lambda表达式和linq表达式,用起来也得心应手,但是有的小伙伴 对匿名对象的查询与接收比较迷茫,(没有定义相应的实体),怎么在where()里面进行 条件筛选呢?常规用法我就不说 ...
- void类型和void* 的用法
C语言中的void 和 void * 总结 1.void的作用 c语言中,void为“不确定类型”,不可以用void来声明变量.如:void a = 10:如果出现这样语句编译器会报错:variab ...
- c# String ,String[] 和 List<String>之间的转换
C#对字符串进行处理时,经常需要进行String,String[]和List<String>之间的转换 本文分析一下它们的差异和转换 一. 1. String > String[] ...
- js无法获取.net设置的cookie
使用CookieHelper帮助类: public class CookieHelper { #region 获取Cookie /// <summary> /// 获得Cookie的值 / ...
- 洛谷P2664 树上游戏(点分治)
题意 题目链接 Sol 神仙题..Orz yyb 考虑点分治,那么每次我们只需要统计以当前点为\(LCA\)的点对之间的贡献以及\(LCA\)到所有点的贡献. 一个很神仙的思路是,对于任意两个点对的路 ...
- 自动化测试 Appium之Python运行环境搭建 Part2
Appium之Python运行环境搭建 Part2 by:授客 QQ:1033553122 实践环境 参见 Appium之Python运行环境搭建 Part1 环境部署 1.安装Android SDK ...
- Android ble 蓝牙4.0 总结一
本文介绍Android ble 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用,如果手机系统版本API level < 18,也是用不了蓝牙4.0的哦 ...
- 16进制字符串转QByteArray,char转16进制字符串
直接上代码,看代码你们就懂了 1.16进制QString转QByteArray QString str = "01 a5 1e 02"; QByteArray tmpBy; Str ...
- Postman学习之【压力测试】
Postman请自行下载 下面是在网上随便抓了一个请求地址来做演示,把请求地址填入地址栏,此请求为GET请求.点击Send发送请求,请求结果将会在下方显示出来.每次的请求历史数据,会被记录下来,但是经 ...
- 只需一行代码!Python中9大时间序列预测模型
在时间序列问题上,机器学习被广泛应用于分类和预测问题.当有预测模型来预测未知变量时,在时间充当独立变量和目标因变量的情况下,时间序列预测就出现了. 预测值可以是潜在雇员的工资或银行账户持有人的信用评分 ...