5个以上在Linux中学习粘滞位的实用示例
在本文中,我们将通过示例以及与此特殊权限相关的所有内容来了解Unix或者Linux粘性位
以下是在Linux和Unix中我们用来对文件和目录强制执行权限和限制的最常用工具
chmod
chown
setfacl
chattr
但是除此之外,还有三种其他类型的"特殊许可"可以在Linux或者Unix中使用
setuid
setgui
粘性位
这些特殊权限中的每一个都有各自的优势,我们可以根据需要决定选择它们。将介绍各种示例,以分别了解每个特殊权限。
让我们了解Linux和Unix中的粘性位特殊权限。
为什么我们不再对文件使用粘性位?
在chmod的手册页中,对于"较旧的Linux和Unix系统"上的常规文件,该位将程序的文本图像保存在swap设备上,以便在执行时可以更快地加载;这就是所谓的粘性位。
之所以使用粘性名称,是因为文件的文本部分一直停留在交换区域中,直到重新引导系统为止。
在早于按需分页的旧版Linux和UNIX系统上,此位称为"粘滞位"。
如果将其设置为可执行程序文件,则在第一次执行该程序时,"当进程终止时,该程序文本的副本将保存在交换区域中"。
然后,与常规UNIX文件系统中数据块的可能随机位置相比,该程序将在下一次执行时更快地加载到内存中,因为交换区域被视为连续文件。
Unix粘性位通常是为常见的应用程序设置的,例如文本编辑器和C编译器的传递。
自然,在用尽交换空间之前,交换区域中可以包含的粘性文件的数量受到限制,但这是一种有用的技术。
之所以使用粘性名称,是因为文件的文本部分一直停留在交换区域中,直到重新引导系统为止。
在当今更新的Linux和UNIX系统中,其中大多数具有虚拟内存系统和更快的文件系统,"对这种技术的需求已经消失"。
因此,今天"我们主要在目录而不是文件上使用粘性位"。
粘性位特殊权限是什么?
Linux粘性位是为目录设置的,"它防止非特权用户删除或者重命名目录中的文件",除非他们拥有该文件或者目录。这称为目录的受限删除标志。
目录"/tmp"和"/var/tmp"是linux粘性位的典型候选项,它们是任何用户通常都可以其中创建文件的目录。这两个目录的权限通常是每个人(用户,组和其他)的读取,写入和执行权限。 但是用户不应删除或者重命名他人拥有的文件。
通过添加linux粘性位权限,目录的写权限将更改含义。
"现在唯一可以删除此目录中文件的用户是",而不是"添加和删除目录中的所有文件"。
文件的所有者或者
目录的所有者(通常是root用户)或者
根用户
只要文件不会导致覆盖其他用户的文件,任何人都仍可以将文件添加到该目录中。
如我们所见/tmp
和/var/tmp
,默认情况下具有粘性位权限
# ls -ld /var/tmp//tmp/ drwxrwxrwt. 9 root root 4096 Mar 23 18:45 /tmp/ drwxrwxrwt. 3 root root 4096 Mar 22 14:50 /var/tmp/
说明:
如果将Solaris 10设置在常规文件中,则它在Unix粘性位上具有特殊含义。在这种情况下,如果未设置任何执行位,则操作系统将不会缓存文件的内容。
如何在Linux或者Unix中应用粘性位
有两种方法可以使用chmod
来应用Linux或者Unix粘性位特殊权限1.八进制方法(1)2.符号方法(t)
就本文而言,我将假定我们熟悉用户,组和其他用户的不同权限字段。
使用八进制方法设置粘性位(1)
以下是在Linux和Unix中通过chmod使用Octal方法使用Linux粘性位的一些示例。我创建了一个目录/tmp/marketing,我将在该目录上应用linux粘性位特殊权限
# mkdir /tmp/marketing
要获得755许可才能粘贴粘稠位
# chmod 1755 marketing/
如我们所见,"其他人的执行字段"中显示了" t"
# ls -ld marketing drwxr-xr-t 2 root root 4096 Mar 23 17:47 marketing
下一个在750许可下应用粘性位
# chmod 1750 marketing
如果我们验证了权限,则会看到大写字母" T",而与上面看到的小写字母" t"不同
# ls -ld marketing drwxr-x--T 2 root root 4096 Mar 23 17:47 marketing
使用八进制方法重置粘性位(1)
那么现在我们如何使用八进制方法删除t
权限?与上述命令类似,我们也可以使用chmod
删除或者取消设置Linux粘性位特殊权限。要使用八进制方法删除粘滞位许可权,我们只需要在将许可权应用于目录或者文件时避免使用" 1"即可。例如,此处在" marketing"目录上设置了Linux粘滞位:
# ls -ld marketing drwxr-x--T 2 root root 4096 Mar 23 17:47 marketing
因此,要取消设置粘性位,我们只需应用新的权限,而无需指定粘性位的八进制值:
# chmod 755 marketing
验证权限,如我们所见,删除了linux或者unix粘性位权限
# ls -ld marketing drwxr-xr-x 2 root root 4096 Mar 23 17:47 marketing
另外,我们可以使用0个八进制值来"删除粘性位特殊权限",如下所示:
# chmod 0755 marketing
接下来,我们可以验证目录的权限:
# ls -ld marketing drwxr-xr-x 2 root root 4096 Mar 23 17:47 marketing
如我们所见,我们已成功取消设置linux或者unix sticky bit的特殊权限
提示:
仅当我们还打算更改或者修改目录的权限时,才必须使用八进制方法来应用粘性位,或者我建议我们使用符号方法在Linux或者Unix中设置粘性位。
我敢肯定,我们会在这个阶段想知道,小" t"和大写字母" T"之间有什么区别。我将在本文的后面部分讨论这个问题。
使用符号方法(t)设置粘性位
以下是在Linux和Unix中使用带有chmod
的Symbolic方法设置Linux粘性位的示例。我创建了一个目录"/tmp/marketing",在该目录上我将应用unix粘性位特殊权限
# mkdir /tmp/marketing # ls -ld marketing drwxr-xr-x 2 root root 4096 Mar 23 17:47 marketing
要"使用符号方法设置粘性位特殊权限",请使用以下命令:
# chmod +t marketing
接下来验证权限:
# ls -ld marketing drwxr-xr-t 2 root root 4096 Mar 23 17:47 marketing
不出所料,在权限的执行部分有" small" t
另外,我们也可以将o + t
与chmod
设置粘滞位许可权一起使用。 o表示其他字段
# chmod o+t marketing
提示:
我们不能使用" u + t"或者" g + t",即我们不能将粘性位应用于用户和组部分,粘性位只能应用于权限的"其他"部分
使用符号方法(t)重置粘性位
因此,现在我们如何使用符号方法删除t
权限?与上述命令类似,我们也可以使用符号方法(t
)删除或者取消设置Unix粘性位权限。要删除粘性位,我们只需要使用(-t
)而不是我们之前使用的(+ t
):
例如,对于同一目录,我们可以在命令之下执行以取消设置粘滞位特殊许可权:
# chmod -t marketing/
验证权限:
# ls -ld marketing drwxr-xr-x 2 root root 4096 Mar 23 17:47 marketing
另外,我们也可以使用(o-t
),即"删除其他用户的粘性位许可"
# chmod o-t marketing/
说明:
"使用符号方法的优点"是我们不修改目录的现有权限,而仅应用或者删除粘滞位权限
Unix和Linux Sticky Bit权限中的大写字母" T"和小写字母" t"有什么区别?
当Unix或者Linux粘性位与其他字段的执行权限结合使用时,我们将看到小写的" t",即drwxr-xr-t
,如果没有为其他对象设置执行权限,则将看到大写的" T",即drwxr-x --TI希望我们了解许可字段的不同部分。例如,对于大写字母" T",即drwxr-x--T
第一部分 | 第二部分 | 第三部分 | 第四部分 |
---|---|---|---|
d/- | rwx | r-x | --T |
d代表目录 -代表文件 | r→读 w→写 x→执行 | r→读 -→无写权限 x→执行 | -→无读权限 -→无写权限 T→“无执行权限+粘滞位” |
第一个字段是标识文件或目录 | 用户所有者的权限 | 组所有者的权限 | 其他人的权限 |
类似地,小写“t”,即“drwxr-x--t”
第一部分 | 第二部分 | 第三部分 | 第四部分 |
---|---|---|---|
d/- | rwx | r-x | --t |
d代表目录 -代表文件 | r→读 w→写 x→执行 | r→读 -→无写权限 x→执行 | -→无读权限 -→无写权限 t→“执行权限+粘滞位” |
第一个字段是标识文件或目录 | 用户所有者的权限 | 组所有者的权限 | 其他人的权限 |
因此,总结一下:
如果"其他"部分包含执行权限+粘滞位,则将获得小写的" t"
如果"其他"部分不包含执行许可权,仅包含粘性位,那么我们将获得大写的" T"
粘性位如何工作?为什么我们在Linux或者Unix中使用粘性位?
到目前为止,我们已经了解了理论上的粘性位,让我们看一些实际的Linux/Unix粘性位操作示例。我将在我的/tmp/marketing
目录中应用粘性位
# mkdir /tmp/marketing # chmod +t /tmp/marketing/ # ls -ld /tmp/marketing/ drwxrwxrwt 2 root root 4096 Mar 23 17:45 /tmp/marketing/
我在这个系统上有两个用户,分别是user1和user2. 现在,两个用户都应该将其文件放置在/tmp/marketing
下
[user1@centos-8 ~]$touch /tmp/marketing/user1_file [user2@centos-8 ~]$touch /tmp/marketing/user2_file
因此,两个用户都在/tmp/marketing目录下创建了一个文件。
[user1@centos-8 marketing]$ls -l total 0 -rw-rw-r-- 1 user1 user1 0 Mar 23 17:47 user1_file -rw-rw-r-- 1 user2 user2 0 Mar 23 17:44 user2_file
但是,如果user1打算删除user2的文件怎么办?
[user1@centos-8 marketing]$rm -f user2_file rm: cannot remove 'user2_file': Operation not permitted
如我们所见,由于我们对父目录具有粘性位权限,因此 允许非特权用户删除或者修改仅由自己拥有的文件。
如何查找具有粘帖权限的文件和目录?
我们知道/tmp
和/var/tmp
目录默认情况下包含粘性位特殊权限。现在要查找具有粘性位许可权的其他文件和目录,可以使用带有-perm -1000的find命令。
当-perm参数带有减号时,将检查所有权限位,包括设置的用户ID,设置的组ID和粘性位。
例如:要查找具有Linux粘性位权限的" /"下的所有"目录",请使用以下命令
# find/-perm -1000 -type d /sys/fs/bpf /dev/mqueue /dev/shm /tmp /tmp/.font-unix /tmp/.X11-unix