Ubuntu20.04 chmod误操作导致站点目录无法访问如何修复
权限错误修复
你执行的chmod 467命令存在两个问题直接导致权限拒绝:
- 开头的
4是给所有文件/目录加了无意义的SUID特殊权限,存在安全风险 - 权限位
67对应所有者权限为rw-(无执行权限),而Linux系统中进入目录必须拥有目录的执行(x)权限,因此无论普通用户还是所有者都无法正常cd进入目录。
按以下步骤重置权限即可恢复:
- 先移除错误添加的SUID特殊位:
sudo chmod -R u-s /var/www/html/site_name - 递归给站点下所有目录设置755权限(所有者可读写执行,其余用户可读可执行,满足进入目录的要求):
sudo find /var/www/html/site_name -type d -exec chmod 755 {} \; - 递归给站点下所有普通文件设置644权限(所有者可读写,其余用户可读,默认不给多余执行权限):
sudo find /var/www/html/site_name -type f -exec chmod 644 {} \; - 把站点目录的所有者和所属组统一设置为Apache在Ubuntu下的运行用户
www-data,保证服务正常读取资源:sudo chown -R www-data:www-data /var/www/html/site_name
- 如果你需要本地账号编辑站点文件,执行
sudo usermod -aG www-data 你的本地用户名,重新登录后即可获得组权限,仅需要给上传、缓存、日志这类需要写入的单独目录加组写权限即可,不要给整个站点开全局写权限。
Ubuntu 20.04 环境 Apache2 部署Flask 正确流程
不要直接照搬不明来源的权限配置,按以下步骤部署可以避免90%的权限和配置问题:
- 安装基础依赖
sudo apt update sudo apt install apache2 libapache2-mod-wsgi-py3 python3-pip python3-venv -y
- 配置项目虚拟环境
进入站点目录创建独立虚拟环境,安装项目依赖,避免全局Python包冲突:
cd /var/www/html/site_name python3 -m venv venv source venv/bin/activate pip install flask # 此处继续安装你项目需要的其他Python依赖,比如flask-sqlalchemy等 deactivate
上传你的Flask项目代码到该目录,确认入口文件(通常为app.py)中的Flask应用实例名和后续配置匹配。
- 创建WSGI对接文件
在站点根目录新建app.wsgi文件,作为Apache和Flask通信的入口,内容如下(替换成你自己的项目路径和实例名):
#!/usr/bin/python3 import sys import logging logging.basicConfig(stream=sys.stderr) sys.path.insert(0,"/var/www/html/site_name/") # 如果你入口文件是app.py,Flask实例名为app,就保持以下写法,否则对应修改 from app import app as application
- 配置Apache虚拟主机
新建站点配置文件:sudo nano /etc/apache2/sites-available/site_name.conf,写入以下配置,替换域名、路径为你自己的信息:
<VirtualHost *:80> ServerName 你的服务器公网IP/绑定的域名 ServerAdmin 你的联系邮箱 WSGIScriptAlias / /var/www/html/site_name/app.wsgi <Directory /var/www/html/site_name/> Require all granted </Directory> # 映射静态资源目录 Alias /static /var/www/html/site_name/static <Directory /var/www/html/site_name/static/> Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/site_name_error.log CustomLog ${APACHE_LOG_DIR}/site_name_access.log combined </VirtualHost>
- 启用站点并生效
# 禁用Apache默认测试站点 sudo a2dissite 000-default.conf # 启用你新建的站点配置 sudo a2ensite site_name.conf # 检查配置语法是否正确 sudo apache2ctl configtest # 语法没问题就重载Apache服务 sudo systemctl reload apache2
部署注意事项:
- 不要给整个站点目录设置777权限,也不要随意设置SUID、SGID特殊位,遵循最小权限原则
- 只有需要写入的目录(用户上传、日志、缓存)单独给www-data用户开放写权限即可,不要全局开写
- 访问出现500错误时,优先查看
/var/log/apache2/site_name_error.log下的错误日志,绝大多数问题都是路径配置错误、依赖未安装到虚拟环境、权限配置错误三类原因导致。
内容的提问来源于stack exchange,提问作者Dancun Gerald
相关产品推荐
相关产品推荐

