You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20.04 chmod误操作导致站点目录无法访问如何修复

权限错误修复

你执行的chmod 467命令存在两个问题直接导致权限拒绝:

  1. 开头的4是给所有文件/目录加了无意义的SUID特殊权限,存在安全风险
  2. 权限位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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:45:47