在介绍Linux粘滞位之前,先来简单介绍一下文件权限和目录权限的区别。在linux系统中文件(文件和目录)的权限有三种(r,w,x),而这三种权限对文件和目录的意义有所不同。

权限对文件
r (read) :可读取该文件的实际内容;
w(write):可以编辑,新增或者修改该文件的内容(但不含删除该文件);
x(execute):代表该文件可以被系统执行

对于文件的r ,w, x来说,主要针对的"文件的内容"而言,与文件名的存在与否没有关系;

权限对目录
r (read):表示具有读取目录结构列表的权限,不如可以用ls查看一下目录有什么
w(write):而写的权限对目录来说就显得很强大了,代表具有更改该目录结构列表的权限。目录可写操作包括:新建文件或目录、删除文件或目录(不论文件的权限是什 么)、对文件或目录重命名、移动文件或目录等。
x(execute):目录的X权限代表的是用户能否进入该目录称为工作目录。拥有此权限,就可以cd进去,否则,将不能进入目录内部。

一、粘滞位介绍
粘滞位(Stickybit),或粘着位。最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。在linux系统的实际应用中,粘滞位一般用于/tmp目录,以防止普通用户删除或移动其他用户的文件。一个目录具有粘滞位,则在other的X位会表现为 t,或者T。T和t的区别在于,原来x位上有x权限,有了粘滞位则表现为t,否则,则表现为T。

在Linux系统中比较典型的例子就是"/tmp"、 "/var/tmp"目录。这两个目录作为Linux系统的临时文件夹,权限为"rwxrwxrwx",即允许任意用户、任意程序在该目录中进行创建、删除、移动文件或目录等操作。试想一下:若任意一个普通用户都能够删除系统服务运行中使用的临时文件,将造成什么结果?

粘滞位权限便是针对此种情况设置,当目录被设置了粘滞位的t权限以后,即便用户对该目录有写入权限,也不能删除该目录中其他用户的文件数据,而是只有该文件的所有者和root用户才有权将其删除。设置了粘滞位的t权限之后,正好可以保持这种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据。需要注意: 粘滞位权限只能针对⽬录设置,对于⽂件⽆效。

正常情况下,在Linux系统中,如果对一个目录具有写权限,那么就可以在这个目录下创建删除文件。现在有这么个需求:如果现在需要创建这样一个目录,可以在这个目录里创建文件,但是其他用户不能删除这个文件。这里就要用到Linux这个特殊的权限:粘滞位,也就是t特殊权限!需要注意:粘滞位t权限给其它用户带来的安全限制 仅仅在于不能删除和移动/更名文件 (即粘滞位保护的是文件不被其他用户rm或mv,即使文件对其他用户有写权限,777都不行!),因为它针对的是目录。

在Linux中有三种特殊权限,分别为:
SetUID  =  4:在所有者设置的权限     
SetGID  =  2:在所属组设置的权限
粘着位  =  1:在其他人的位置设置的(使用t来表示)

SetUID 、SetGID、t权限的设置,之前已在另一篇文档中简单介绍:https://www.cnblogs.com/kevingrace/p/5823003.html,这里重点说下粘滞位的设置,对于授予了粘滞位权限的目录(目录权限777)来说:每个用户都能在这个目录里面创建文件,但是只能删除或移动自己创建的文件。

二、粘滞位应用
设置了粘滞位t权限的目录,使用ls命令查看其属性时,其他用户权限位置的"x"将变为"t"。

查看/tmp、 /var/tmp目录本身的权限,确认存在"t"标记。
[root@ss-server ~]# ll -d /tmp/
drwxrwxrwt. 8 root root 4096 Dec 6 03:46 /tmp/
[root@ss-server ~]# ll -d /var/tmp/
drwxrwxrwt. 3 root root 4096 Dec 3 20:18 /var/tmp/

粘滞位t权限都是针对其他用户(other)设置,使用chmod命令设置目录权限时,"o+t"、"o-t"权限模式可分别用于添加、移除粘滞位权限。

设置粘滞位权限方法
# chomd o+t
# chomd 1777 删除粘滞位权限方法
# chomd o-t

设置粘滞位t权限示例:

