??阅读本篇文章,你将了解Linux的目录结构,用户与文件的关系,以及文件掩码的作用。为了方便大家理解,本文将通过实例进行演示,建议有条件的跟着操作一下,以便加深理解。
??用户账号分为两类:超级用户(root)和普通用户,超级用户又称为管理员用户。超级用户可以使用命令useradd创建普通用户账号。假设我们现在利用超级用户创建两个用户组A和B,然后创建4个普通用户:User1、User2、User3、User4,让User1和User2属于用户组A,User3和User4属于用户组B。创建的目录结构如图1所示。
??如图2所示,对于一个文件来说,操作它的用户分为三种:文件拥有者用户(u),文件所属用户组用户(g),其它用户(o)。
??不同身份的用户,对文件的操作权限不同,一般文件拥有者用户的权限最大,文件所属用户组用户次之,其它用户权限最小。图3展示的权限分为三种:读权限、写权限、执行权限。
??假如User1创建一个文件test.c,那么对于test.c文件来说,User1就属于拥有者用户,User2属于用户组用户,User3和User4属于其他用户。那么不同身份的用户对文件的操作权限是怎样的呢?我们可以来实操一下,首先创建四个用户:User1、User2、User3、User4。
??创建两个用户组A和B:
groupadd A
groupadd B
??创建4个普通用户:User1、User2、User3、User4
useradd -g A User1
passwd User1
??然后用同样的命令创建剩下的三个用户:
useradd -g A User2
passwd User2
useradd -g B User3
passwd User3
useradd -g B User4
passwd User4
??我们来到home文件夹下,可以看到新创建的四个普通用户家目录。
??接着登录User1用户,并在其家目录下创建一个文件test.c,此时对于test.c文件来说,User1就属于拥有者用户,User2属于用户组用户,User3和User4属于其他用户。
touch test.c
??查看test.c的文件权限可以看到为-rw-r–r–,其中rw-是文件拥有者用户的权限,代表具有读写权限;r–是用户组用户的权限,只具备读权限;r–是其他用户的权限,也只有读权限。可以用二进制表示文件的权限为0110100100,转换为8进制表示为0644。
??读者可以自行尝试登录User2或User3,观察是否可以往test.c中写入内容。新创建的文件的权限为什么是0644呢?如何控制新创建的文件权限呢?
??其实我们新创建出来的普通类型文件其预设权限(又称默认权限)是0666,但最后文件的权限会变为0644,这是因为创建文件的时候还要受到文件掩码的影响。其实,实际创建的出来的文件权限是: 0666 & (~umask)。首先来查看一下文件掩码:umask
??可以看到User1用户的默认文件掩码为0022,注意文件掩码是由四位8进制数字组成,第一位是预置位,一般设置为0;后3位是文件的权限。故文件最终的权限为:0666 & (~0022) = 0666 & 7755 = 0644。
不难想象,如果文件掩码为0000,那么我们创建出来的文件的权限就等于预设权限,下面对这一点进行验证:
??首先修改文件掩码,命令:umask 0 //将文件掩码修改为0
??创建文件main.cpp,并查看该文件的信息:
??可以看到当文件掩码改为0时,我们创建出的文件权限为0666,这样对于拥有者用户、组用户、其它用户都对文件具有读写的权限,实际上这样是不合理的,一般我们不希望其他用户能够修改文件,即让其他用户不具备写的权限,文件掩码就可以实现这个功能,有了文件掩码,我们就能默认将其他用户的写的权限给限制住。换句话说,文件掩码可以让系统更安全。
??本次通过实操讲解了用户对文件的操作权限,要想理解权限,需要站在文件的角度,观察用户对文件是什么身份,不同的身份具有不同的权限,默认情况下文件拥有者用户的权限最大,文件所属用户组用户次之,其它用户权限最小,而root用户具备对文件的所有操作权限。接着讲解了文件掩码,利用文件掩码可以控制用户创建文件的默认权限。文件掩码的作用是限制不同身份用户的权限,使得系统更加安全。