学习目标
- 1. Linux权限管理
- 1.1 用户分类
- 2. 用户类型和访问权限
- 2.1 理解什么是权限
- 3 文件类型和权限操作
- 3.1 修改权限
- 3.2 关于root
- 3.3 更改文件拥有者
- 3.4 修改组权限
- 3.5 目录权限
- 3.5.1 粘滞位
- 3.6 关于目录权限的总结
- 3.7 默认权限
- 3.7.1 自定义默认权限
1. Linux权限管理
1.1 用户分类
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制;
- 普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
- su
通过 su -root (root可以省略)指令可以变成超级用户,同样su -用户名也可以变成普通用户。
- sudo
sudo代表的是临时权限提升,执行后续命令以root身份运行,输入该指令后要求输入普通用户的密码([sudo] password for name)。
2. 用户类型和访问权限
2.1 理解什么是权限
权限:一件事情是否允许被特定的人做。权限=人+属性
权限约束的是人,文件本身具有的天然的权限属性:读 (r -)、写 (w -)、执行 (x -)。
- Linux的用户类别
- 文件和文件目录的所有者:u—User(中国平民 法律问题)
- 文件和文件目录的所有者所在的组的用户:g—Group(同组人员)
- 其它用户:o—Others (外国人)
- 用户
上述三种用户类别:指的是一种角色身份;
root和普通用户:指的是具体的一个人。
3 文件类型和权限操作
Linux系统中,不以文件后缀作为区分文件类型的方式。
虽然系统不区分,但是gcc编译器会区分,因为编译器就是以文件格式来识别内容范畴的。
- 文件类型区分
-
普通文件:文本,各种动静态库,可执行程序,源程序
-
目录文件
还有各种文件不一一列举:Linux下一切皆是文件。
执行ll指令后得到如下结果
r即具有读权限,w具有写权限,x具有可执行权限
3.1 修改权限
这里用root进行举例,未使用同组用户
举例:修改权限
- 先创建一个file.txt文件
第三列 r- - 是o(other其他人),这里不作标识。
- 权限操作
如下图所示:
chmod是权限修改指令,u表示操作的用户类别user,+表示权限加,x表示可执行权限。文件类型的第一列就是拥有者的权限类别。
如下图的-rw-(可读可写),执行后变成了-rwx(可读可写可执行)。
也可以对其再进行权限缩小,相当于做减法,这里不演示。
同理,对g(同组用户group)进行权限操作
其他操作与之类似,只不过是更换操作对象和权限类型,还可以对o(other其他人)进行类似操作。
当你操作的对象不是root,并且没有对应的权限时,相关操作无法进行。如没有写操作,是无法对其文件内容进行写入的。写入后会得到这样的结果:
Permission denied//对文件操作被系统拒绝
那如果你操作的对象就是root呢?那么上述操作其实对它都是无用的,除了个别执行操作。
3.2 关于root
对于root用户(超级用户),它几乎是不受权限约束的。也就是说无论你操作哪类用户,无论你如何修改其权限,他该干什么还是干什么,所以上述操作其实都是无用功,但是我只是用root来进行举例,换成其他用户就会有限制了。
3.3 更改文件拥有者
如果一个文件是普通用户创建的,但是root想修改为它自己的,这是不被允许的。反过来,如果这个用户要把这个文件转移给root,这是要经过允许而不是直接就可以给的(这个过程需要sudo,强行完成这个操作);但是这时候普通用户如果想再把这个文件要回来,是可以直接完成这个操作的,即使对方是root,原因是这个文件本就属于它(普通用户)。
这就好比它(普通用户)想要别人的东西,需要别人同意;而它想给别人东西,也同样要别人同意收下,但是对方同意了以后,它还是可以随时要回来。
但是如果给别人东西的是root的话,是可以直接给的,而不需要经过该用户的操作。 root就是有这种功能。
同理,普通用户如果给别人东西被拒绝,sudo让自己变成超级用户,这个文件它不要也必须强行收下。(su改完以后路径不变,su -改完以后路径会变)
3.4 修改组权限
可以修改个人的权限,同样也可以修改组别的权限,以达到每个成员都有相同的权限。就相当于进入一个团体,每个成员都要按照团体的规则限制来处理事情。(chown可以一次性修改多人的权限)
具体操作是把同组人员设置为所需权限,把other设置为不可读不可写不可执行。
这样的好处是某个文件内容自己组别的人都可以看到但是别的组别不能看见,保证了团队的重要隐私。
3.5 目录权限
当用户对某个目录没有了读的权限时,就相当于没有了查看该目录内容(注意不是进入该目录)的权限。
但是如果它还有写权限,就还可以在该目录下创建文件。
那么要进入目录有什么文件?—可执行权限x。 这和普通文件不同的就是,文件拥有了可执行权限以后代表着能够跑起来,而目录是能够进入该目录。
那么如果我没有进入的权限,但是又有读权限,会有什么结果?—输出目录名。 相当于只给你在门口看看招牌。
- 概括
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中;
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容;
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。
那么问题来了:只要某用户具有目录的写权限, 某用户就可以删除目录中的文件, 而不论创建目录的这个用户是否有这个文件的写权限,尽管对方是root。那么这样岂不是很荒唐?
这确实是矛盾的地方,既想让别人进来又不想让别人碰你的东西;但也不是没有解决方法,这种技术叫做粘滞位。
3.5.1 粘滞位
- 粘滞位
粘滞位格式:chmod 用户+t (目录名)
- 注意的点
粘滞位只能对目录进行操作,并且一般是对于other用户;也就是别的组别的人。
对设置了粘滞位的目录,只有文件的拥有者(root)可以删除,其他人不能删除。
设置了粘滞位的目录,该目录下的文件只能被这些人删除:
- 超级管理员
- 该目录所有者
- 该文件所有者
有时候,会创建许多的临时数据,一般会把这些数据放到系统的/tmp目录下,这也就意味着它要把所有权限都放开。但是这时候又会有被别人删自己文件的风险,这时候就可以再次设置粘滞位。
3.6 关于目录权限的总结
- 关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令;
- 如果目录对于other没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限;(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)但是如果它有-x权限的话,它甚至可以把目录里的文件全删了。
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
3.7 默认权限
为什么系统中的文件,创建出来的默认权限是我所看到的样子?
默认权限:
普通文件:起始权限为666
目录文件:起始权限为777
但是为什么不是我看到的那样?
这里就要引出权限掩码的概念:
权限掩码(0002,umask):凡是在umask中出现的,都应该在起始权限中去掉。 其实就好比c语言中1111 1111要消除低四位用1111 0000进行与操作的道理。
那么如果权限掩码是000 000 010,凡是在这里出现过的都要被过滤掉,除了1的位置。那怎么又能保留前几位的数据呢?在相与之前取反就可以了。
3.7.1 自定义默认权限
默认权限是可以自定义的,如果想要三个用户都是只读状态,可以执行:
$ umask 0333
但是这种修改只在本次登录有效,下一次登录就失效了。