5个以上在Linux中学习粘滞位的实用示例

时间:2020-02-23 14:40:33  来源:igfitidea点击:

在本文中,我们将通过示例以及与此特殊权限相关的所有内容来了解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 + tchmod设置粘滞位许可权一起使用。 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/-rwxr-x--T
d代表目录

-代表文件
r→读

w→写

x→执行
r→读

-→无写权限

x→执行
-→无读权限

-→无写权限

T→“无执行权限+粘滞位”
第一个字段是标识文件或目录用户所有者的权限组所有者的权限其他人的权限

类似地,小写“t”,即“drwxr-x--t”

第一部分第二部分第三部分第四部分
d/-rwxr-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