Linux权限管理与ACL访问控制详解

2025-08-04 21:50

本文主要是介绍Linux权限管理与ACL访问控制详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Linux权限管理与ACL访问控制详解》Linux权限管理涵盖基本rwx权限(通过chmod设置)、特殊权限(SUID/SGID/StickyBit)及ACL精细授权,由umask决定默认权限,需合...

一、基本权限概述

linux 系统通过权限控制用户对文件和目录的访问,核心权限分为读(pythonr)、写(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

示例:

# 给文件所有者添加执行权限

chmod u+x file.txt

# 移除所属组的写权限

chmod g-w file.txt

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

chmod a=rw dir/

2. 数字模式语法

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

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

示例:

# 所有者读写执行,所属组读执行,其他用户只读(754)

chmod 754 script.sh

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

chmod 777 data/

三、特殊权限

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

1. SUID(Set User ID)

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

示例:

# 给 mkdir 命令添加 SUID 权限

chmod u+s /usr/bin/mkdir

2. SGID(Set Group ID)

标识:g+s(数字表示 2xxx)

作用

  • 应用于命令文件:执行时临时获得文件所属组的身份。
  • 应用于目录:目录中新建的文件 / 目录会继承该目录的所属组(而非创建者的基本组)。

示例:

# 给目录添加 SGID 权限(新文件继承目录所属组)

chmod g+s /tmp/shared_dir

3. Sticky Bit(粘滞位)

  • 标识:o+t(数字表示 1xxx)
  • 作用:仅应用于目录,限制删除权限 —&mdashwww.chinasem.cn;只有文件所有者或 root 可删除该目录下的文件,其他用户即使有写权限也无法删除他人文件。
  • 典型场景:系统临时目录 /www.chinasem.cntmp 默认设置该权限。

示例:

# 给共享目录添加粘滞位

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

# 临时将 umask 改为 0002(仅当前会话有效)

umask 0002

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

五、所有者与所属组管理

1. 修改所有者(chown)

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

# 修改所有者

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

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

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

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

chown -R 新所有者:新所属组 目录名

示例:

# 将 file.txt 的所有者改为 admin

chown admin file.txt

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

chown -R root:dev data/

2. 修改所属组(chgrp)

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

# 修改所属组

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

# 递归修改目录所属组

chgrp -R 新所属组 目录名

示例:

# 将 dir/ 的所属组改为 test

chgrp test dir/

六、ACL 访问控制(setfacl)

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

1. 基本语法(setfacl)

# 给用户设置权限

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

# 给组设置权限

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

2. 常用示例

(1)给特定用户设置文件权限

# 允许 admin 用户对 file.txt 拥有读写权限

setfacl -m u:admin:rw file.txt

(2)给特定组设置目录权限

# 允许 lisi 组对 dir/ 拥有读写执行权限

setfacl -m g:lisi:rwx dir/

(3)设置目录权限继承(默认权限)

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

# 允许 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 决定,roo编程t 与普通用户默认值不同。
  • 所有者 / 组管理:chown 和 chgrp 用于变更文件的归属关系。
  • ACL 权限:setfacl 提供精细化控制,支持为特定用户 / 组单独授权及权限继承。

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于Linux权限管理与ACL访问控制详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155589

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D