Ubuntu系统下Python应用写入/var/www权限不足,设置chmod 777是否合理?
将/var/www权限设置为chmod 777绝对不是合理的解决方案,属于生产环境明令禁止的高危操作。
chmod 777会赋予系统内所有用户对/var/www目录的读、写、执行权限,一旦服务器存在其他权限漏洞,站点文件极易被恶意篡改、植入木马,会带来极其严重的安全风险。
问题根因
你的报错本质是sentence_transformers默认会将下载的预训练模型缓存到程序运行用户的家目录下的.cache文件夹:
- 你使用mod_wsgi运行Flask应用,默认运行用户是
www-data,它的家目录默认就是/var/www - 从你给出的权限配置可以看到,
/var/www的所属用户是root,www-data没有写入权限,所以创建/var/www/.cache目录时触发权限报错
正确的解决方案(优先级从高到低)
方案1:指定自定义缓存目录
在初始化SentenceTransformer之前添加环境变量配置,将缓存目录指向应用有权限读写的路径,示例代码:import os # 提前在/var/www/html/flaskapp下创建model_cache目录即可 os.environ['TRANSFORMERS_CACHE'] = '/var/www/html/flaskapp/model_cache' from sentence_transformers import SentenceTransformer model = SentenceTransformer('stsb-roberta-large')配置完成后执行命令给目录赋权:
mkdir /var/www/html/flaskapp/model_cache chown www-data:www-data /var/www/html/flaskapp/model_cache方案2:单独给缓存目录赋权
不需要修改/var/www整体权限,只需要手动创建报错提示的.cache目录,给运行用户授权即可:mkdir /var/www/.cache chown www-data:www-data /var/www/.cache方案3:提前手动下载模型
你可以提前把stsb-roberta-large模型下载到本地指定路径,初始化SentenceTransformer时直接传入本地路径,不会触发自动下载写缓存的逻辑,也能规避权限问题。
内容的提问来源于stack exchange,提问作者ApplePie
相关产品推荐
相关产品推荐

