Linux下权限管理
- Linux权限的用途
- Linux权限说明
- [UGO 权限模型](#UGO 权限模型)
- 权限变更操作
- 递归批量修改权限
- [权限掩码 umask](#权限掩码 umask)
- [Linux 特殊权限](#Linux 特殊权限)
Linux权限的用途
权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过该机制限制不同用户/用户组对文件的操作行为。
系统中每个进程均以某一用户身份运行,进程权限等同于对应用户权限,用户权限越大,对应进程权限越高。
Linux权限说明
Linux 中每个文件都具备三类基础权限,作用区分如下:
| 权限 | 对文件的影响 | 对目录的影响 |
|---|---|---|
r(只读) |
可读取文件内容 | 可列出目录内容 |
w(写入) |
可修改文件内容 | 可在目录内创建、删除文件 |
x(执行) |
可将文件当作命令执行 | 可进入、访问目录内部 |
| 目录必须拥有 x 权限,否则无法正常进入查看内容 |
UGO 权限模型
- Linux 权限基于 UGO 模型管控
text
U = User 代表文件所有者
G = Group 代表文件所属组
O = Other 代表其他所有用户
文件权限分为三组 rwx,依次对应 U、G、O
每个文件绑定专属属主与属组,非属主、非属组用户匹配 Other 权限
查看文件权限信息
使用 ls -l 命令查看文件完整属性
bash
[root@itocean ~]# ls -l
total 2206976
-rw-r--r-- 1 root root 545051 May 9 10:29 100w.zip
-rw-r--r-- 1 root root 2165742151 May 9 10:13 2024-2026.zip
-rw-r--r-- 1 root root 93640286 May 9 10:30 aaaa.zip
drwxr-xr-x 3 root root 4096 Apr 20 12:31 gitee
| 字段拆分 | 示例内容 | 详细解释 |
|---|---|---|
| 文件类型 | - |
普通文件;d目录;l软链接 |
| 属主权限 | rw- |
文件所有者:可读、可写、无执行权限 |
| 属组权限 | r-- |
同组用户:仅可读 |
| 其他权限 | r-- |
外来用户:仅可读 |
| 硬链接数 | 1 |
文件硬链接统计数量 |
| 所属用户 | root |
文件拥有者 |
| 所属组 | root |
文件归属用户组 |
| 文件大小 | 2165742151 |
单位:字节 |
| 修改时间 | May 9 10:13 |
文件最后修改时间 |
| 文件名称 | 2024-2026.zip |
文件名 |
权限变更操作
一、符号方式修改权限 chmod
语法规则
text
u 属主 g 属组 o 其他 a 全部用户
+ 增加权限 - 移除权限 = 直接设定权限
实操示例
bash
# 查看原始权限
[root@itocean ~]# ls -l aaaa.zip
-rw-r--r-- 1 itocean cloud 93640286 May 9 10:30 aaaa.zip
# 给属主添加执行权限
[root@itocean ~]# chmod u+x aaaa.zip
# 设定属组为读写执行
[root@itocean ~]# chmod g=rx aaaa.zip
# 移除其他用户读权限
[root@itocean ~]# chmod o-r aaaa.zip
# 查看修改后权限
[root@itocean ~]# ls -l aaaa.zip
-rwxr-x--- 1 itocean cloud 93640286 May 9 10:30 aaaa.zip
二、数字方式修改权限 chmod
权限数值规则
- r (读) = 4( 2 2 2^2 22)
- w (写) = 2( 2 1 2^1 21)
- x (执行) = 1( 2 0 2^0 20)
常用权限组合
- rw- = 4+2 = 6
- r-x = 4+1 = 5
- rwx = 4+2+1 = 7
- r-- = 4
- -wx = 3
- --x = 1
- --- = 0
三位数字含义
- 第一位:属主权限
- 第二位:属组权限
- 第三位:其他用户权限
通用默认权限
- 644 = rw-r--r-- 普通文件默认权限
- 755 = rwxr-xr-x 目录/脚本默认权限
- 777 = rwxrwxrwx 全开所有权限
数字权限实操
bash
# 统一设置为755权限
[root@itocean ~]# chmod 755 aaaa.zip
[root@itocean ~]# ls -l
total 2206976
-rw-r--r-- 1 root root 545051 May 9 10:29 100w.zip
-rw-r--r-- 1 root root 2165742151 May 9 10:13 2024-2026.zip
-rwxr-xr-x 1 itocean cloud 93640286 May 9 10:30 aaaa.zip
drwxr-xr-x 3 root root 4096 Apr 20 12:31 gitee
三、修改文件所属用户与组
1. chown 修改属主+属组
bash
# 格式:chown 用户名:组名 文件名
[root@itocean ~]# chown itocean:itocean aaaa.zip
[root@itocean ~]# ls -l
total 2206976
-rw-r--r-- 1 root root 545051 May 9 10:29 100w.zip
-rw-r--r-- 1 root root 2165742151 May 9 10:13 2024-2026.zip
-rw-r--r-- 1 itocean itocean 93640286 May 9 10:30 aaaa.zip
drwxr-xr-x 3 root root 4096 Apr 20 12:31 gitee
2. chgrp 仅修改所属组
bash
[root@itocean ~]# chgrp cloud aaaa.zip
[root@itocean ~]# ls -l
total 2206976
-rw-r--r-- 1 root root 545051 May 9 10:29 100w.zip
-rw-r--r-- 1 root root 2165742151 May 9 10:13 2024-2026.zip
-rw-r--r-- 1 itocean cloud 93640286 May 9 10:30 aaaa.zip
drwxr-xr-x 3 root root 4096 Apr 20 12:31 gitee
递归批量修改权限
如需一次性修改整个目录+内部所有文件 ,加 -R 递归参数
测试目录环境
bash
[root@itocean ~]# ls -ld /mnt
drwxr-xr-x. 5 root root 4096 May 21 09:10 /mnt
[root@itocean ~]# ls -l /mnt
total 0
-rw-r--r-- 1 root root 0 May 21 09:10 10.txt
-rw-r--r-- 1 root root 0 May 21 09:10 1.txt
-rw-r--r-- 1 root root 0 May 21 09:10 2.txt
-rw-r--r-- 1 root root 0 May 21 09:10 3.txt
-rw-r--r-- 1 root root 0 May 21 09:10 4.txt
-rw-r--r-- 1 root root 0 May 21 09:10 5.txt
-rw-r--r-- 1 root root 0 May 21 09:10 6.txt
-rw-r--r-- 1 root root 0 May 21 09:10 7.txt
-rw-r--r-- 1 root root 0 May 21 09:10 8.txt
-rw-r--r-- 1 root root 0 May 21 09:10 9.txt
递归修改权限
bash
[root@itocean ~]# chmod -R 777 /mnt
[root@itocean ~]# ls -ld /mnt
drwxrwxrwx. 5 root root 4096 May 21 09:10 /mnt
[root@itocean ~]# ls -l /mnt
total 0
-rwxrwxrwx 1 root root 0 May 21 09:10 10.txt
-rwxrwxrwx 1 root root 0 May 21 09:10 1.txt
-rwxrwxrwx 1 root root 0 May 21 09:10 2.txt
-rwxrwxrwx 1 root root 0 May 21 09:10 3.txt
-rwxrwxrwx 1 root root 0 May 21 09:10 4.txt
-rwxrwxrwx 1 root root 0 May 21 09:10 5.txt
-rwxrwxrwx 1 root root 0 May 21 09:10 6.txt
-rwxrwxrwx 1 root root 0 May 21 09:10 7.txt
-rwxrwxrwx 1 root root 0 May 21 09:10 8.txt
-rwxrwxrwx 1 root root 0 May 21 09:10 9.txt
递归修改属主属组
bash
[root@itocean ~]# chown -R itocean:itocean /mnt
[root@itocean ~]# ls -ld /mnt
drwxrwxrwx. 5 itocean itocean 4096 May 21 09:10 /mnt
[root@itocean ~]# ls -l /mnt
total 0
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 10.txt
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 1.txt
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 2.txt
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 3.txt
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 4.txt
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 5.txt
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 6.txt
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 7.txt
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 8.txt
-rwxrwxrwx 1 itocean itocean 0 May 21 09:10 9.txt
递归仅修改所属组
bash
[root@itocean ~]# chgrp -R cloud /mnt
[root@itocean ~]# ls -ld /mnt
drwxrwxrwx. 5 itocean cloud 4096 May 21 09:10 /mnt
[root@itocean ~]# ls -l /mnt
total 0
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 10.txt
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 1.txt
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 2.txt
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 3.txt
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 4.txt
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 5.txt
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 6.txt
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 7.txt
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 8.txt
-rwxrwxrwx 1 itocean cloud 0 May 21 09:10 9.txt
权限掩码 umask
作用
umask 决定新建文件、目录的默认初始权限
计算规则
- 目录默认最大权限:
777 - 文件默认最大权限:
666 - 实际权限 = 最大权限 - umask 值
系统默认值
- root 用户默认 umask:
022 - 普通用户默认 umask:
002
权限计算示例
-
root 用户
新建文件:666 - 022 = 644
新建目录:777 - 022 = 755
-
普通用户
新建文件:666 - 002 = 664
新建目录:777 - 002 = 775
常用命令
bash
# 查看当前umask值
umask
# 临时修改umask
umask 022
Linux 特殊权限
除基础 rwx 权限外,系统还有三类高级特殊权限
| 权限 | 数值 | 作用说明 |
|---|---|---|
| SUID | 4 | 以文件属主身份执行程序,而非当前执行用户 |
| SGID | 2 | 目录内新建文件自动继承目录所属组 |
| Sticky | 1 | 防误删目录:仅文件所有者可删除自己文件 |
设置方式
符号设置
bash
chmod u+w 文件名 # 加SUID
chmod g+s 文件名 # 加SGID
chmod o+t 目录名 # 加粘滞位
数字组合设置
格式:特殊权限+普通三位权限
示例:
bash
# 4 代表SUID,755普通权限
chmod 4755 test.sh