Linux文件权限详解,chmod和chown命令使用
前言
Nginx 报 403 Forbidden?文件改完了不生效?权限不对导致各种奇怪问题?Linux 的文件权限是新手最容易搞混的地方。什么是 rwx?755 和 644 有什么区别?chown 和 chmod 分别是干嘛的?本文就把 Linux 文件权限讲明白,让你一看就懂。
查看文件权限
用 ls -l 查看文件详细信息:
ls -l /var/www/html/index.html
输出示例:
-rw-r--r-- 1 nginx nginx 1234 Oct 5 10:30 /var/www/html/index.html
权限字符串详解
最开头的 -rw-r--r-- 就是权限,拆解一下:
- rw- r-- r--
① ② ③ ④
- ① 文件类型:
-是普通文件,d是目录,l是链接 - ② 所有者权限(user):
rw-= 可读可写,不可执行 - ③ 所属组权限(group):
r--= 只读 - ④ 其他人权限(other):
r--= 只读
rwx 含义
| 字符 | 含义 | 数字 |
|---|---|---|
r |
读(read) | 4 |
w |
写(write) | 2 |
x |
执行(execute) | 1 |
所以:
rwx= 4+2+1 = 7rw-= 4+2+0 = 6r--= 4+0+0 = 4r-x= 4+0+1 = 5
常用权限数字
| 数字 | 权限 | 说明 |
|---|---|---|
| 755 | rwxr-xr-x | 所有者可读写执行,其他人可读执行(常用目录、脚本) |
| 644 | rw-r--r-- | 所有者可读写,其他人只读(常用文件) |
| 700 | rwx------ | 只有所有者能读写执行(私密文件) |
| 600 | rw------- | 只有所有者能读写(私密文件) |
| 777 | rwxrwxrwx | 所有人都能读写执行(不安全,尽量别用) |
记住两个最常用的:
- 目录用
755 - 文件用
644
chmod 修改权限
数字方式
chmod 755 /var/www/html
把目录权限改成 755。
chmod 644 /var/www/html/index.html
把文件权限改成 644。
递归修改
chmod -R 755 /var/www/html/
把目录下所有文件和子目录都改成 755。
注意: 递归修改的时候要小心,一般文件应该是 644,目录是 755。如果全部改成 755,文件就能执行了,不安全。
字母方式
chmod u+x script.sh
给所有者加执行权限。
chmod g+w file.txt
给所属组加写权限。
chmod o-r file.txt
去掉其他人的读权限。
u:所有者g:所属组o:其他人+:加权限-:减权限
chown 修改所有者
修改文件所有者
chown nginx /var/www/html/index.html
把文件所有者改成 nginx。
修改所有者和所属组
chown nginx:nginx /var/www/html/index.html
所有者改成 nginx,所属组也改成 nginx。
递归修改
chown -R nginx:nginx /var/www/html/
把整个目录的所有者和所属组都改成 nginx。
实际应用场景
场景1:Nginx 报 403
Nginx 访问网站报 403 Forbidden,一般是权限不对。
ls -l /var/www/html/index.html
看所有者和权限。如果文件是 root 的,Nginx 进程读不到,就会 403。
chown nginx:nginx /var/www/html/index.html
chmod 644 /var/www/html/index.html
场景2:脚本不能执行
写了个 shell 脚本,运行提示 Permission denied。
chmod +x script.sh
加执行权限就能跑了。
场景3:目录权限不对
网站目录权限不对,上传的图片打不开。
chmod -R 755 /var/www/html/
chown -R nginx:nginx /var/www/html/
常见坑
坑1:chmod 777 解决一切
很多人一遇到权限问题就 chmod 777,这是最懒也最不安全的做法。777 意味着所有人都能读写执行,黑客上传个木马就直接跑了。
正确做法: 文件用 644,目录用 755,所有者设成运行服务的用户。
坑2:只改权限不改所有者
权限对了,但所有者不对,服务还是读不到文件。
解决: 权限和所有者都要对。比如 Nginx 运行用户是 nginx,文件所有者也要是 nginx。
坑3:递归 chmod 把文件也改成 755
chmod -R 755 把所有文件都改成可执行了,不安全。
正确做法: 目录用 755,文件用 644。可以用 find 分开改:
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
坑4:改了权限不生效
改了权限但还是不对,看看是不是有 SELinux 在捣乱。
解决: 先临时关掉 SELinux 测试:
setenforce 0
如果关了就好了,说明是 SELinux 的问题。
总结
Linux 文件权限核心:
- rwx = 4+2+1
- 目录用 755,文件用 644
- chmod 改权限,chown 改所有者
- 不要随便用 777
记住两个最常用的:目录 755,文件 644。遇到权限问题先 ls -l 看看,再改,别上来就 777。
遇到问题加QQ23979811 协助处理