Linux 权限管理与 ACL 访问控制

Linux 权限管理与 ACL 访问控制

一、基本权限概述

Linux 系统通过权限控制用户对文件和目录的访问,核心权限分为读(r)、写(w)、执行(x),分别对应数字权限值 4、2、1。权限针对三类对象设置:所有者(u)所属组(g)其他用户(o),三者共同构成完整的权限控制体系。

1. 基本权限与数字对应关系

|------|------|-----|------------------------|------|
| 权限字符 | 权限含义 | 数字值 | 组合示例(文件 / 目录) | 数字表示 |
| r | 读权限 | 4 | 只读(r--r--r--) | 444 |
| w | 写权限 | 2 | 读写(rw-rw-rw-) | 666 |
| x | 执行权限 | 1 | 读写执行(rwxrwxrwx) | 777 |
| - | 无权限 | 0 | 所有者读写执行,其他无(rwx------) | 700 |

注意:目录必须拥有 x(执行)权限,否则无法通过 cd 命令切换到该目录。

二、权限管理命令(chmod)

chmod 用于修改文件或目录的权限,支持字符模式和数字模式两种操作方式。

1. 字符模式语法

复制代码
chmod [对象][操作][权限] 文件名/目录名
  • 对象:u(所有者)、g(所属组)、o(其他用户)、a(所有用户,默认)
  • 操作:+(添加权限)、-(移除权限)、=(设置权限,覆盖原有)
  • 权限:r、w、x
示例:
java 复制代码
# 给文件所有者添加执行权限

chmod u+x file.txt

# 移除所属组的写权限

chmod g-w file.txt

# 给所有用户设置读写权限(覆盖原有)

chmod a=rw dir/

2. 数字模式语法

复制代码
chmod [所有者权限][所属组权限][其他用户权限] 文件名/目录名

通过三位数字分别指定所有者、所属组、其他用户的权限(每位数字为 r/w/x 的数值和)。

示例:
java 复制代码
# 所有者读写执行,所属组读执行,其他用户只读(754)

chmod 754 script.sh

# 所有用户读写执行(777,谨慎使用)

chmod 777 data/

三、特殊权限

特殊权限在基本权限基础上扩展了额外功能,适用于特定场景(如权限继承、身份临时切换)。

1. SUID(Set User ID)

  • 标识:u+s(数字表示 4xxx)
  • 作用:应用于二进制命令文件,执行该命令时临时获得文件所有者的身份(通常为 root)。
  • 典型用途:允许普通用户执行需要 root 权限的命令(如 passwd 修改密码)。
示例:
java 复制代码
# 给 mkdir 命令添加 SUID 权限

chmod u+s /usr/bin/mkdir

2. SGID(Set Group ID)

  • 标识:g+s(数字表示 2xxx)
  • 作用
    • 应用于命令文件:执行时临时获得文件所属组的身份。
    • 应用于目录:目录中新建的文件 / 目录会继承该目录的所属组(而非创建者的基本组)。
示例:
java 复制代码
# 给目录添加 SGID 权限(新文件继承目录所属组)

chmod g+s /tmp/shared_dir

3. Sticky Bit(粘滞位)

  • 标识:o+t(数字表示 1xxx)
  • 作用 :仅应用于目录,限制删除权限 ------只有文件所有者或 root 可删除该目录下的文件,其他用户即使有写权限也无法删除他人文件。
  • 典型场景:系统临时目录 /tmp 默认设置该权限。
示例:
java 复制代码
# 给共享目录添加粘滞位

chmod o+t /data/public

四、默认权限与 umask

新建文件或目录的默认权限由 umask(权限掩码)决定,umask 用于从最高权限中 "减去" 不需要的权限。

1. 最高权限基准

  • 目录:最高权限为 0777(rwxrwxrwx)
  • 文件:最高权限为 0666(rw-rw-rw-,默认无执行权限)

2. 默认 umask 值

  • root 用户:0022(目录默认权限:0777-0022=0755;文件默认权限:0666-0022=0644)
  • 普通用户:0002(目录默认权限:0777-0002=0775;文件默认权限:0666-0002=0664)

3. 临时修改 umask

java 复制代码
# 临时将 umask 改为 0002(仅当前会话有效)

umask 0002

注意:不建议永久修改 umask,可能导致新建文件 / 目录权限过松,存在安全风险。

