
Linux 文件权限chmod、chown、umask 到底怎么用1. 前言Linux 是多用户操作系统。一个文件能不能被读取、修改、执行不只取决于文件本身还取决于当前用户是谁、文件属于谁、文件属于哪个用户组以及权限位如何设置。本文围绕 Linux 权限模型展开重点讲清楚三个命令chmod # 修改权限 chown # 修改文件所属用户/用户组 umask # 控制新建文件的默认权限2. 如何查看文件权限使用ls -l示例-rwxr-xr-- 1 root root 1024 May 18 10:00 run.sh重点看第一段-rwxr-xr--它可以拆成四部分- rwx r-x r-- | | | | | | | └── 其他用户权限 | | └──────── 所属用户组权限 | └────────────── 文件所属用户权限 └─────────────────── 文件类型第一位表示文件类型符号含义-普通文件d目录l软链接后面 9 位是权限位每 3 位一组。3. rwx 分别表示什么对于普通文件权限含义r可以读取文件内容w可以修改文件内容x可以执行文件对于目录权限含义r可以查看目录下的文件名w可以创建、删除、重命名目录内文件x可以进入目录访问目录内文件目录的x权限非常重要。如果目录没有x权限即使有r权限也可能无法进入。4. chmod修改权限权限可以用数字表示权限数字r4w2x1三者相加得到一组权限数字权限7rwx6rw-5r-x4r–常见权限chmod 755 run.sh # rwxr-xr-x脚本/目录常用 chmod 644 file.txt # rw-r--r--普通文件常用 chmod 600 id_rsa # rw-------私钥常用 chmod 700 scripts # rwx------私有目录常用也可以使用符号方式chmod x run.sh # 给所有人增加执行权限 chmod ux run.sh # 只给所属用户增加执行权限 chmod g-w file.txt # 去掉用户组写权限 chmod o-r secret.txt # 去掉其他用户读权限递归修改目录chmod -R 755 project但不要随便递归chmod 777这会让所有用户都能读、写、执行风险很高。5. chown修改所属用户和用户组查看文件所属用户和用户组ls -l file.txt示例-rw-r--r-- 1 root root 100 file.txt两个root分别表示所属用户root 所属用户组root修改所属用户sudo chown user1 file.txt同时修改用户和用户组sudo chown user1:user1 file.txt递归修改目录sudo chown -R nginx:nginx /var/www/html常见场景sudo chown -R mysql:mysql /var/lib/mysql sudo chown -R www-data:www-data /var/www/html sudo chown user:user ~/.ssh/id_rsa6. umask控制默认权限umask决定新建文件和目录的默认权限。查看当前 umaskumask常见结果0022文件默认最大权限是666目录默认最大权限是777。如果 umask 是022新建文件权限666 - 022 644 新建目录权限777 - 022 755所以常见默认结果是-rw-r--r-- file.txt drwxr-xr-x dir临时修改 umaskumask 027这会让新建文件和目录权限更严格。7. 为什么不建议 chmod 777chmod 777表示所有用户都能读、写、执行它虽然能快速解决“Permission denied”但安全风险很大Web 目录可能被写入后门文件配置文件可能被普通用户修改脚本可能被替换SSH 私钥权限过宽会被拒绝使用。正确思路不是直接 777而是先判断谁需要访问 需要读、写还是执行 文件所属用户和用户组是否正确8. 常见问题排查8.1 脚本无法执行./run.sh报错Permission denied检查权限ls -l run.sh添加执行权限chmod x run.sh8.2 无法写入目录查看目录权限ls -ld /path/to/dir目录写入通常需要w x只有写权限不够还需要执行权限才能进入和操作目录。8.3 程序没有权限读配置文件检查文件所属用户ls -l config.yaml如果服务以nginx用户运行但文件只允许root读取就会失败。可以调整为sudo chown root:nginx config.yaml sudo chmod 640 config.yaml9. 小结Linux 权限模型可以总结为chmod改权限 chown改归属 umask控制默认权限常用命令回顾ls -l ls -ld dir chmod 755 run.sh chmod x run.sh chown user:user file.txt chown -R nginx:nginx /var/www/html umask umask 027理解rwx、用户、用户组、umask 之后大多数 Linux 权限问题都可以自己定位。