运行该命令时 ls -ld /tmp
,输出将是:
drwxrwxrwt 30 root root 20480 Mar 11 14:17 /tmp
我有两个主要问题:
t
许可后面的字母是什么?- 据我所知
/tmp
是用于创建与系统中不同用户相关的临时文件,那么它怎么会有权限rwxrwxrwx
(777)呢?
我觉得这不对。请帮我了解一下发生了什么。
答案1
那么粘性位是什么?
粘性位是设置在目录中的权限位,只允许该目录中文件的所有者、目录所有者或 root 用户删除或重命名该文件。其他用户没有删除其他用户创建的文件所需的权限。
这是一种安全措施,可以避免删除关键文件夹及其内容(子目录和文件),尽管其他用户拥有完全权限。
为什么/tmp
会有t
粘性位?
该/tmp
目录可供不同的 Linux 用户创建临时文件。现在,如果一个用户删除/重命名了此目录中其他用户创建的文件,该怎么办?
好吧,为了避免这类问题,可以使用粘性位的概念。因此,777
给定一个,但保留粘性位并不是一个坏主意。
如何设置目录的粘滞位?
test
我将在我的桌面上的一个目录上设置一个粘性位。
使用符号表示法(t
代表粘着位):
chmod o+t ~/Desktop/test
或者
chmod +t ~/Desktop/test
使用八进制表示法(1
第一个位置代表粘着位):
chmod 1757 ~/Desktop/test
现在我们来测试一下结果:
ls -li ~/Desktop/test
1551793 drwxrwxrwt 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test
删除/移除粘着位
chmod o-t ~/Desktop/test
现在我们来测试一下结果:
ls -li ~/Desktop/test
1551793 drwxrwxrwx 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test
答案2
粘性位是设置在文件或目录上的权限位,仅允许文件/目录的所有者或 root 用户删除或重命名文件。其他用户无权删除其他用户创建的文件。
有时你需要一个 Linux 目录,供 Linux 系统的所有用户创建文件。用户可以在这个目录中根据自己的方便创建、删除或重命名文件。
现在,如果用户意外或故意删除(或重命名)此目录中其他用户创建的文件,该怎么办?
为了避免此类问题,我们使用了粘性位的概念。因为/tmp用于此目的。因此,为了避免上述情况,/tmp使用粘着位。
例如:
mkdir demo
chmod 777 demo
我还在此文件夹中以不同的用户创建了两个文件,其权限为 777。
ls -ld demo
drwxrwxrwx 2 guru guru 4096 Mar 11 18:17 demo
ls -l demo
-rwxrwxrwx 1 abhi abhi 0 Mar 11 17:11 file1
-rwxrwxrwx 1 anshu anshu 0 Mar 11 18:15 file2
现在打开这个
chmod +t demo/
ls -ld demo
drwxrwxrwt 2 guru guru 4096 Mar 11 18:17 demo
现在,如果一个用户(abhi)想要重命名第二个用户(anshu),会发生什么情况
mv /home/guru/demo/file2 /home/guru/demo/file3
mv: cannot move '/home/guru/demo/file2' to '/home/guru/demo/file3': Operation not permitted
粘滞位的由来
在 Linux 上,粘性位仅在目录上有上述用途。从历史上看,它对常规文件有完全不同的用途,这就是其名称的由来。
当执行程序时,需要花费一些时间将程序加载到内存中,然后用户才能真正开始使用它。如果某个程序(例如编辑器)被用户频繁使用,那么启动时间延迟在当时就是一项开销。
为了改善这种时间延迟,引入了粘滞位。操作系统检查可执行文件上的粘滞位是否为 ON,然后可执行文件的文本段将保留在交换空间中。这使得在程序再次运行时可以轻松地将可执行文件加载回 RAM,从而最大限度地减少时间延迟。
现代系统(例如 Linux)会自动管理其可执行文件和其他文件的缓存,因此不需要粘滞位。
答案3
粘性位是一种避免意外删除共享目录的变通方法。当目录具有粘性位时,只有所有者或根可以删除它,即使每个用户都可以获得其他所有权限。
/tmp
是进程和用户之间共享最多的目录,为此它包含 stickybit 以确保没有用户可以删除该目录,即使权限为777
,也必须如此,以便用户和进程能够使用该目录而不会发生权限冲突。