Linux权限基础详解
01. 引言:Linux权限为什么重要?
绝大多数用户使用的是个人计算机,使用者一般都是被信任的人。在此基础上,用户都可以使用管理员身份直接登录。但在服务器上存储的数据庞大,价值更高,因此服务器对于权限的设计更加细致,对于用户的分级也要更加明确。因此Linux作为多用户操作系统,为每个文件都添加了很多属性来维护数据安全,避免配置不当造成数据泄露、服务瘫痪甚至服务器遭受攻击。例如使用chmod -R 777
导致数据库被恶意篡改。
我们可以通过ls -al
命令查看文件或者目录的权限信息。
ls -al
02. 用户与组:权限的分配基础
Linux下有两种用户:超级用户(root),普通用户(user),超级用户以命令提示符为#
,普通用户提示符为$
,使用su
完成用户切换。其中通过 用户(User)、组(Group) 和 其他(Other) 管理权限,每个文件/目录均有对应的归属关系在开头三个一组的集合中,它们共同决定系统资源的访问控制。
-
超级用户: 在Linux下权限最大,所做操作不受限制。
-
普通用户: 在Linux下有限的操作。
-
查看身份信息:
id # 显示当前用户的UID、GID及所属组
cat /etc/group # 查看所有组
cat /etc/group # 查看所有组
03.文件权限的操作与表示
3.1 文件类型与基本权限
采用字符表示完整权限需要10位,第1位表示文件类型 ,第2-4位表示用户权限(User
)第5-7位表示组权限(Group
) 第8-10位表示其他权限(Other
)。
文件类型标识符 | 文件类型 | 描述 | 查看方法 |
---|---|---|---|
- | 普通文件 | 常规文件,如文本、二进制、图片等 | ls -l 或 file 文件名 |
d | 目录文件 | 包含其他文件或子目录的容器 | ls -ld 目录名 |
l | 符号链接 | 指向另一个文件的快捷方式(软链接) | ls -l (显示 -> 目标路径) |
c | 字符设备文件 | 以字符流形式访问的设备(如键盘) | ls -l /dev |
b | 块设备文件 | 以数据块形式访问的设备(如硬盘、USB) | ls -l /dev |
p | 管道文件 | 进程间通信(FIFO)的特殊文件 | ls -l 或 mkfifo pipe_name |
s | 套接字文件 | 网络或本地进程间通信的接口 | ls -l /var/run |
3.3 权限表示法
- 读(read): 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- 写(write): 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- 执行(execu): 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
字符表示法:
权限类型 | 字符表示法 | 说明 |
---|---|---|
无权限 | --- | 无任何权限 |
执行 | --x | 仅允许执行(对文件:可执行,对目录:可进入) |
写 | -w- | 仅允许写入(对文件:可修改文件内容,对目录:可创建/删除文件) |
写 + 执行 | -wx | 可写和执行 |
读 | r-- | 仅允许读取 |
读 + 执行 | r-x | 可读和执行 |
读 + 写 | rw- | 可读写但不可执行,对目录不可浏览 |
全部权限 | rwx | 可读、写、执行 |
八进制表示法:
例如chmod 754 file.txt
可分解为下述形式:
数字 | 权限组 | 计算方式 | 对应字符权限 |
---|---|---|---|
7 | User | 4® + 2(w) + 1(x) | rwx |
5 | Group | 4® + 0 + 1(x) | r-x |
4 | Other | 4® + 0 + 0 | r-- |
常见权限示例:
八进制值 | 字符表示 | 典型用途 |
---|---|---|
644 | rw-r--r-- | 用户可读写,其他用户只读(如配置文件) |
755 | rwxr-xr-x | 用户完全控制,其他用户可读和执行(如脚本) |
777 | rwxrwxrwx | 所有用户完全控制 |
600 | rw------- | 仅用户可读写(如私钥文件) |
04. 权限管理命令实操
在实际应用中我们使用chmod
命令设置文件的访问权限,使用chown
命令修改文件拥有者,使用chgrp
命令修改文件或目录的所属组。
4.1 chmod 命令:
语法: chmod [参数] 文件名
功能: 设置文件的访问权限,符号表示使用+
,-
对其添加或者移除权限,若使用数字模式则无需如此操作。
常用参数: -R 递归修改目录文件的权限说明(只有文件的拥有者和root才可以改变文件的权限)。
4.1.1 符号模式(直观):
+
: 向权限范围增加权限代号所表示的权限 -:向权限范围取消权限代号所表示的权限=
: 向权限范围赋予权限代号所表示的权限u
:拥有者g
:拥有者同组用o
:其它用户a
:所有用户
示例代码:
chmod u+x test.txt # 为用户添加执行权限
chmod go-w test.txt # 移除组和其他的写权限
chmod a=x /home/abc.txt#对所有用户仅保留执行权限
4.1.2 数字模式(高效):
chmod 644 test.txt # 用户(rw-),组和其他(r--)
使用 sudo分配权限:
----------------------------------------------------------------------------
#chown:修改文件拥有者
#chown [参数] 用户名 文件名
sudo chown alice:developers app.log # 所有者改为alice,组改为developers
----------------------------------------------------------------------------
#chgrp::修改文件或目录的所属组
#chgrp [参数] 用户组名 文件名
#:-R 递归修改文件或目录的所属组
sudo chgrp admins /var/log/audit/ # 目录组改为admins
05. 目录权限的深层逻辑
-
执行权限(x):
对于目录,读权限就能进入该目录,写权限就是能在该目录下创建文件,进入目录需要的权限即x(可执行),这里
进入目录就是更改目录所在路径,更改之后进入目录就不用使用其他路径了,直接./就行。注
无x
权限的目录,即使有r
,也无法cd
进入或查看文件详情。chmod -x /backup # 移除所有用户的执行权限,阻止他人进入,但可读文件名(如果有r权限)
-
写权限(w):
注
删除文件需目录的w
权限,与文件自身权限无关!chmod o+w /shared # 允许其他用户在此目录创建/删除文件
06. 权限掩码(umask)与默认权限
语法格式: umask [参数] [权限掩码]
-
umask值:决定新建文件/目录的默认权限。
- 文件默认权限 =
666 - umask
- 目录默认权限 =
777 - umask
- 文件默认权限 =
-
设置方法:
umask 027 # 临时生效(文件默认权限640,目录750)
07.粘滞位
粘滞位是 Linux 文件权限中的一种特殊权限,主要用于 公共目录(如 /tmp
或 /var/tmp
),以确保用户只能删除或修改自己创建的文件,而不能删除其他用户的文件。即使目录权限是 777
(所有用户可读、写、执行),粘滞位也能提供额外的安全保护。当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由:
- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除
示例代码:
chmod +t /demo # 使用符号表示法
chmod -t /demo # 移除粘滞位
ls -ld /tmp
rwt
表示:- 所有者(
root
)有rwx
。 - 组用户有
rwx
。 - 其他用户有
rwt
(t
表示粘滞位)。
- 所有者(