本文主要是介绍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 系统安全的核心技能,需根据实际场景合理配置权限,避免过度开放或权限不足。
这篇关于Linux权限管理与ACL访问控制详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!