Linux 文件权限基础
- 权限三元组
Linux 中每个文件/目录的权限由 3 组字符表示(共 9 位):
1
2
3
4
| rwx rwx rwx
│││ │││ │││
└┬┘ └┬┘ └┬┘
Owner Group Others
|
r = 读 (4)
w = 写 (2)
x = 执行/进入目录 (1)
- 数字表示法
755 = rwxr-xr-x
644 = rw-r--r--
777 = rwxrwxrwx(危险!)
Nginx 权限需求分析
- Nginx 运行身份
默认以
www-data 用户和组运行(可通过 ps aux | grep nginx 确认)。
需要至少以下权限:
- 关键路径
假设你的项目路径为:
1
| /home/ubuntu/work/react-todo-demo/dist/
|
分步权限配置指南
步骤 1:检查当前权限
1
| namei -l /home/ubuntu/work/react-todo-demo/dist/index.html
|
示例输出:
1
2
3
4
5
6
7
8
| f: /home/ubuntu/work/react-todo-demo/dist/index.html
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-x--- ubuntu ubuntu ubuntu # 问题所在!
drwxrwxr-x ubuntu ubuntu work
drwxrwxr-x ubuntu ubuntu react-todo-demo
drwxrwxrwx www-data www-data dist
-rwxrwxrwx www-data www-data index.html
|
步骤 2:设置父目录权限
1
2
3
| sudo chmod o+x /home/ubuntu
sudo chmod o+x /home/ubuntu/work
sudo chmod o+x /home/ubuntu/work/react-todo-demo
|
1
| namei -l /home/ubuntu/work/react-todo-demo/dist/index.html | grep ubuntu
|
应看到类似:
步骤 3:设置项目目录权限
1
| cd /home/ubuntu/work/react-todo-demo
|
- 设置目录权限(
755 = owner 可写,其他人只读+执行)
1
| sudo find dist/ -type d -exec chmod 755 {} \;
|
- 设置文件权限(
644 = owner 可写,其他人只读)
1
| sudo find dist/ -type f -exec chmod 644 {} \;
|
应显示:
1
2
| drwxr-xr-x 目录
-rw-r--r-- 文件
|
步骤 4:设置所有权(推荐方案)
1
| sudo chown -R ubuntu:www-data /home/ubuntu/work/react-todo-demo/dist
|
1
| sudo chmod -R g+w dist/
|
最终权限结构:
drwxrwxr-x 目录(owner:ubuntu, group:www-data)
-rw-rw-r-- 文件(owner:ubuntu, group:www-data)
安全增强配置
方案 A:严格模式(推荐)
1
2
3
| sudo chmod 750 /home/ubuntu
sudo chmod 750 /home/ubuntu/work
sudo chmod 750 /home/ubuntu/work/react-todo-demo
|
1
| sudo usermod -aG ubuntu www-data
|
1
2
| sudo chmod -R 750 /home/ubuntu/work/react-todo-demo/dist
sudo chown -R ubuntu:ubuntu /home/ubuntu/work/react-todo-demo/dist
|
方案 B:宽松模式(快速修复)
1
2
| sudo chmod -R 755 /home/ubuntu/work/react-todo-demo
sudo chown -R ubuntu:www-data /home/ubuntu/work/react-todo-demo
|
SELinux/AppArmor 处理
如果系统启用了强制访问控制:
1
2
| sudo setenforce 0 # SELinux
sudo systemctl stop apparmor # AppArmor
|
1
2
| sudo semanage fcontext -a -t httpd_sys_content_t "/home/ubuntu/work/react-todo-demo/dist(/.*)?"
sudo restorecon -Rv /home/ubuntu/work/react-todo-demo/dist
|
验证配置
模拟 Nginx 访问
1
2
| cat /home/ubuntu/work/react-todo-demo/dist/index.html
exit
|
检查 Nginx 错误日志
1
| sudo tail -f /var/log/nginx/error.log
|
最佳实践总结
| 对象 | 推荐权限 | 所有权 | 说明 |
|---|
| 项目父目录 | 755 | ubuntu:ubuntu | 确保 www-data 有 x 权限 |
| 构建目录(dist) | 755 | ubuntu:www-data | 组权限方便 Nginx 读取 |
| 静态文件(.html) | 644 | ubuntu:www-data | 防止意外修改 |
| 可执行文件(.sh) | 744 | ubuntu:www-data | 需要执行权限时使用 |