您当前的位置: 首页 >  linux

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Linux基础:Sticky Bit(粘滞位)使用说明

发布时间:2019-12-10 07:15:49 ,浏览量:0

在这里插入图片描述 Sticky Bit是Linux或Unix系统下的一种特殊的权限标识位,它可以赋予文件或者目录。而被赋予此权限位的文件或者目录可以实现只有Owner或者root才可以进行移动、删除或者重命名操作。

Sticky Bit的起源

Sticky Bit并不是一个新的概念,而事实上早在1974年它就被引入了Unix操作系统中了,而当时引入的目的则是不同的,是用于降低每次应用程序执行时的时间延迟,程序在执行时,首先要加载至内存之中,在用户使用之前会需要一些时间,Sticky Bit为了对此进行改善而引入,操作系统会检测是否设定了Sticky Bit,如果设定了,会将可执行程序的text段数据保存在交换空间(swap)中,通过swap的使用降低了反复使用情况下的时间延迟。而当下Sticky Bit主要应用在是否允许其他用户来删除Owner创建的文件或者目录。

不同操作系统的实现

可以看到本文示例的Linux操作系统下对于文件的Sticky Bit是无视的,而事实上不同的操作系统动作可能是不同的,一部分操作系统关于Sticky Bit的实现如下图所示: 在这里插入图片描述

使用示例

Linux操作系统的/tmp目录一般缺省会在Others组设定此权限位

[root@liumiaocn ~]# uname -a
Linux liumiaocn 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@liumiaocn ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
[root@liumiaocn ~]# ls -ld /tmp
drwxrwxrwt. 14 root root 4096 Dec  8 23:01 /tmp
[root@liumiaocn ~]#
设定/取消方法
  • 事前准备 创建3个目录用于设定Sticky Bit
[root@liumiaocn ~]# ls -ld /root
dr-xr-x---. 12 root root 4096 Dec  9 02:10 /root
[root@liumiaocn ~]# mkdir stickybit
[root@liumiaocn ~]# cd stickybit/
[root@liumiaocn stickybit]# mkdir dir_stickybit1 dir_stickybit2 dir_stickybit3
[root@liumiaocn stickybit]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Dec  9 02:14 dir_stickybit1
drwxr-xr-x. 2 root root 6 Dec  9 02:14 dir_stickybit2
drwxr-xr-x. 2 root root 6 Dec  9 02:14 dir_stickybit3
[root@liumiaocn stickybit]#
  • 设定方法

设定方法:chmod +t 目录或者文件名

或者

设定方法:chmod o+t 目录或者文件名

或者

设定方法:chmod a+t 目录或者文件名

无论使用哪种方式,Sticky Bit只能设定到Others组上,在显示上替代了原先的x执行选项。比如:

[root@liumiaocn stickybit]# chmod o+t dir_stickybit1
[root@liumiaocn stickybit]# ls -ld dir_stickybit1
drwxr-xr-t. 2 root root 6 Dec  9 02:14 dir_stickybit1
[root@liumiaocn stickybit]#
  • 取消方法

取消方法:chmod -t 目录或者文件名

或者

设定方法:chmod o-t 目录或者文件名

或者

设定方法:chmod a-t 目录或者文件名

使用方法示例如下所示:

[root@liumiaocn stickybit]# ls -ld dir_stickybit2
drwxr-xr-t. 2 root root 6 Dec  9 02:14 dir_stickybit2
[root@liumiaocn stickybit]# chmod -t dir_stickybit2
[root@liumiaocn stickybit]# ls -ld dir_stickybit2
drwxr-xr-x. 2 root root 6 Dec  9 02:14 dir_stickybit2
[root@liumiaocn stickybit]#
特殊的T

正常Sticky Bit会显示为t,如果缺少了x权限,加上Stick Bit时,在Linux下会显示为T,表示此文件或者目录的Others缺少x权限。

[root@liumiaocn stickybit]# chmod 744 dir_stickybit3
[root@liumiaocn stickybit]# ls -ld dir_stickybit3
drwxr--r--. 2 root root 6 Dec  9 02:14 dir_stickybit3
[root@liumiaocn stickybit]# chmod +t dir_stickybit3
[root@liumiaocn stickybit]# ls -ld dir_stickybit3
drwxr--r-T. 2 root root 6 Dec  9 02:14 dir_stickybit3
[root@liumiaocn stickybit]#

文件也是一样,加上x执行权限立即就会恢复为t,实际上t的显示只是替代了x,并不是说明去除了x,通过这种方式也能确认x的权限,另外目录没有x权限的情况下,cd到此目录都无法进入,也是一种特殊的限定了,所以通过T来予以标识。

动作确认 事前准备

