Linux权限模型如何理解_访问控制原理解析【教程】

22次阅读

linux权限模型核心是“谁以什么身份访问时被允许做什么”,依赖文件/目录上固化三元权限位(u/g/o)实时比对;ls -l的10字符中首字符为类型,后9位按3+3+3分组表示所有者、所属组、其他人的rwx权限;目录需x位才能cd进入,故644不适用于目录而应选755;chmod符号法适合增量修改,数字法适合批量重置;目录的rwx含义与文件不同:r为ls列表、w为增删改文件、x为cd进入及访问元数据;权限生效取决于访问者身份(id)、资源归属(ls -l)和创建掩码(umask)三者共同作用。

Linux权限模型如何理解_访问控制原理解析【教程】

Linux 权限模型的核心不是“谁可以做什么”,而是“**谁以什么身份访问时,被允许做什么**”——它不依赖全局策略,而靠每个文件/目录上固化的一组三元权限位(u/g/o)实时比对决定放行与否。

ls -l 输出的10个字符到底在说什么

执行 ls -l file.txt 看到类似 -rw-r--r-- 这串字符,前1位是类型(-普通文件、d目录),后面9位才是权限,**严格按3+3+3分组**:

  • rw- → 所有者(u):可读可写,不可执行
  • r-- → 所属组(g):只可读
  • r-- → 其他人(o):只可读

⚠️ 容易踩的坑:chmod 644 看似“所有者读写、组和其他人只读”,但若目标是目录,644 会让组和其他人**无法 cd 进入**——因为目录需要 x(执行)位才可进入,而 4r)不含 x。正确应为 755(目录)或 644(纯文本文件)。

chmod 符号法 vs 数字法:什么时候该用哪一种

符号法(如 chmod u+x script.sh)适合**增量修改**,语义清晰、不易误操作;数字法(如 chmod 755)适合**批量重置**,但容易因记混数值含义导致越权(比如把 777 当“安全默认值”用)。

  • 数字法本质是八进制:每位 = r(4) + w(2) + x(1),例如 6 = 4+2 = rw-
  • 符号法支持 a(all)、u/g/o 精准定位,还能用 = 强制覆盖(chmod go=r file
  • 真实场景中,脚本部署常用符号法避免覆盖已有权限;初始化服务目录则倾向数字法统一收口

为什么改了文件权限,还是进不了目录?

目录的 rwx 含义和文件完全不同:

  • r → 能否 ls 列出内容(看到有哪些文件)
  • w → 能否在目录内 touch/rm/mv 文件(**删除文件的权限由目录的 w 控制,而非文件自身权限!**)
  • x → 能否 cd 进入,以及能否访问其下文件的元数据(比如 stat

典型错误:给 /var/www/html 设置了 755,但 Web 服务器用户(如 www-data)不在该目录所属组里 → 实际生效的是 others 权限段,而 others 若无 x,连 open() 都会失败,报错 Permission denied

chown 和 umask:权限的源头控制

权限不只是“改出来”的,更是“生出来”的:

  • chown user:group file 改变属主和属组,直接影响 u/g 权限段是否生效
  • umask 是创建文件/目录时的“权限屏蔽码”,比如 umask 002 表示新文件默认为 664666 & ~002),新目录为 775777 & ~002
  • 注意:umask 不影响已有文件,也不影响 root 用户创建文件的默认行为(rootumask 常为 022,更保守)

真正难啃的点从来不是命令怎么敲,而是搞清“当前访问者是谁”(id 命令查 UID/GID)、“当前资源属谁”(ls -l)、“系统创建它时用了什么掩码”(umask)——这三者缺一不可。

text=ZqhQzanResources