前言
前一个系列【Linux之权限】我们详细地了解了Linux中权限的问题,那么,我们理解了用户间的“隔离”,那么又该怎么进行多用户协作呢?
本文就来回答这个问题。
现象
在正式回答这个问题之前,我们先来看一下这个现象。
我们在用户whb的所属的一个目录里以root身份创造了一个文件root.txt,其拥有者和所属组都是root,然后我们通过
sudo chmod a-rwx root.txt
把所有人的所有权限去掉。
可以看到,所以现在我们的whb没法cat和echo这个root.txt,没有读写权限。但是我们居然可以把这个文件删除:
这个问题的原因是什么?这正常吗?这其实是正常的。因为当前我们是在lesson5目录下:
whb是这个目录的拥有者,对该目录有写权限,而对目录有写权限就意味着可以在这个目录里创建和删除文件。因为一个文件能否被删除和文件自己无关!而是和所处的目录权限有关。
一个用户对文件所处的目录有写权限,那么就算这个文件没有给这个用户开放任何权限,这个用户却可以把这个文件删除。
不过除了root,一般情况下没有人可以进入“我家”,在“我家”新建文件。
多用户协作
但若两人想协作呢?想共同修改或者查看一个配置文件。
它俩账号之间隔离,进入不了彼此的目录。如果两个用户之间要进行文件级别的协作呢?那么这个文件就不能放在任何一个用户的私人账号里。
应该放在哪?
Linux里不只有home目录。
Linux的根目录下有一个和home平级的路径:tmp
ll /
我们可以看到根目录里:
bin或者user/bin里面一般放的就是系统的指令;
boot里面一般是与启动相关的操作系统或配置文件;
dev是启动时操作系统所识别到的各种设备,如键盘、显示器、网卡;
etc都是系统启动后的一些配置文件;
home我们已经知道了;
lib或者user/lib代表的一般是一些动静态库;
lib64指的是64位的库;
lost+found这个不管;
media是一些媒体设备(u盘);
mnt和opt不管;
proc是查看进程相关的信息;
root就是root账号;
var是日志信息;
……
我们将目光放到tmp路径,这里面放的是系统产生的各种临时文件。
根目录可以用d选项进行查看其权限:
ls -ld /
根目录的拥有者和所属组都是root,想在根目录下新建文件,也必须使用root权限。
我们现在在根目录下新建一个temp-backup目录,并把权限放开。
(共享文件夹一般都属于root)
(其实以后用tmp就可以)
但是,这个目录里面的文件现在,谁都能删除。
共享类目录下,别人为什么能删自己的文件呢?因为删一个文件和文件本身无关,而是和所处目录的写权限相关。
但是other的w我们不能去掉,因为这样,其他人就不能在这个目录下创建文件,共享的作用就不复存在了。
这就形成了一个悖论。
所以 Linux中引入了一个新的权限标志位,粘滞位:t
可以看到,x的位置变成了t。
这种给目录添加的t,叫做粘滞位,任何一个人可以在共享目录下新建,但是不能让非拥有者删除。只给需要共享的目录添加粘滞位。
但这粘滞位,对root没办法,它还是可以删除里面的文件。
我们可以看回根目录下的tmp,已经有粘滞位了。所以用它就可以。
=_=
本文结束了,祝阅读愉快!
版权归原作者 Octopus2077 所有, 如有侵权,请联系我们删除。