linux权限
一、 linux权限的概念
1.1 对linux权限的理解
权限的本质是能不能做某事
例如:以进出校园来说,学校老师或学生可以正常出入校门,但是其他人则会被保安人员拦在校门之外,换句话说只有老师和学生拥有进出校门的权限,其他人则没有。
关于Linux权限我们有下面更深层次的理解:
第一,以上述进出校门例子来讲,如果一名该校学生叫张三按规则他当然有进出入校门的权限,保安人员不会去拦他,多想一想是保安人员知道人家的名字叫张三才不去拦他还是人家是该校学生才不去拦他呢?显然是后者,保安人员不会关心你叫什么名字,而是关心你所扮演的角色是什么,符合该角色(学生或老师)就有相应权限,不符合该角色则没有。所以:
权限作用的对象首先是角色
第二,来个例子:我要写代码做一个项目,所以我打开了某个游戏APP,即使我是VIP我也无法在游戏APP上写代码做项目,换句话说,游戏APP自身的事物属性就不支持我去实行我写代码做项目的权限,所以:
权限要求目标具有对应的属性
综上所述,在Linux中:权限=角色+目标权限属性。
1.1 对角色与目标权限属性的理解
在Linux系统中我们说一切皆文件,所以我们面对的都是文件,文件的权限属性无非就有三种:可读,可写入和可执行。那么对于角色我们又该如何理解呢?在日常生活中角色由人来扮演,比如在学校我的角色是学生,在家中我的角色是子女,因此在Linux系统中我们说:角色由用户来扮演。
Linux下有两种用户:超级用户(超级管理员)、普通用户
- 超级用户:可以在Linux系统做任何事情、不受限制
- 普通用户:在Linux下做有限的事情
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令: su [用户名]
功能: 切换用户。
例如:要从root用户切换到普通用户user,则使用 su user。要从普通用户user切换到root则使用 su root (root可以省略),此时系统会提示输入root用户的密码,需要注意的是在Linux系统中输入密码时一般都是不回显的。
二、linux权限的管理
2.1文件访问者的分类(角色)
- 文件和文件目录的所有者:user 简称 u
- 文件和文件目录所有者所在的用户组(所属组):group 简称 g
- 其他用户:other 简称 o
2.2文件类型和访问权限(目标权限属性)
2.2.1文件类型
windows中判断文件类型通常看文件后缀,与Windows不同的是,在Linux中判断文件类型通常看文件的第一个字母,特定字母对应的文件类型如下:
- d : 文件夹或目录
- – : 普通文件
- l :软连接(类似Windows的快捷方式)
- p :管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s :套接口文件
2.2.2基本权限
- 读(r):read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- 写(w):write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- 执行(x):execute对文件而言具有执行文件的权限;对目录来说具有进入目录的权限
- “–”表示不具有该权限
2.2.3文件权限值的表示方法
1> 字符表示法
举个例子:
首先这个文件的前缀是d,说明这个文件类型是文件夹(目录)
按照判断原理,第2~10位每3位分为一组,分别是rwx,r-x,r-x分别对应拥有者,所属组和其他用户对应的权限,对照上表我们就可以准确判断每个文件访问者的权限。
注意:
第2~10位每3位分为一组,每一组的第一位表示有无读权限要么是 r 要么是 -,第二位表示有无写权限要么是 w 要么是 -,第三位表示有无执行权限要么是 x要么是 -,不能出现 xwr,wrx等次序颠倒的情况。
2 > 8进制数值表示方法
文件属性(读、写、可执行),要么不是 rwx 就是 - ,所以我们把具有相应权限记为1,没有记为0,则属性 rwx -wx --x 就可以记为 111 011 001 每三位记为一组每组用8进制表示就有 731,所以文件权限也可以用8进制数值来表示。
2.3 文件访问权限的相关设置方法
文章开篇我们讲了权限=角色+目标权限属性,角色分为文件拥有者,所属组,其他用户,因为在Linux中我们说一切皆文件所以目标权限属性就是文件属性文件属性有三个分别是可读,可写,可执行。所以对权限的设置可以分为两个方面:对角色的设置+对文件属性的设置。
2.3.1对文件属性的设置
命令:chmod
功能:设置文件或目录的访问权限
格式:chmod [参数]权限 文件名
常用选项:
R-> 递归修改目录文件的权限
怎么来使用chmod命令呢?
1> 用户表示符 +/-/= 权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
用户表示符:
- u:拥有者
- g:所属组
- o:其他用户
- a:所有用户(拥有者+所属组+其他用户)
举例:
a >对 text.txt 拥有者(u)增加 x(执行)权限:
b >对 text.txt 拥有者(u)取消 rwx 权限:
2> 直接使用八进制数字:
举例:
利用八进制数字设置相应权限时,从左到右每一位分别表示拥有者,所属组,其他用户的相应权限,764每一位分别用8进制表示为111 110 100表示权限为rwxrw-r–,一次性设置完方便又快捷。
2.3.2 对角色的设置
命令1:chown
功能:修改文件或目录的拥有者
格式:chmod [参数]用户名 文件名
示例:
利用 chown yjh text.txt 将文件的拥有者从root改为yjh。
命令2:chgrp
功能:修改文件或目录的所属组
格式:chmod [参数]新所属组名 文件名
常用选项:
R-> 递归修改文件或目录文件的所属组
示例:
利用 chgrp yjh text.txt 将文件的所属组从root改为yjh。
2.4 用户对应权限的判定规则
如果我以某一用户的身份登录linux系统,如何判断我对指定文件(夹)具有相应权限呢?换句话说,当我来到学校门口我怎么判断我是否可以进出校园呢?
规则:先判断用户对应的角色,再判断相应角色拥有的权限
首先系统会判断用户是否是该文件(夹)的拥有者,若是则返回拥有者所对应的权限,若不是拥有者则判断用户是否是或在该文件(夹)的所属组,若是则返回所属组所对应的权限,若不是所属组则用户只能是其他用户,返回other的相应权限。
示例1:
如上图我们不难看出 code 目录的拥有者和所属组都是root,这说明我们以其他非root的用户登陆时都无法与拥有者和所属组匹配只能以 othe(其他用户)的角色匹配(非拥有者和所属组只能是other文件属性行默认不会显示),所以非root用户只能拥有other的权限(r-x)。
特别的
如果我们以root用户登陆时,因为root既是拥有者也是所属组而拥有者的权限是rw-,所属组的权限是- -x所以root对应的权限就是 rwx 吗?答案是否定的,原因是在Centos下角色只确定一次,顺序是:拥有者,所属组,other 这说明,root与拥有者相匹配后不会再往后继续匹配了,root也只能拥有拥有者的权限。
三、文件掩码
3.1文件掩码的理解
在我们创建新文件或者目录的时候,系统会默认给予新文件或新目录相应的权限:
但是每个人的机器不同系统给予新文件或新目录的默认权限也会不同这是为什么呢?原因是当我们创建文件或文件夹是最终权限还要受到文件掩码的影响:
最终权限=起始权限&(~umask)
这里umask表示文件掩码,文件和文件夹的起始权限如下:
- 新建文件夹(目录)起始权限:777(111 111 111)
- 新建文件的起始权限:666(110 110 110)
知道了起始权限与umask经过计算就可以确定文件(夹)的最终权限了(也就是我们创建文件时系统给予的默认权限)。
3.2 查看与修改文件掩码
命令: umask
功能:查看与修改文件掩码
格式:
- (修改)umask 新文件掩码值
- (查看)umask
示例:
umask//查看
umask 044//修改
3.3 文件掩码的作用与意义
学习了文件掩码便给我们设置新文件(夹)的默认权限提供了思路,这样我们可以根据不同的具体需求设置不同的umask值,以满足不同的使用场景提高我们代码的灵活性与可控性,例如开发人员可能需要更宽松的权限以便于调试,而生产环境中可能需要更严格的权限以确保安全性。
四、粘滞位
目录的权限
- 可执行权限(x):如果目录没有可执行权限则无法cd到目录中。
- 可读权限(r):如果目录没有可读权限则无法通过ls等命令查看目录中的文件内容。
- 可写权限(w):如果目录没有可写权限则无法在目录中创建和删除文件。
这就出现了一个问题,如果用户拥有该目录的可写权限就可以随意在该目录删除或创建文件,即使被删除文件的拥有者不是该用户。也就是说我可以随意删除其他人的文件了。为了避免这种情况linux引入了粘滞位的概念:
当目录被设置为“粘滞位”(用chmod +t),则该目录下的文件只能由:
- 超级管理员(root)删除
- 文件的拥有者删除
- 该目录的拥有者删除
关于目录权限的总结:
- 目录的可执行权限表示你是否可以在目录下执行命令
- 如果没有可执行权限(x),即使有r可读权限也无法对目录进行如何命令,甚至无法cd到目录中。
- 有x可执行权限,而没有r权限则可以进入目录但无法查看目录内容(这说明即使可以执行ls命令,也无权限读出目录内容)。