跳转到内容

文件权限与所有者

Linux 沿用了传统 Unix 的权限模型,每个文件和目录都同时记录着“谁能对它做什么”这两类信息:所有者身份(用户与用户组),以及针对不同身份分别授予的操作权限。这套模型是理解后续 root 权限、服务运行身份等一系列话题的基础。

执行 ls -l 查看文件详情时,最左侧会出现类似 -rwxr-xr-- 这样的字符串,可以拆解为四部分:

- rwx r-x r--
文件类型 所有者 所属组 其他用户

第一个字符表示文件类型(- 为普通文件,d 为目录,l 为符号链接)。后面每三个字符为一组,分别对应所有者(Owner)、所属组(Group)、其他用户(Others)三类身份各自拥有的权限,每组内固定是 r(读)、w(写)、x(执行)三位,无权限则显示为 -

对目录而言,这三位的含义略有不同:r 表示能否列出目录内容,w 表示能否在目录内创建或删除文件,x 表示能否进入该目录(即能否将其作为路径的一部分被访问)。

rwx 分别对应数值 4、2、1,三位相加得到一组权限对应的单个数字,例如 rwx = 7,r-x = 5,r-- = 4。因此 rwxr-xr-- 可以简写为 754,三位数字依次对应所有者、所属组、其他用户。这种记法在 chmod 命令中被广泛使用。

Terminal window
chmod 644 file.txt # 所有者读写,所属组和其他用户只读
chmod 755 script.sh # 所有者读写执行,所属组和其他用户读和执行
chmod +x script.sh # 在现有权限基础上,给所有身份追加执行权限
chmod u+w,g-w file.txt # 符号记法:给所有者加写权限,给所属组去掉写权限

数字记法(如 644)会直接覆盖原有权限设置为指定值;符号记法(如 +x)则是在现有权限基础上做增量修改,两种写法适用场景不同:需要精确设定完整权限组合时用数字记法,只想调整某一位权限时用符号记法更直观。

Terminal window
chown newowner file.txt # 修改文件所有者
chown newowner:newgroup file.txt # 同时修改所有者和所属组
chown -R newowner dir/ # 递归修改目录及其内容的所有者

普通用户默认只能修改自己拥有的文件的权限(chmod),但修改文件所有者(chown)通常需要 root 权限,因为这项操作涉及把资源的归属关系转移给另一个用户,普通用户没有权限单方面完成这类转移。

新建文件的默认权限从哪来:umask

Section titled “新建文件的默认权限从哪来:umask”

新创建的文件和目录,权限不是任意的,而是由系统的完整权限上限(文件默认为 666,即没有执行位;目录默认为 777)减去当前会话的 umask 值计算得出。执行 umask 可以查看当前值,常见默认值 022 意味着新建文件权限为 666-022=644,新建目录权限为 777-022=755——这也是为什么新建文件默认不带执行权限、需要手动 chmod +x 的原因。

这个主题是构建可靠 Linux 开发流程的重要组成部分。对它有清晰的理解,会让后续任务变得更容易,因为你能更快地判断某一步是否缺失或使用不当。

  • 在安全的测试环境中尝试这里展示的命令和配置。
  • 比较这些概念在不同发行版或工具之间的适用差异。
  • 记下一次实践中哪些步骤成功,哪些失败,这样下次遇到问题时更容易定位。
  • 将这篇文章与系列中相关内容结合起来,加深整体理解。
  • 跳过验证步骤,默认系统已经配置正确。
  • 不对命令中的路径、软件包名称或工具版本进行适配,直接复制粘贴执行。
  • 把这个主题当成孤立的技巧,而不是整个开发流程的一部分。