如果存在这样的一个需求,如果在一个目录下每个用户可以互相查看文件,但是不允许 a 用户去删除 b 用户的文件,反之 b 用户也不允许去删除 a 用户的文件。不仅指删除,也不允许对文件重命名之类的操作。Linux 中如果 sticky 权限位置于文件夹上,则恰好覆盖这个场景。
示例操作
创建目录并设置权限
$ pwd
/home/jake/Desktop/workspace/tmp
$ su root
$ mkdir tdir
$ ls -la
drwxr-xr-x. 2 root root 4096 Jan 7 14:30 tdir
$ chmod +t tdir
$ chmod o+w tdir
$ ls -la
drwxr-xrwt. 2 root root 4096 Jan 7 14:30 tdir
$ cd tdir
可以看到这边的文件权限位有个 t 的标志。
切换用户,分别创建文件。
$ su jake
$ echo "aa" > aa
$ su jake2
$ echo "bb" > bb
$ ls -la
-rw-rw-r--. 1 jake jake 3 Jan 7 14:39 aa
-rw-rw-r--. 1 jake2 jake2 3 Jan 7 14:42 bb
jake2 尝试读取文件
$ cat aa
aa
jake2 尝试编辑文件
$ echo "update" >> aa
bash: aa: Permission denied
jake2 尝试去删除文件
$ rm -rf aa
rm: cannot remove ‘aa’: Operation not permitted
$ mv aa aa1
mv: cannot move ‘aa’ to ‘aa1’: Operation not permitted
操作系统中的实践
这个功能在操作系统中其中的一个实践在于临时文件夹,可以这样查看
$ ls /
...
drwxrwxrwt. 31 root root 4096 Jan 7 14:49 tmp
...
``
各个用户创建自己的临时文件,其他用户可以查看,但是不能进行删除和重命名,因为文件路径不正确可能会带来异常错误,譬如 `go build` 中间会产生很多临时文件。








网友评论