为了验证权限,添加两个用户,并设定验证两个验证目录,一个带有Sticky Bit,一个不带。

[root@liumiaocn stickybit]# useradd liumiao
[root@liumiaocn stickybit]# useradd michael
[root@liumiaocn stickybit]# id liumiao
uid=1002(liumiao) gid=1002(liumiao) groups=1002(liumiao)
[root@liumiaocn stickybit]# id michael
uid=1003(michael) gid=1003(michael) groups=1003(michael)
[root@liumiaocn stickybit]#
[root@liumiaocn stickybit]# chmod 777 dir_stickybit1
[root@liumiaocn stickybit]# chmod +t dir_stickybit1
[root@liumiaocn stickybit]# chmod 777 dir_stickybit2
[root@liumiaocn stickybit]# chown liumiao:liumiao dir_stickybit[1-2]
[root@liumiaocn stickybit]# ls -ld dir_stickybit[1-2]
drwxrwxrwt. 2 liumiao liumiao 6 Dec  9 02:14 dir_stickybit1
drwxrwxrwx. 2 liumiao liumiao 6 Dec  9 02:14 dir_stickybit2
[root@liumiaocn stickybit]#

在此两个目录之下创建文件,分别给予777的权限位设定

[liumiao@liumiaocn stickybit]$ ls -ld dir_stickybit[1-2]
drwxrwxrwt. 2 liumiao liumiao 34 Dec  9 03:13 dir_stickybit1
drwxrwxrwx. 2 liumiao liumiao 34 Dec  9 03:15 dir_stickybit2
[liumiao@liumiaocn stickybit]$ ls -l dir_stickybit[1-2]
dir_stickybit1:
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file11
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file12

dir_stickybit2:
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file21
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file22
[liumiao@liumiaocn stickybit]$

由于目录是在/root下创建的,新创建的用户缺少相应的权限,此处为了验证,临时添加如下权限设定:

[root@liumiaocn stickybit]# chmod o+x /root
[root@liumiaocn stickybit]# chmod o+w /root/stickybit/
[root@liumiaocn stickybit]# ls -ld /root/stickybit/
drwxr-xrwx. 5 root root 88 Dec  9 02:47 /root/stickybit/
[root@liumiaocn stickybit]#
没有权限位的777的目录

没有权限位的普通目录下,777由于Others具有w的权限,所以可以随意进行mv操作

[michael@liumiaocn stickybit]$ ls -ld dir_stickybit2
drwxrwxrwx. 2 liumiao liumiao 34 Dec  9 03:15 dir_stickybit2
[michael@liumiaocn stickybit]$ cd dir_stickybit2
[michael@liumiaocn dir_stickybit2]$ ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file21
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file22
[michael@liumiaocn dir_stickybit2]$ id
uid=1003(michael) gid=1003(michael) groups=1003(michael) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[michael@liumiaocn dir_stickybit2]$ mv file21 file211
[michael@liumiaocn dir_stickybit2]$ ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file211
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file22
[michael@liumiaocn dir_stickybit2]$

当然Owner更没有问题了

[liumiao@liumiaocn stickybit]$ id
uid=1002(liumiao) gid=1002(liumiao) groups=1002(liumiao) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[liumiao@liumiaocn stickybit]$ ls -ld dir_stickybit2
drwxrwxrwx. 2 liumiao liumiao 35 Dec  9 03:18 dir_stickybit2
[liumiao@liumiaocn stickybit]$ cd dir_stickybit2
[liumiao@liumiaocn dir_stickybit2]$ ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file211
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file22
[liumiao@liumiaocn dir_stickybit2]$ mv file211 file21
[liumiao@liumiaocn dir_stickybit2]$ ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file21
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file22
[liumiao@liumiaocn dir_stickybit2]$
拥有Sticky Bit权限位的目录

拥有Sticky Bit的目录,对于非Owner的其他用户,也无法删除此目录下拥有权限的文件

[michael@liumiaocn stickybit]$ ls -ld dir_stickybit1
drwxrwxrwt. 2 liumiao liumiao 34 Dec  9 03:13 dir_stickybit1
[michael@liumiaocn stickybit]$ cd dir_stickybit1
[michael@liumiaocn dir_stickybit1]$ ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file11
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file12
[michael@liumiaocn dir_stickybit1]$ mv file11 file111
mv: cannot move ‘file11’ to ‘file111’: Operation not permitted
[michael@liumiaocn dir_stickybit1]$ id
uid=1003(michael) gid=1003(michael) groups=1003(michael) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[michael@liumiaocn dir_stickybit1]$

而Owner则自由无碍

