Linux 每个文件 / 目录都有 属主 (owner)、属组 (group),以及 读 (r)、写 (w)、执行 (x) 三类权限,分为三块:属主权限、属组权限、其他用户权限。
权限字符与数字对应:
r=4,w=2,x=1例如:rwxr-xr--→ 754
一、修改文件 / 目录拥有者:chown
chown = change owner,修改属主、属组,需要 root/sudo。
语法
# 只修改属主
chown 用户名 文件名
# 同时修改属主:属组
chown 用户名:组名 文件名
# 只修改属组(前面冒号不能省)
chown :组名 文件名
# -R 递归(目录连同里面所有文件一起改,慎用!)
chown -R user:group /data/test
示例:
chown www-data:www-data /var/www/index.html
chown -R appuser:appgroup /opt/myapp
⚠️
-R递归修改目录权限,不要随便在/根目录执行,会炸系统。

二、修改文件权限:chmod
chmod = change mode,两种用法:数字法(常用)、符号法
1)数字权限(推荐)
chmod 权限数字 文件/目录
示例:
# 文件:属主读写,组只读,其他人只读 → rw-r--r-- = 644
chmod 644 test.txt
# 脚本:属主rwx,组rx,其他rx → rwxr-xr-x =755
chmod 755 run.sh
# 目录:700 只有属主能读写进入
chmod 700 secret_dir
# 递归修改目录下所有文件权限
chmod -R 755 /opt/web
2)符号模式(u/g/o/a + + - =)
u:属主 userg:属组 groupo:其他 othera:所有 all+添加权限,-删除权限,=设置权限
示例:
# 给属主增加执行权限
chmod u+x run.sh
# 去掉其他用户的写权限
chmod o-w test.txt
# 设置属组为只读
chmod g=r readme.md
三、查看权限和属主
ls -l filename
# 长列表输出示例
# -rw-r--r-- 1 root root 123 Oct 20 10:00 test.txt
# 第一位:文件类型(-普通文件 d目录 l软链接)
# 第2~4位:属主权限;5~7属组;8~10其他用户
# 后面依次:硬链接数、属主、属组、大小、时间、文件名
# 只看文件的属主属组信息
stat test.txt
四、目录 vs 文件 x 权限区别(容易踩坑)
文件 x:可以执行这个程序 / 脚本
目录 x:可以进入目录、访问里面文件;没有 x,就算有 r 也不能 ls 查看里面内容
目录常规权限:
755;静态文件:644
五、特殊权限(SUID / SGID / Sticky Bit)
SUID (4xxx):文件执行时,临时使用文件属主身份,如
/usr/bin/passwdSGID (2xxx):目录下新建文件自动继承目录属组;
Sticky (1xxx):粘滞位,典型
/tmp,文件所有者才能删除自己文件
chmod 1777 /tmp # Sticky bit
chmod 4755 /bin/xxx # SUID

六、umask 默认权限掩码
控制新建文件 / 目录的默认权限
# 查看当前掩码
umask
umask -S
默认:
文件最大初始权限 666,减去 umask;
目录最大初始权限 777,减去 umask。 例:umask=022 新建文件:666-022=644;新建目录:777-022=755
七、常见坑
chmod -R递归时,文件和目录权限需求不一样,一次性全部 755 会让隐私文件权限过大;复制文件时,cp 默认保留权限属性,mv 移动同分区保留属性;
NFS / 网络文件系统,UID/GID 在多机器不一致会导致权限错乱;
SELinux 上下文会额外控制访问,权限够了依然访问失败,要检查
ls -Z。
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