跳转至

文件权限与 umask

结论

  • 数字位:rwx = 4/2/1,三组依次是 属主 / 属组 / 其他
  • 新文件默认权限是 666 & ~umask,新目录是 777 & ~umask
  • 常见 umask 022 → 文件 644、目录 755;要团队协作可用 umask 002 → 664 / 775

查看

umask                 # 当前值
ls -l                 # 权限列
stat -c '%a %U:%G %n' file.txt

三个特殊位

位 数字 作用 典型用途
setuid 4000 以文件属主身份执行 /usr/bin/passwd
setgid 2000 目录内新建文件继承目录属组 团队共享目录
sticky 1000 只有属主能删除自己的文件 /tmp

共享目录的正确做法

sudo mkdir /srv/share
sudo chgrp devteam /srv/share
sudo chmod 2775 /srv/share          # setgid + 组可写
sudo chmod g+s /srv/share           # 同上,显式写法

这样组内任何人新建的文件都自动属于 devteam,不用每次 chgrp。

别对代码目录用 777

777 意味着任何进程都能改写你的脚本,配合定时任务就是提权入口。需要让服务用户读写时,用 chown 服务用户:组 + 664/775。

排错顺序

  1. id 确认自己是哪个用户、在哪些组
  2. namei -l /path/to/file 逐级看目录权限(目录缺 x 会导致文件读不了)
  3. getfacl 看有没有 ACL 覆盖
  4. 最后才怀疑 SELinux / AppArmor