[liumiao@liumiaocn stickybit]$ ls -ld dir_stickybit1
drwxrwxrwt. 2 liumiao liumiao 34 Dec  9 03:13 dir_stickybit1
[liumiao@liumiaocn stickybit]$ cd dir_stickybit1
[liumiao@liumiaocn dir_stickybit1]$ id
uid=1002(liumiao) gid=1002(liumiao) groups=1002(liumiao) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[liumiao@liumiaocn dir_stickybit1]$ ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file11
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file12
[liumiao@liumiaocn dir_stickybit1]$ mv file11 file111
[liumiao@liumiaocn dir_stickybit1]$ ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file111
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file12
[liumiao@liumiaocn dir_stickybit1]$
T权限的验证

事前准备

[root@liumiaocn stickybit]# chmod o-x dir_stickybit3
[root@liumiaocn stickybit]# chown liumiao:liumiao dir_stickybit3
[root@liumiaocn stickybit]# ls -ld dir_stickybit3
drwxrwxrwT. 2 liumiao liumiao 34 Dec  9 03:25 dir_stickybit3
[root@liumiaocn stickybit]# ls -l dir_stickybit3
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file31
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file32
[root@liumiaocn stickybit]#

非Owner无法mv

[michael@liumiaocn stickybit]$ id
uid=1003(michael) gid=1003(michael) groups=1003(michael) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[michael@liumiaocn stickybit]$ cd dir_stickybit3
-bash: cd: dir_stickybit3: Permission denied
[michael@liumiaocn stickybit]$ mv dir_stickybit3/file31 dir_stickybit3/file311
mv: failed to access ‘dir_stickybit3/file311’: Permission denied
[michael@liumiaocn stickybit]$

拥有权限的Owner则可随意操作

[liumiao@liumiaocn stickybit]$ id
uid=1002(liumiao) gid=1002(liumiao) groups=1002(liumiao) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[liumiao@liumiaocn stickybit]$ ls -ld dir_stickybit3
drwxrwxrwT. 2 liumiao liumiao 34 Dec  9 03:25 dir_stickybit3
[liumiao@liumiaocn stickybit]$ cd dir_stickybit3
[liumiao@liumiaocn dir_stickybit3]$ ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file31
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file32
[liumiao@liumiaocn dir_stickybit3]$ mv file31 file311
[liumiao@liumiaocn dir_stickybit3]$ ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file311
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file32
[liumiao@liumiaocn dir_stickybit3]$
同一group用户的验证
  • 事前准备
[root@liumiaocn stickybit]# useradd -g liumiao liumiaocn
[root@liumiaocn stickybit]# id liumiaocn
uid=1004(liumiaocn) gid=1002(liumiao) groups=1002(liumiao)
[root@liumiaocn stickybit]#

可以操作t权限位下同一Group的目录下的文件

[root@liumiaocn stickybit]# ls -l
total 0
drwxrwxrwt. 2 liumiao liumiao 35 Dec  9 03:24 dir_stickybit1
drwxrwxrwx. 2 liumiao liumiao 34 Dec  9 03:21 dir_stickybit2
drwxrwxrwT. 2 liumiao liumiao 35 Dec  9 03:36 dir_stickybit3
-rwxrwxrwt. 1 root    root     0 Dec  9 02:47 testTbit
[root@liumiaocn stickybit]# cd dir_stickybit1
[root@liumiaocn dir_stickybit1]# ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file111
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file12
[root@liumiaocn dir_stickybit1]# mv file111 file11
[root@liumiaocn dir_stickybit1]# ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file11
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:13 file12
[root@liumiaocn dir_stickybit1]#

同样T权限位也一样

[root@liumiaocn dir_stickybit1]# cd ..
[root@liumiaocn stickybit]# ls -l
total 0
drwxrwxrwt. 2 liumiao liumiao 34 Dec  9 03:40 dir_stickybit1
drwxrwxrwx. 2 liumiao liumiao 34 Dec  9 03:21 dir_stickybit2
drwxrwxrwT. 2 liumiao liumiao 35 Dec  9 03:36 dir_stickybit3
-rwxrwxrwt. 1 root    root     0 Dec  9 02:47 testTbit
[root@liumiaocn stickybit]# cd dir_stickybit3
[root@liumiaocn dir_stickybit3]# ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file311
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file32
[root@liumiaocn dir_stickybit3]# mv file311 file31
[root@liumiaocn dir_stickybit3]# ls -l
total 0
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file31
-rwxrwxrwx. 1 liumiao liumiao 0 Dec  9 03:25 file32
[root@liumiaocn dir_stickybit3]#
总结

Linux下,Sticky bit主要作用于目录,保证目录下Others组的用户不会将一些使用中的临时文件删除,同一Group的用户可以进行操作。

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.4955s