文章目录
- 1️⃣一、理解权限
- 2️⃣二、切换用户
- 3️⃣三、Linux文件中角色的问题
- [4️⃣四、rwx 权限的具象化规则](#4️⃣四、rwx 权限的具象化规则)
- 5️⃣五、关于文件权限的一些指令
- 总结

1️⃣一、理解权限
1.1什么叫做权限
权限我们并不陌生,大家一开始接触权限这个词还是在手机上感受到的吧。权限,归根结底,表明的就是能还是不能的问题,给不给你访问资源的权力!
1.2为什么要有权限
你想啊,我们操控的Linux,是一个多用户同时访问的操作系统,人一多,就要对用户进行管理,也就是给予合适的权限,你该干什么,你不该干什么
1.3权限=人+文件属性
这里的标题就是我想输出的结论:文件=人+文件属性。权限是针对特定群体的------与人有关(普通 or root)
2️⃣二、切换用户
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以在linux系统下做任何事情,不受限制
- 普通用户:在Linux下做有限的事情
- 超级用户的命令提示符是
#,普通用户的命令提示符是$
命令 :su [用户名]
功能 :切换用户
例如,要从root用户切换到普通用户user,则使用su user。要从普通用户user切换到root用户则使用su root(root可以省略),此时系统会提示输入root用户的口令
cpp
//超级用户切换为普通用户,不需要输入密码!!
root@VM-0-3-ubuntu:~# su - czh//czh为我们希望切换的普通用户
czh@VM-0-3-ubuntu:~$ pwd
/home/czh//切换成功
//普通用户切换为超级用户,有三种方法
①su -
czh@VM-0-3-ubuntu:~$ su -//输入su -
Password: //这里要输入登录超级用户的密码
root@VM-0-3-ubuntu:~# pwd
/root//切换成功
②su root
czh@VM-0-3-ubuntu:~$ pwd
/home/czh
czh@VM-0-3-ubuntu:~$ su root//输入su root
Password: //这里要输入登录超级用户的密码
root@VM-0-3-ubuntu:/home/czh# pwd//最前面的root已经说明目前是root用户
/home/czh//这里虽然还是czh,但是已经是超级用户了,这是su root的原因
③su
czh@VM-0-3-ubuntu:~$ pwd
/home/czh
czh@VM-0-3-ubuntu:~$ su//输入su
Password: //这里输入登录超级用户的密码
root@VM-0-3-ubuntu:/home/czh# //最前面的root已经说明目前是超级用户了
为什么root账号切换为普通账号输的不是root的密码?
你想,要是输的是root密码,还能切换到其他普通用户的账号下,这不扯吗?切换为普通用户输的必然是普通用户的密码
3️⃣三、Linux文件中角色的问题
在文件角色分类中,共分为三类,分别是拥有者 ,所属组 ,other角色。
就拿我经常访问的一个文件来说
cpp
drwxrwxr-x 21 czh czh 4096 Apr 1 19:30 code/

角色是有人来扮演的,与用户问题不冲突,互相补充
可能是root来扮演文件拥有者,czh来扮演文件的所属组,其他人来扮演文件的other角色;也有可能是其他方案,总之,角色是由用户来扮演的
你可能会发现,在 Linux 系统中,拥有者(Owner)和所属组(Group)经常是同一个人。既然如此,Linux 为什么要设计 "组" 这个概念?难道不能直接给多用户赋权吗?
这其实是为了解决 "协作效率 与权限隔离 的矛盾。
- 极简场景(只有 Owner): 如果只有拥有者,那么每新增一个协作同事,你都得手动把他的UID 添加到文件的 ACL 列表里。如果项目有 10 个人,你要改 10 次权限,这简直是运维噩梦。
- 组的智慧(Group): 所属组就像一个 项目徽章。你只需要把 10 个同事加入同一个 "开发组",然后把文件的所属组改成这个组。
- 动态生效: 以后只要是这个组里的人,哪怕人员流动(离职 / 入职),只需要调整组的成员配置,文件权限根本不需要动。
4️⃣四、rwx 权限的具象化规则
4.1如何看各个角色的权限
再拿刚才的例子再说一遍
cpp
drwxrwxr-x 21 czh czh 4096 Apr 1 19:30 code/
讲了那么多,这些角色对文件的权限到底怎么看呢?一张图,让你秒懂

所以,各种角色对文件的权限一目了然,拥有者可以对文件进行rwx操作,所属组也可以对文件进行rxw操作,other可以对文件进行rx操作,没有w
4.2rwx权限解析
- 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录而言,具有浏览该目录信息的权限
- 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限(因为对于目录来说,目录的内容就是由文件组成的)
- 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
-表示不具有该权限
细节一
假设一个权限是-rwxr--r--
拆下来
- 拥有者:
rwx - 所属组:
r-- - 其他人:
r--
现在你是这个文件的拥有者 ,也是这个文件的所属组
linux会怎么判断?
- 1.先看你是拥有者吗?
- 2.是 ,把
rxw赋予给你 - 3.后面的组权限,其他权限,全都不看
再举一个反例
你不是拥有者 ,但在所属组里
- 1.先看你是不是拥有者,不是
- 2.再看你是不是所属组,是
- 3.把
r--权限赋予给你 - 4.其他人权限直接忽略
这就叫身份只验证一次,验证完就停
细节二:关于可执行
文件要被执行,需要满足什么条件
- 文件本身就是一个可执行的文件,是一个真正可以执行的二进制文件
- 文件本身拥有可执行权限
x,哪怕你是一个可执行的文件,没有x,你可无法被执行
给x权限,不是能让你执行,而是当你想执行的时候,OS允许你执行
细节三:文件的拥有者,具有修改文件权限的能力(怎么修改后面会讲)
细节四:更改拥有者或所属组需要root或sudo
5️⃣五、关于文件权限的一些指令
chmod
功能 :设置文件的访问权限
格式 :chmod [参数] 权限 文件名
常用选项:
- -R 递归修改目录文件的权限
- 说明:
只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值得格式:
- 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:所属组
o:其他用户
a:所有用户
示例:
chmod u+w abc.txt:给abc.txt文件的拥有者添加w权限chmod o-x abc.txt:给abc.txt文件的其他人添加x权限chmod a=x abc.txt:所有角色对abc.txt只有x权限
三位8进制数字(每个角色的权限都由三个数字决定)
chmod 664 abc.txt:即drw- rw- -w-chmod 640 abc.txt:即drw- -w- ---
chown
功能 :修改文件的拥有者(只有root用户才能改,你拥有者能改,不就相当于出事了把黑锅让别人背吗)
格式 :chown [参数] 用户名 文件名
示例:
chown czh:czh abc.txt:把 abc.txt 的拥有者改成 czh,所属组改成 czhchown root abc.txt:只改拥有者为 rootchown :dev abc.txt:只改所属组为 devchown -R czh:czh code/:把 code/ 目录 + 里面所有文件/子目录,归属都改成 czh:czh
chgrp
功能 :修改文件的拥有者
格式 :chgrp [参数] 用户组名 文件名
常用选项 :- R 递归修改文件或目录的所属组
实例:
chgrp czh /abc/hello.txt
umask(重要)
在我们创建文件时,系统总是会给这个文件一个默认的权限值,比如新建文件一般是644
rw--w--w-,新建目录一般是755rwxr-xr-x
为什么呢? 一方面太麻烦,效率极低;另一方面,如果权限完全开放,任何人都能读写执行,服务器安全直接等于裸奔。
所以,linux必须给新建目录、文件一套默认权限
- 既能保证普通用户正常使用
- 又能屏蔽掉默认不必要的权限,保证基础安全
所以
- 目录默认是要进入的,所以要有x权限,所以默认给的是755
- 文件默认不能有执行文件,也就是666
自此umask就诞生了,假设我们的umask的值设置为002 时,新建文件由最初的666-002 就为664
实例:
umask 002设置掩码值为002,所以一般新建文件权限为666-002=664,目录的话为777-002=775umask查看掩码值
file
功能说明 :辨识文件类型
语法 :file [选项] 文件或目录...
常用选项:
- -c:详细显示指令执行过程,便于排错或分析程序执行的情形
- -z:尝试去解读压缩文件的内容
sudo
前面我们讲了umask,也讲了文件的权限,我们就可以看到,其实普通用户的权限非常有限,也就是说普通用户能干的事很少,系统默认不让你干 ,但实际使用linux时,我们又经常需要做一些管理员才能做的事 ,总不能每次都切换到root用户吧?于是 Linux 提供了一个非常经典、几乎必用的权限机制:让普通用户临时借一点 root 权限来执行命令,用完就收回。
所以也就有了sudo 命令
使用sudo分配权限
(1)修改/etc/sudoers文件分配文件
cpp
//chmod 740 /etc/sudoers
// vim /etc/sudoers
//将自己的用户名加入到sudoers的用户名表当中,这里问ai然后操作即可
(2)使用sudo调用授权命令
新建一个目录,普通用户不能在/新建目录,但我们可以使用sudo
cpp
czh@VM-0-3-ubuntu:~$ mkdir /dir
会报错,权限不够
加sudo就可以
cpp
czh@VM-0-3-ubuntu:~$ sudo mkdir /dir
[sudo] password for czh:
//这里就要输入你用户名的密码,输入成功后,会有几分钟的提权时间,你可以不用sudo然后在/目录新建
为什么输入的是用户名的密码?
sudo的初衷就是允许信任的普通用户临时提权- 系统要确认:你确实是这个用户本人
- 所以验证的是你自己账号的密码
总结
希望通过这篇文章,大家对于文件权限有了新的认识。