Linux权限管理
什么是权限 ❓
权限本质上是决定某件事情,某人能否做。
- Linux下文件权限的组成✨
文件权限 = 人 + 事物属性
文件权限属性:r(读)、w(写)、x(执行权限)
人 (不是特定具体的人,而是一种角色):拥有者、所属组、other (其它)
💦 文件访问者的分类(人)
- 文件和文件目录的所有者:u —— User (中国平民 法律问题)
- 文件和文件目录的所有者所在的组的用户:g —— Group (不多说)
- 其它用户:o —— Others (外国人)
💦 文件类型和访问权限(事物属性)
a) 文件类型
- d:文件夹
- -: 普通文件
- l : 软链接 (类似 windows 的快捷方式)
- b:块设备文件 (例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件 (例如屏幕等串口设备)
- s:套接口文件
使用命令 ls -l (ll) 显示的多列属性的第一列对应的字符来区分它的文件类型。
b) 基本权限
i.读 ( r ):read 对文件而言,具有读取文件内容的权限;对目录而言,具有浏览目录信息的权限
ii.写 (w):write 对文件而言,具有修改文件内容的权限;对目录而言,具有删除移动目录内文件的权限
iii.执行 (x):execute 对文件而言,具有执行文件的权限;对目录而言,具有进入目录的权限
❓为什么没有other呢❔
- 一个文件在判断它不是owner和group之后,只能是other了,所以没必要显示other
❓owner | group | other 存在的意义❔
- 比如某个公司有员工10个人,他们分为AB两组各5人,公司要开发一款软件,分别交给AB两组独立开发,竞争后选择优者。因为公司比较穷,AB两组只能在同一台服务器上办公,因为是竞争关系,所以对于AB来说他们都有自己的权限管理----A不能访问B,B也不能访问A,假设没有group这个概念,一个项目(文件)要么是属于owner的,要么是属于other的。假设这时技术总监(非A组人)要看A组张三的代码,便没有权限,所以为了除竞争关系外的其他人方便访问,单独给出group予以区分。
💦 文件权限值的表示方法
a) 字符表示方法
b) 八进制数值表示方法
其中我们可以直接使用八进制来替代 u、g、o 中的 r、w、x ❗
$ chmod 777 file.txt
$ chmod 000 file.txt
$ chmod 640 file.txt
💦 文件访问权限的相关设置方法
a) chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
- R -> 递归修改目录文件权限
- 说明:只有文件的拥有者和 root 才能改变文件权限
chmod 命令权限值的格式:
1️⃣ 用户表示符 +/-= 权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
-
u:拥有者
-
g:拥有者同组用
-
o:其它用户
-
a:所有用户
💦实例:
$ chmod u-r file.txt
$ chmod g-rw file.txt
$ chmod o+rwx file.txt
$ chmod u+r,g+rw,o-rwx file.txt
✨注意:
- 权限永远都是约束普通人的,root 是超级用户,它不受或几乎不受权限约束。这里的 owner、group、other 主要针对的是多个普通用户的情况。
Linux下文件后缀 ❗
Linux 系统对于文件后缀是不关心的,注意这里指的是系统不关心不是某些工具。而不是gcc编译器不关心,如果将.c后缀文件改为.txt文件内容不会变,但是Linux下的编译器不会通过。
b) chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
实例:
$ sudo chown root file.txt//修改拥有者
$ sudo chown shijiaqing file.txt//修改拥有者
$ sudo chown :shijiaqing file.txt//修改所属组
$ sudo chown shijiaqing:shijiaqingfile.txt//可以将拥有者、所属组同时修改
$ sudo chown root:root file.txt//可以将拥有者、所属组同时修改
c) chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
实例:
$ sudo chgrp root file.txt
$ sudo chgrp shijiaqing file.txt
d) umask
功能:查看或修改文件掩码
格式:umask 权限值
说明:将现有的存储权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022,普通用户默认为 0002
❓ 新建了一个 file 文件、dir 目录,是什么决定了它的默认权限 ❔
-
一般普通文件,起始权限从 666(rw- rw- rw-) 开始
-
一般目录文件,起始权限从 777(rwx rwx rwx) 开始
为啥它没按照一般情况来 ❓
- 因为在 Linux 中,在设置权限时,系统默认会有一个 umask 权限掩码
对于 0002 我们这里先不管第一个 0(它涉及后面的概念),其它位转成对应的二进制就是 000 000 010
umask 其中设定了一个概念:凡是在 umask 中出现的权限,都不应该在最终权限中出现
这里我们发现只有 other 里有一个写的权限,那么最终我们应该在 666(rw- rw- rw-) 或 777(rwx rwx rwx) 中去掉 other 的写权限,其中计算过程是:初始权限 & (~umask)
所以换句话说我们在系统中设定的 umask 就可以进行更改默认权限了 ❗
之后我们再新建 data.txt时,它们就无权限了:
目录的权限
-
要在目录下创建文件,需要什么权限 ?
增加 w 权限,能写文件但不能读文件
切换成root为我们修改一下w权限,再切换普通用户进入home路径
📝说明:
要在目录下创建文件,必须需要 w 权限。
同理不做演示:
- 要读取目录下的文件列表,必须需要 r 权限。
- 要进入一个目录必须具有 x 权限。
粘滞位
粘滞位(Sticky Bit)是一种文件系统权限的特殊标志,用于控制对目录中文件的删除权限。当粘滞位被设置在一个目录上时,只有目录的所有者、文件的所有者和超级用户才能删除或重命名该目录中的文件
- 只有目录的所有者或超级用户才能设置或取消粘滞位。粘滞位对于确保公共目录中的文件安全性非常有用,防止意外删除或修改他人的文件
- 在UNIX和类UNIX系统中,粘滞位可以通过文件系统的权限模式来设置。当一个目录的粘滞位被设置时,该目录的权限模式会以一个加号(+)和粘滞位标志(t)结尾。例如,一个具有粘滞位的目录权限模式可能是drwxrwxrwt。
- 要设置粘滞位,可以使用chmod命令,并在权限模式中添加一个加号(+)和粘滞位标志(t)。例如,要将粘滞位设置在目录上,可以运行以下命令:
[root@VM-16-centos home /] chmod +t /home/ # 加上粘滞位
[root@VM-16-centos home /] ls -ld /home/
drwxrwxrwt. 3 root root 4096 2月 19 16:00 /home/
[root@VM-16-centos home /] su - shijiaqing
[shijiaqing @VM-16-centos home /]$ rm /home/abc.c #shijiaqing不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"? y
rm: 无法删除"/home/abc.c": 不允许的操作
粘滞位只能给目录设置
一般是谁设置,谁才能取消
🐳当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
- 一、超级管理员删除
- 二、该目录的所有者删除
- 三、该文件的所有者删除