1)创建粘滞位t权限之前
用root身份创建/opt/kevin目录,并用参数-m 为它指定权限为777(可读,可写,可执行),并且所属者和所属组都是root。
[root@ss-server ~]# mkdir -m 777 /opt/kevin/ #-m参数表示mkdir创建时指定目录权限,省略了创建后再chmod授权("相当于chmod 777 /opt/kevin")
[root@ss-server ~]# ll -d /opt/kevin/
drwxrwxrwx 2 root root 4096 Dec 6 16:17 /opt/kevin/ 接着在该目录下新建两个文件,权限为默认。因为其他用户other对/opt/kevin目录具有w权限,所以可以删除目录内容。
[root@ss-server kevin]# touch test1 test2
[root@ss-server kevin]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 6 16:19 test1
-rw-r--r-- 1 root root 0 Dec 6 16:19 test2 切换到名为linan的普通用户,尝试去删除刚刚在root下新建的两个文件test1 和 test2。经过实践,发现可以删除。
[root@ss-server ~]# su - linan
Last login: Fri Dec 6 16:21:48 CST 2019 on pts/21
[linan@ss-server ~]$ cd /opt/kevin/
[linan@ss-server kevin]$ ll
total 0
-rw-r--r-- 1 root root 0 Dec 6 16:33 test1
-rw-r--r-- 1 root root 0 Dec 6 16:33 test2
[linan@ss-server kevin]$
[linan@ss-server kevin]$ ll
total 0
-rw-r--r-- 1 root root 0 Dec 6 16:33 test1
-rw-r--r-- 1 root root 0 Dec 6 16:33 test2
[linan@ss-server kevin]$ echo "123" > test1
-bash: test1: Permission denied
[linan@ss-server kevin]$ echo "123" >> test1
-bash: test1: Permission denied
[linan@ss-server kevin]$ mv test1 test11
[linan@ss-server kevin]$ ll
total 0
-rw-r--r-- 1 root root 0 Dec 6 16:33 test11
-rw-r--r-- 1 root root 0 Dec 6 16:33 test2
[linan@ss-server kevin]$ rm -rf test11
[linan@ss-server kevin]$ rm -rf test2
[linan@ss-server kevin]$ ll
total 0
[linan@ss-server kevin]$ 需要注意:
1. 这时候其他普通用户对/opt/kevin目录下的文件可以进行删除和更名权限!尽管这些文件的other用户是r--,因为/opt/kevin目录在其他用户这一权限栏是rwx,
即普通用户对/opt/kevin目录有可写权限。目录可写权限是指可对目录下的文件进行删除、新建和更名操作。
2. 但是此时,普通用户对/opt/kevin目录下的文件本身不能进行修改操作,因为/opt/kevin目录下的文件自身的其他用户这一权限栏是r--。
如果文件权限对其他普通用户设置了可写权限,可就能进行文件修改操作! ===========================================================================================================================================
2)创建粘滞位t权限之后
回到root用户下,给/opt/kevin目录加上粘滞位再次查看目录,发现other的x权限变为t,说明添加粘滞位成功。
[linan@ss-server kevin]$ logout
[root@ss-server ~]# cd /opt/kevin/
[root@ss-server kevin]# ll -d
drwxrwxrwx 2 root root 4096 Dec 6 16:34 .
[root@ss-server kevin]# chmod o+t . #或者直接执行"chmod o+t /opt/kevin"
[root@ss-server kevin]# ll -d
drwxrwxrwt 2 root root 4096 Dec 6 16:34 . 依旧在该目录下重新新建两个文件 test1 和 test2。
[root@ss-server kevin]# touch test1 test2
[root@ss-server kevin]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 6 16:37 test1
-rw-r--r-- 1 root root 0 Dec 6 16:37 test2 再次切换到其他普通用户下,尝试对在/opt/kevin目录设置粘滞位权限后创建的文件test1 和 test2进行删除或更名操作。
结果发现不能删除或更名文件!! (即使给文件授予777权限也不行)
可以证实粘滞位给其它用户带来的安全限制。
[root@ss-server kevin]# su - linan
Last login: Fri Dec 6 16:33:29 CST 2019 on pts/22
[linan@ss-server ~]$ cd /opt/kevin/
[linan@ss-server kevin]$ ll
total 0
-rw-r--r-- 1 root root 0 Dec 6 16:37 test1
-rw-r--r-- 1 root root 0 Dec 6 16:37 test2
[linan@ss-server kevin]$ rm -rf test1
rm: cannot remove ‘test1’: Operation not permitted
[linan@ss-server kevin]$ rm -rf test2
rm: cannot remove ‘test2’: Operation not permitted
[linan@ss-server kevin]$ mv test1 test11
mv: cannot move ‘test1’ to ‘test11’: Operation not permitted
[linan@ss-server kevin]$ mv test2 test22
mv: cannot move ‘test2’ to ‘test22’: Operation not permitted 即使上面给test1、test1文件授予777权限,那么其他用户也不能删除或移动这两个文件!!! 为了进一步证实文件所有者和root依旧可以删除。用root对该文件进行删除操作。结果发现,依旧可以正常删除。
[linan@ss-server kevin]$ logout
[root@ss-server kevin]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 6 16:37 test1
-rw-r--r-- 1 root root 0 Dec 6 16:37 test2
[root@ss-server kevin]# rm -rf test1
[root@ss-server kevin]# rm -rf test2
[root@ss-server kevin]# ll -d
drwxrwxrwt 2 root root 4096 Dec 6 16:48 . 再来验证下,当文件对other用户有可写权限的时候,粘滞位t权限的保护作用!
[root@ss-server kevin]# ll -d
drwxrwxrwt 2 root root 4096 Dec 6 17:00 .
[root@ss-server kevin]# touch test1 test2
[root@ss-server kevin]# chmod 777 test1
[root@ss-server kevin]# chmod 777 test2
[root@ss-server kevin]# ll
total 0
-rwxrwxrwx 1 root root 0 Dec 6 17:00 test1
-rwxrwxrwx 1 root root 0 Dec 6 17:00 test2 [root@ss-server kevin]# su - linan
Last login: Fri Dec 6 16:54:47 CST 2019 on pts/20
[linan@ss-server ~]$ cd /opt/kevin/
[linan@ss-server kevin]$ ll -d .
drwxrwxrwt 2 root root 4096 Dec 6 17:00 .
[linan@ss-server kevin]$ ll
total 0
-rwxrwxrwx 1 root root 0 Dec 6 17:00 test1
-rwxrwxrwx 1 root root 0 Dec 6 17:00 test2
[linan@ss-server kevin]$ echo "123" > test1
[linan@ss-server kevin]$ echo "123" >> test2
[linan@ss-server kevin]$ rm -rf test1
rm: cannot remove ‘test1’: Operation not permitted
[linan@ss-server kevin]$ mv test2 test22
mv: cannot move ‘test2’ to ‘test22’: Operation not permitted 可以看出,尽管test1、test2文件设置了777权限,但是由于它们所在目录/opt/kevin设置了粘滞位t权限!
则其他用户均不能对这两个文件执行rm和mv操作!!!! 再次回到root账号下,删除test1、test2文件
[linan@ss-server kevin]$ logout
[root@ss-server kevin]# ll
total 8
-rwxrwxrwx 1 root root 4 Dec 6 17:00 test1
-rwxrwxrwx 1 root root 4 Dec 6 17:01 test2
[root@ss-server kevin]# rm -rf test1
[root@ss-server kevin]# rm -rf test2
[root@ss-server kevin]# ll
total 0
[root@ss-server kevin]# ll -d .
drwxrwxrwt 2 root root 4096 Dec 6 17:01 .

