前言
在前两篇文章里,我们已经学习了Linux中权限的理论、实践和重点,接下来我们将进一步提升对Linux权限的全面认知。虽是拓展,其实还是重点。
本文内容并不多,那我们就开始吧。
目录的权限该如何理解呢?
- 如果我想进入一个目录,需要什么权限?
和读权限没关系,和写权限也没关系。和x有关系。x对普通文件意味着执行权限,对目录意味着进出的权限。
- 那r和w分别对目录意味着什么?
如果一个用户对目录没有r权限,在进入这个目录后,ls
我们将得到这样的报错:
目录里的文件就相当于在目录里面,没有读权限就无法查看目录里面的内容。
但是我们可以写,也就是说可以在目录里创建文件:
可以看到,都不会报错。
同样的,对于root来说,就算什么角色的权限都去掉了,root仍可以rwx。不受约束。
- 默认情况下,我们新建一个目录,一般(对于拥有者)rwx权限都要有。
理解Linux多用户之间是怎么互相“隔离”的。
在Linux中,每新建一个普通用户,都会在home这个目录里,新建一个以这个普通用户为名的文件夹。
下次普通用户登录时,就默认在这个家目录里面。/home/naruto
我们还可以从上图看到,whb这个文件夹的拥有者和所属组就是自己,且只对所有者开放了rwx权限。这意味着任何用户,无法进入其他用户的家目录也无法读和写。这就是所谓的用户之间的“隔离”。
缺省权限
我们可以发现,普通文件的默认权限是这样的:rw-rw-r–
而目录的默认权限是:rwxrwxr-x
缺省值的设置:
但是为什么我们创建时的初始值却不是这样的呢?
甚至对于不同人的linux,可能默认值又不一样:
这是因为系统里有一个权限掩码(不同人的linux可能不同)。umask
可以查:
这里一个位是八进制的。第一个0是与用户相关的,我们不用考虑在内。也就是看002。
002的二进制是000 000 010,最终权限=起始权限&(~umask)
~umask是111 111 101,将其与初始权限111 111 111按位与得到111 111 101,转成八进制是775。
umask目的是什么?
凡是在umask中出现的权限,都不应该在最终权限中出现。
可以看到000 000 010里只有other的写权限为1,那么~就只有other的写权限为0,根据按位与,无论默认值other有没有写权限,最终生成的都不会有;同样,按位与后除了这一位都是1,也就是最终生成权限全凭初始的默认权限决定。
为什么要有umask?
-
如果没有,一个文件创建时默认的权限由OS决定,无法在创建前进行修改。这是为了可以满足特殊的需求。写成系统可配置,不写死,更有灵活性。
-
特殊情况下,配置umask,可以控制文件的默认权限,让代码可控。(日后才会接触到)
怎么修改umask?
umask 0777
这样就能改
不过这种修改是一次性的,内存级的。当我重新打开,读取配置文件,会变回去。
=_=
本文到此结束,至此,【Linux之权限】这个系列也结束了。
祝大家开卷有益。