【Linux】3分钟快速掌握权限的奥秘
一、权限概念
什么是权限?答:访问资源,能还是不能的问题!!
为什么要有权限?答:多用户操作系统,Linux同时会有多个人来进行登录访问,普通用户和root。权限的本质是为了更好的进行用户管理。
权限 = 人 + 文件属性?答:权限针对特定群体——与人有关——普通用户和root。目标主体(Linux的文件)必须天然具备对于的属性,才能访问。
注意:文件具有的属性:可读(r)、可写(w)、可执行(x)。
Linux用户问题:Linux分为超级用户(root)和普通用户,超级用户不受权限约束,属于Linux系统中的特权级别;普通用户收权限约束;
注意:root切换为普通用户:su + 普通用户名;普通用户切换root:su root,然后输入密码,也可以直接su后面不用跟root,默认就是超级用户。ctrl+d可以退回到上一个用户;超级用户切换到普通用户是不用密码的。指令:su - 是切换用户,让目标用户已重新登录的方式进行切换。
普通用户暂时提高权限问题:sudo + 指令(例如:创建文件),第一次sudo要输入密码(普通用户的密码),第二次使用 sudo 不用输入密码,15分钟内密码是有效的。
注意:普通用户默认是不能sudo,系统默认普通用户不在白白名单上(/ect/sudoers),白名单在root的手中,所以普通用户要使用sudo,要通过超级用户进入白名单(大概第100行左右)添加普通用户名就行。
Linux角色问题:权限是依附于角色的,角色分为:拥有者角色和所属组角色、other角色。
注意:角色是由人来扮演的。所属组的意义是对权限进行局部范围的组级别的管理!!
扩展知识:有些公司是进行赛马机制的,二个以上的部门做相同的项目,谁做的好用谁的项目;微信就是在赛马机制下诞生的。
文件属性问题:文件分为r(可读)、w(可写)、x(可执行),如图:
补充:|:链接文件,p:管道文件,c:字符文件,b:块设备文件。字符设备:按照顺序IO(以1个字节输入输出),不支持随机读写 ;块设备:例如磁盘以4kb读写,支持随机读写。
三个字问题:
1、进入一个目录需要什么权限?
答:r: 用户是否有权利查看指定目录下的文件属性;w:决定了特定用户是否有权利在该目录下,能否新增,删除文件和修改文件。x:是进入一个目录所需要的权限。
2、为什么我们新建一个文件。默认权限是我们所看到的那个样子?
答:对于普通文件,起始权限是从:666开始,最终权限是和起始不一样的。目录文件起始权限是777开始,最终权限和起始权限是不一样的。为什么是这种这种情况呢?Linux系统中为了对权限的进行细粒度控制,Linux使用了权限掩码!在Linux中输入指令:umask,可得权限掩码,如:
注意:去掉不能理解成减法,最终权限=起始权限&(~umask)。由于掩码不同最终的权限也不同。umask后面+三位二进制如(000)是可以修改掩码的。
所以综上所述:一个文件的最终权限受到起始权限和掩码的影响,最终是我们看的那个样子。
3、没有rwx,我能删除这个文件吗?
答:在指定目录下(我的目录),即使是root新建的文件,不让rwx,但是可能我们普通用户可以删除掉,这种情况很少发生,因为多个普通用户(root可以进入普通用户的目录创建文件)之间是不能进入互相的目录创建文件的。
注意:这个三个子问题是大厂面试常问,非常重要。
如果我们想让多用户之间,共享文件?
答:文件一定不会在任意普通用户的家目录下,在系统级别的路径下,普通用户之间能看到文件。
在一个共享目录下,我新建文件和其他人共享,别人既然可以删除?
答:首先,新建文件在root路径下,那么相对于root而言,我和别人属于other,other拥有w权限,所以other可以删除文件一点毛病都没有。其次如果我想让这个文件除了我和root之外的人删除,那么我们可以使用粘滞位(sudo chmod +t 共享文件名),粘滞位是给other设置的一种权限管理级别:指定t目录下,每个人新建文件删除的时候,只能删除自己的文件,不能因为目录w权限问题删除别人的文件,通常用来做文件共享的场景。
注意:root路径下的tmp就是给普通用户做共享文件的,他自带粘滞位。
如果想删除粘滞位,需要root或者该目录的所有者或该文件的所有者才能删除。
二、文件操作指令
1)去掉拥有者的权限
指令:
结果:
注意:也可以连续去掉拥有者的权限:
2)增加拥有者的权限
指令:
结果:
注意:连续增加拥有者的权限:
3)去掉所属组的权限
指令:
结果:
注意:也可以连续去掉所属组的权限,跟拥有者的操作一样。
4)增加所属组的权限
指令:
结果:
5)给other去掉权限
指令:
结果:
6)增加other的权限
指令:
结果:
7)连续增加去掉权限操作
指令:
结果:
8)给所有人增加或者去掉权限
指令:
结果:
指令:
结果:
指令:
结果:
注意:文件要被执行的条件:1、该文件本身就是一个可执行文件,2、文件本身具有可执行权限。结论:即使一个文件拥有可执行的权限,但是他本身一个可执行文件也不会被执行。文件的拥有者才能修改文件的权限。
三、改变角色操作
改拥有者角色操作:
指令:
结果:
改变所属组角色操作:
指令:
结果:
改变所以角色的操作:
指令:
结果:
注意:普通用户即使是文件的拥有者也不能修改角色。文件给另外一个人或者组,需要别人的“允许”,在Linux上直接暂时提高权限(sudo)强制给就行或者让超级用户修改也行。
四、文件访问权限的相关设置方法
1、chmod 指令
功能:设置文件的访问权限。
常用选项:
R->:递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式:
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
2、chown 指令
功能:修改文件的拥有者。
3、chgrp 指令
功能:修改文件或目录的所属组。
常用选项:
-R:递归修改文件或目录的所属组。
五、目录权限
可执行权限:如果目录没有可执行权限,则无法cd到目录中。
可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容。
可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。
六、权限的总结
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目,即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限。
所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
完!!