深入理解 Linux 权限机制:文件、用户与访问控制全解析

4 阅读4分钟

在 Linux 系统中,权限管理是保障系统安全与多用户协作的核心机制。无论是日常开发、服务器运维,还是容器化部署,掌握 Linux 权限体系都至关重要。本文将系统性地讲解 Linux 权限的组成、作用方式、常用命令及高级特性,助你全面掌握这一基础而关键的知识点。


一、权限的本质:谁可以对什么做什么?

Linux 是一个多用户、多任务操作系统,权限机制的核心目标是:控制用户(或进程)对系统资源(如文件、目录、设备)的访问行为

权限主要围绕三个基本操作定义:

  • r(read) :读取内容
  • w(write) :修改内容
  • x(execute) :执行(对文件)或进入(对目录)

这些权限分别作用于三类主体:

  • Owner(u) :文件所有者
  • Group(g) :文件所属组的成员
  • Others(o) :其他所有用户

二、文件权限的表示方式

1. 符号表示法(Symbolic Notation)

例如:

-rwxr-xr-- 1 alice dev 1024 Jan 10 file.txt

分解如下:

  • 第一个字符 - 表示文件类型(-=普通文件,d=目录,l=链接等)

  • 接下来的 9 位分为三组:

    • rwx → 所有者(alice)拥有读、写、执行权限
    • r-x → 所属组(dev)可读、不可写、可执行
    • r-- → 其他用户仅可读

2. 数字表示法(Octal Notation)

每组权限用三位二进制表示,转换为八进制数字:

  • r = 4, w = 2, x = 1
  • 例如 rwx = 4+2+1 = 7,r-x = 4+0+1 = 5,r-- = 4

因此,上述权限可写作:754

常用权限组合:

  • 644:普通文件(所有者可读写,组和其他只读)
  • 755:可执行脚本或目录(所有者全权,他人可读可执行/进入)
  • 600:私密文件(仅所有者可读写)

三、核心命令:查看与修改权限

命令用途
ls -l查看文件详细权限信息
chmod修改文件权限(支持符号或数字方式)
chown修改文件所有者
chgrpchown :group修改文件所属组

示例:

# 给所有者添加执行权限
chmod u+x script.sh

# 设置权限为 755
chmod 755 app/

# 更改所有者和组
chown alice:dev config.conf

⚠️ 注意:只有 root 或文件所有者才能修改文件权限或所有权。


四、目录权限的特殊含义

对目录而言,权限含义略有不同:

  • r:允许列出目录内容(ls
  • w:允许在目录中创建、删除、重命名文件(需配合 x)
  • x:允许进入目录(cd)或访问其下文件的元数据

🔑 关键点:没有 x 权限,即使有 r,也无法访问目录内任何文件!

例如,若目录权限为 r--,执行 ls 可能显示文件名,但 cat file 会失败,因为无法“进入”目录获取 inode 信息。


五、特殊权限位(Special Permission Bits)

除了基本 rwx,Linux 还支持三种特殊权限:

1. SUID(Set User ID)

  • 作用于可执行文件
  • 使进程以文件所有者身份运行,而非执行者
  • 权限位显示为 s(如 -rwsr-xr-x
  • 常见例子:passwd 命令(普通用户可修改 /etc/shadow
chmod u+s /usr/bin/mytool

2. SGID(Set Group ID)

  • 作用于文件:进程以文件所属组身份运行
  • 作用于目录:新创建的文件自动继承目录的组
  • 权限位显示为 s(如 drwxr-sr-x
chmod g+s shared_dir/

3. Sticky Bit(粘滞位)

  • 仅用于目录
  • 限制:只有文件所有者或 root 才能删除该目录下的文件
  • 典型应用:/tmp 目录(权限 drwxrwxrwt
  • 权限位显示为 t
chmod +t /tmp/shared/

六、进阶:ACL(访问控制列表)

传统权限模型仅支持“所有者-组-其他”三类主体,不够灵活。ACL(Access Control List) 允许为特定用户或组设置独立权限。

启用与使用 ACL:

# 查看 ACL
getfacl file.txt

# 为用户 bob 添加读写权限
setfacl -m u:bob:rw file.txt

# 删除某条 ACL
setfacl -x u:bob file.txt

# 设置默认 ACL(仅对目录有效,影响新文件)
setfacl -d -m g:dev:rx project/

💡 文件系统需挂载时启用 acl 选项(现代 Linux 发行版通常默认开启)。


七、权限与安全实践建议

  1. 最小权限原则:只授予必要权限,避免 777
  2. 敏感文件设为 600(如 SSH 私钥、配置文件)
  3. 谨慎使用 SUID/SGID:可能被利用提权
  4. 定期审计权限:使用 find / -perm -4000 2>/dev/null 查找 SUID 文件
  5. 使用 ACL 替代宽松组权限,实现精细控制

八、结语

Linux 权限机制看似简单,实则蕴含严谨的设计哲学:通过清晰的访问控制模型,在开放性与安全性之间取得平衡。从基础的 rwx 到 ACL,再到特殊权限位,每一层都为不同场景提供了解决方案。

掌握这些知识,不仅能让你更安全地管理系统,还能在排查“Permission denied”错误时游刃有余。记住:权限不是障碍,而是秩序的守护者。