五、所有者与所属组管理

1. 修改所有者(chown)

用于变更文件或目录的所有者,语法:

java 复制代码
# 修改所有者

chown 新所有者 文件名/目录名

# 同时修改所有者和所属组(用 : 分隔)

chown 新所有者:新所属组 文件名/目录名

# 递归修改目录(包括子文件/子目录)

chown -R 新所有者:新所属组 目录名
示例:
javascript 复制代码
# 将 file.txt 的所有者改为 admin

chown admin file.txt

# 递归将 data/ 目录的所有者改为 root,所属组改为 dev

chown -R root:dev data/

2. 修改所属组(chgrp)

专门用于变更文件或目录的所属组,语法:

javascript 复制代码
# 修改所属组

chgrp 新所属组 文件名/目录名

# 递归修改目录所属组

chgrp -R 新所属组 目录名
示例:
java 复制代码
# 将 dir/ 的所属组改为 test

chgrp test dir/

六、ACL 访问控制(setfacl)

ACL(Access Control List)提供更精细的权限控制,允许为特定用户或组单独设置权限,突破传统的 "所有者 - 所属组 - 其他" 三层权限限制。

1. 基本语法(setfacl)

java 复制代码
# 给用户设置权限

setfacl -m u:用户名:权限 文件/目录

# 给组设置权限

setfacl -m g:组名:权限 文件/目录
  • 权限:支持 r(读)、w(写)、x(执行),目录需 x 权限才能进入。

2. 常用示例

(1)给特定用户设置文件权限
java 复制代码
# 允许 admin 用户对 file.txt 拥有读写权限

setfacl -m u:admin:rw file.txt
(2)给特定组设置目录权限
java 复制代码
# 允许 lisi 组对 dir/ 拥有读写执行权限

setfacl -m g:lisi:rwx dir/
(3)设置目录权限继承(默认权限)

为目录设置默认 ACL 后,新建的子文件 / 子目录会自动继承该权限:

java 复制代码
# 允许 admin 用户对 dir/ 有读写执行权限,并设置继承

setfacl -m u:admin:rwx dir/ # 目录本身权限

setfacl -m d:u:admin:rwx dir/ # 默认继承权限(d 表示 default)

3. ACL 权限管理命令

|----------------|---------------------|
| 命令 | 功能 |
| setfacl -b 文件名 | 清除文件 / 目录的所有 ACL 权限 |
| setfacl -k 目录名 | 清除目录的默认继承权限 |
| getfacl 文件名 | 查看文件 / 目录的 ACL 权限详情 |

总结

  • 基本权限:通过 chmod 管理 rwx 权限,支持字符和数字两种模式。
  • 特殊权限:SUID、SGID、Sticky Bit 适用于身份临时切换、权限继承等场景。
  • 默认权限:由 umask 决定,root 与普通用户默认值不同。
  • 所有者 / 组管理:chown 和 chgrp 用于变更文件的归属关系。
  • ACL 权限:setfacl 提供精细化控制,支持为特定用户 / 组单独授权及权限继承。

掌握权限管理是保障 Linux 系统安全的核心技能,需根据实际场景合理配置权限,避免过度开放或权限不足。

相关推荐
wb1893 分钟前
服务器的Mysql 集群技术
linux·运维·服务器·数据库·笔记·mysql·云计算
zl0_00_015 分钟前
web刷题2
数据库
天上掉下来个程小白1 小时前
Docker-07.Docker基础-数据卷挂载
运维·docker·微服务·容器
whabc1001 小时前
ssh连接VirtualBox中的Ubuntu24.04(win11、putty、NAT 模式)
运维·ssh
热爱生活的五柒1 小时前
服务器突然之间特别卡,什么原因?
运维·服务器
huangyuchi.2 小时前
【Linux系统】详解,进程控制
linux·进程控制·进程创建·进程等待·进程程序替换·退出码·进程终止
SelectDB2 小时前
森马服饰从 Elasticsearch 到阿里云 SelectDB 的架构演进之路
大数据·数据库·数据分析
寒士obj2 小时前
MySQL偏门但基础的面试题集锦
数据库·mysql
zly35002 小时前
Linux(centos)安全狗
linux·运维·服务器
唐叔在学习2 小时前
9类主流数据库 - 帮你更好地进行数据库选型!
数据库·redis·mysql·mongodb·nosql·大数据存储