Linux权限详解:从基础到实践
Linux作为一个多用户、多任务的操作系统,权限管理是其安全机制的核心。无论是系统管理员还是普通用户,理解并正确设置权限,能有效防止误操作、恶意访问,保护系统和数据的安全。本文将从基础概念、权限查看、权限修改到实践,一步步带你了解掌握Linux权限。
目录:
- 一、什么是权限?
- 二、为什么需要权限?
- 三、权限的核心:三个角色+三种权限
- 1. 三个角色(Owner/Group/Others)
- 2. 三种权限(Read/Write/Execute)
- 3. 权限的表示方式
- 四、如何查看权限?
- 五、如何修改权限?
- 1. 符号法:直观易懂
- 2. 数字法:高效快捷
- 六、如何修改所有者和组?
- 1. 修改所有者:`chown`
- 2. 修改所属组:`chgrp`
- 七、三个子问题
- 1.进入一个子目录需要什么权限?
- 2.为什么我们新建的目录和普通文件的权限是我们所看到样子?
- 3.粘滞位问题
一、什么是权限?
权限是指在特定环境中,用户或系统对资源(如文件、应用程序、网络或设备)的访问和操作的合法范围。
换言之就是能不能访问该资源的问题
比如你有腾讯视频的会员,你就可以看vip视频,这就是你的权限
权限 = 人 + 文件属性
权限是针对特定人群的 -->普通用户和超级用户(root)
目标主体(Linux下一切皆文件,即文件),必须天然具备对应属性(读、写、可执行)才可以访问
普通用户和超级用户
超级用户绝大多数情况下不受权限约束,属于特权阶级
普通用户切换到超级用户 : su root /su (默认是root)/su -(切换用户,以重新登陆的方式进行切换) + root账号密码
超级用户切换到普通用户不需要密码
普通用户切换到另一个普通用户需要对方的密码
二、为什么需要权限?
想象一下,如果你电脑里的文件随便被别人删改,或者敏感数据(比如密码文件)被任意访问,那会有多可怕?Linux的权限系统就是为了解决这个问题——给每个文件/目录分配“谁能做什么”的规则,确保只有授权用户才能进行相应操作。
三、权限的核心:三个角色+三种权限
Linux中,每个文件/目录都有三个关联的角色,每个角色对应三种权限:
1. 三个角色(Owner/Group/Others)
- 所有者(User):文件的创建者或当前拥有者(用
u
表示)。 - 所属组(Group):文件所属的用户组(用
g
表示)。 - 其他用户(Others):既不是所有者也不属于所属组的用户(用
o
表示)。 - 所有角色(All):上述三个角色的统称(用
a
表示)。
为什么要有所属组?所属组是什么?
所属组就好比一个公司的某一个部门,同一个部门下的员工可以自由访问组里的文件,别的人访问不了,高效安全
2. 三种权限(Read/Write/Execute)
每个角色有三种基本权限,用 r(读)、w(写)、x(执行) 表示:
- 读(r):允许查看文件内容(如
cat file.txt
)或列出目录下的文件(如ls dir
)。 - 写(w):允许修改文件内容(如
echo "test" > file.txt
)或删除/重命名目录下的文件(如rm file.txt
)。 - 执行(x):允许运行可执行文件(如
./script.sh
)或进入目录(如cd dir
)。
3. 权限的表示方式
权限以9位字符表示,分为三组,每组对应一个角色的权限:
[文件类型][所有者权限][所属组权限][其他用户权限]
例如:-rw-r--r--
- 第一个字符
-
:表示文件类型(-
普通文件、d
目录、l
符号链接、b
块设备、c
字符设备)。 - 接下来三位
rw-
:所有者权限(读+写,无执行)。 - 中间三位
r--
:所属组权限(仅读)。 - 最后三位
r--
:其他用户权限(仅读)。
权限是依附于特定角色的,角色是需要人来扮演的
四、如何查看权限?
最常用的命令是ls -l
(长格式列出文件),它会显示文件的权限、所有者、所属组等信息。
例如:
[whb@bite-alicloud test]$ ls -l file.txt
-rw-r--r-- 1 whb whb 0 Jan 11 14:22 file.txt
解释每一列的含义:
-rw-r--r--
:权限(普通文件,所有者rw,组r,其他r)。1
:链接数(文件的硬链接数量)。whb
:所有者(用户whb)。whb
:所属组(组whb)。0
:文件大小(字节)。Jan 11 14:22
:修改时间。file.txt
:文件名。
五、如何修改权限?
修改权限的核心命令是chmod
(change mode),它支持符号法和数字法两种方式,其中数字法更常用。
1. 符号法:直观易懂
符号法的格式:chmod [角色][操作][权限] 文件
- 角色:
u
(所有者)、g
(组)、o
(其他)、a
(所有)。 - 操作:
+
(添加权限)、-
(移除权限)、=
(设置权限)。 - 权限:
r
(读)、w
(写)、x
(执行)。
实例:
- 给所有者加执行权限:
chmod u+x file.txt
- 给组移除写权限:
chmod g-w file.txt
- 给其他用户设置为读权限:
chmod o+r file.txt
- 给所有角色加读权限:
chmod a+r file.txt
2. 数字法:高效快捷
数字法将权限转换为八进制数字,每个权限对应一个数值:
r=4
(读)、w=2
(写)、x=1
(执行)。- 每个角色的权限是三个数值的和,例如:
rwx=7
(4+2+1)、rw-=6
(4+2)、r--=4
(4)。
数字法的格式:chmod [权限数字] 文件
其实就可以理解为 [0][0][0],每一位代表一种权限,0:无 1:有,所以只读(r–):100 -> 4
常见权限组合:
755
:所有者rwx(7),组r-x(5),其他r-x(5)(适合脚本/目录,允许自己执行,他人只读执行)。644
:所有者rw-(6),组r–(4),其他r–(4)(适合普通文件,允许自己读写,他人只读)。700
:所有者rwx(7),组和其他无权限(适合敏感文件,仅自己访问)。
实例:
- 将文件权限设置为
rwxr-xr-x
:chmod 755 file.txt
- 将目录权限设置为
rwx------
:chmod 700 dir/
六、如何修改所有者和组?
除了权限,还可以修改文件的所有者(chown
)和所属组(chgrp
)。
1. 修改所有者:chown
格式:chown [新所有者] 文件
注意:修改所有者需要root
权限(用sudo
)。
实例:
- 将文件所有者改为
root
:sudo chown root file.txt
- 同时修改所有者和组:
sudo chown whb:whb file.txt
(将所有者改为whb,组改为whb)。
2. 修改所属组:chgrp
格式:chgrp [新组] 文件
实例:
- 将文件所属组改为
admin
:sudo chgrp admin file.txt
细节1:
用户访问文件的时候,确定自己相对于文件的身份角色,只会验证一次,换句话说:
权限只会验证一次
证明:
细节2:
关于可执行文件要被执行:
1.该文件本身就是一个可执行的文件
2.文件本身具有可执行权限
给X权限,不是能让你执行,而是当你想执行的时候,OS允许你执行
细节3:
文件的拥有者,具有修改文件权限的能力
细节4:
有时候例如安装软件时,普通用户无法直接安装,这时候就需要通过sudo暂时提高权限,需要输入当前用户的密码,普通用户一般而言是执行不了sudo的:
意思就是说你不在可以提权的人的名单里,解决办法很简单,用root账号打开 /etc/sudoers这个文件
在这个位置把想要提权的人的账号填进去
细节5:
把文件给另一个人或者组需要超级用户权限(因为你给别人一个东西,要经过别人同意才行,但是Linux下语法上我们无法让别人同意,我们不知道,也看不见)
七、三个子问题
1.进入一个子目录需要什么权限?
r:用户是否有权利查看指定目录下的文件属性
W:决定了特定用户是否有权利在该目录下,前能否新增,删除文件,和修改文件名!
所以进入一个目录需要x权限
要说明的是注意分辨 目录的权限和目录下文件的权限
如果前者没有x权限,不影响后者进行读写(前提是你知道该目录下文件的名字)
2.为什么我们新建的目录和普通文件的权限是我们所看到样子?
Linux系统中,为了对权限进行细粒度控制,就有了Linux权限掩码!
权限掩码默认是002(可以修改,重启后自动恢复默认值)
那么如何计算得到最终权限呢?
凡是出现在权限掩码中的权限,最终都应该在起始权限中去掉:
最终权限 = 起始权限“去掉”umask 即 最终权限=起始权限&(~umask)
3.粘滞位问题
如果我们今天想让多用户之间,共享文件?
我们就可以在系统级别的路径下创建一个share文件夹(不能在别人的家目录下,作为other我们没有权限进都进不去)
但是这时候我在share下创建一个文件不让除了我和某一个朋友之外的人rw,别人看不到气急败坏于是就删了这个文件。即便是root,指定目录下,一个其他人新建的文件,不让rw,但是可能我们普通用户可以删掉!这时候该怎么办呢?
chmod +t 文件 这样就可以了
希望本文能帮助你理解Linux权限的本质,学会正确设置权限,让你的系统更安全!