根据以上示例,可以得出结论
当一个目录被设置为"粘滞位"的t权限后,则该目录下的文件只能由  
1. 超级管理员(root)删除或移动/更名(rm或mv)  
2. 该目录或文件的所有者删除或移动/更名(rm或mv)

需要注意
1. 虽然目录有了粘滞位t权限,other用户不能对该目录的文件进行删除或者移动操作,但是如若other对该文件由w权限,还是可以进行修改文件内容的。
2. 粘滞位只对目录有效,对文件无效。

删除粘滞位t权限的设置

[root@ss-server kevin]# chmod o-t /opt/kevin/
[root@ss-server kevin]# ll -d .
drwxrwxrwx 2 root root 4096 Dec 6 17:01 .

Centos6下关于系统用户密码规则-运维笔记的更多相关文章

  1. Centos7下关于系统用户密码规则-运维笔记

    针对Centos7下的系统用户的密码规则复杂度的设置,处于安全考虑,说明如下: 一.设置密码规则 1)密码长度.有效期 /etc/login.defs文件是当创建用户时的一些规划,比如创建用户时,是否 ...

  2. Linux下Apache(HTTP)基础知识梳理-运维笔记

    HTTP介绍: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传 ...

  3. 重设windows10中的sub linux系统用户密码

    原文:重设windows10中的sub linux系统用户密码 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/haiyoung/article/detai ...

  4. Windows下GIT的用户密码修改

    Windows下GIT的用户密码修改

  5. linux设置系统用户密码

    目录 一:系统用户密码 1.设置用户密码 一:系统用户密码 1.设置用户密码 1.交互式方法 passwd [用户名] 2.免交互式 echo [设置密码] | passwd --stdin [用户名 ...

  6. Linux系统运维笔记(四),CentOS 6.4安装 MongoDB

    Linux系统运维笔记(四),CentOS 6.4安装 MongoDB 1,下载 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6 ...

  7. centos 7 查看系统/硬件信息及运维常用命令+联想Y430P无线网卡驱动安装

     centos 7 查看系统/硬件信息及运维常用命令 当前环境:联想Y430P  CentOS 7.3 [root@yan-001 ~] # uname -a # 查看内核/操作系统/CPU信息的Li ...

  8. Linux系统运维笔记(五),CentOS 6.4安装java程序

    Linux系统运维笔记(五),CentOS 6.4安装java程序 用eclipse编译通的java程序,现需要实施到服务器.实施步骤: 一,导出程序成jar包. 1,在主类编辑界面点右健,选  ru ...

  9. Linux系统运维笔记(四),CentOS 6.4安装Nginx

    Linux系统运维笔记(四),CentOS 6.4安装Nginx 1,安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool op ...

随机推荐

  1. 修改css的(屏蔽)overflow: hidden;实现浏览器能把网页全图保存成图片

    摘要: 1.项目需要,需要对网页内容“下载”保存成全图片 2.QQ浏览器等主流浏览器都支持这种下载保存功能 3.项目需要场景:编写好的项目维护文档,放在服务器上.如果是txt不能带图片可视化,如果wo ...

  2. apache 80端口占用问题

    今天安装mongodb后发现apache无法启动 命令行 services.msc 打开服务 在服务里启动Apache2a服务,报错误码1 网上查有很多情况都报的1 可以通过命令行下  执行apach ...

  3. 真机测试以及appstore发布流程

    一.添加真机测试流程:http://jingyan.baidu.com/article/48b558e33b96a27f38c09aa4.html 二.app发布流程:http://jingyan.b ...

  4. Java设计模式之二 ----- 工厂模式

    在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模式,又 ...

  5. 【转载】Linux 内存管理机制

    在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,主要特点是,无论物理内存有多大,Linux 都将其充份利用,将 ...

  6. 一个比较全面 的web项目实战学习

    一个比较全面 的web项目实战学习:http://www.cnblogs.com/jikey/p/3613082.html

  7. 使用pymysql(使用一)

    创建数据表 import pymysql db = pymysql.connect("localhost","root",""," ...

  8. 【洛谷】【最小生成树】P1536 村村通

    [题目描述:] 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路 ...

  9. linux(centos 7)下安装elasticsearch - head插件(端口占用,防火墙关闭)

    本文章来自网络仅供个人学习记录之用 一:安装Git(如果未安装) 1, yum install git 2, git --version #查看版本 二:安装node(如果未安装) node安装 三: ...

  10. Qt 编程指南 4 单行编辑控件

    从 Qt 设计师界面可以看到常用的 Qt 文本编辑和浏览控件,包括四个: 其中单行编辑控件 QLineEdit 和 普通文本编辑控件 QPlainTextEdit 都是针对最普通的 C++ 字符串编辑 ...