Context :
Odoo v9 docker镜像安装在NginX反向代理后面,面向公开的裸域(例如mydomain.com),安装了网站构建器,而不是其他配置或应用程序 .
Problem :
定期关键文件将丢失:
2015-10-30 15:28:28,266 1 INFO db-test werkzeug: 172.17.0.25 - - [30/Oct/2015 15:28:28] "GET /web/content/407-17599c5/website.assets_frontend.js HTTP/1.0" 200 -
2015-10-30 15:28:28,281 1 INFO db-test openerp.addons.base.ir.ir_attachment: _read_file reading /var/lib/odoo/filestore/db-test/e6/e69e06808b908fc0d85ebfea58fbc7df3788e72e
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/openerp/addons/base/ir/ir_attachment.py", line 151, in _file_read
r = open(full_path,'rb').read().encode('base64')
IOError: [Errno 2] No such file or directory: u'/var/lib/odoo/filestore/db-test/e6/e69e06808b908fc0d85ebfea58fbc7df3788e72e'
此文件是一个自动生成的压缩javascript文件,其中包含网站运行的所有常见js资源 . 因此,网站和应用程序变得无法使用 . 还原文件可以解决此问题 . 目前还不清楚其他文件是否会丢失 .
So Far :
-
只有当域名面向公众并且可访问时才会发生(当防火墙仅供我使用时,如果在不同的非索引(例如谷歌)域上发生这种情况,则不会发生这种情况 . )
-
到目前为止,当robots.txt设置为_2470166时不会发生这种情况 - 可能需要更长的时间才能证明这实际上是在阻止这个问题,但对于没有发生的问题,这已经有一段时间了 .
-
使用wget进行的初始手动爬网不会触发此问题 - 尽管这是作为域上当前内容的新递归获取而测试的,此问题发生
-
我没有进行重新抓取,或者请求过时的网址,所以可能无法描绘全貌
-
奇怪的是,由于域名是domain.tld而不是www.domain.tld?
-
或者这是一个机器人/爬虫的怪癖,它触发的东西不应该?
-
或者这是一个不能处理旧/过期或未知网址请求的错误?
-
或以上的组合?
-
甚至可能是恶意活动?
此时,看起来它可能是一个非常令人担忧的安全问题,外部的,匿名的(未登录)用户可以在odoo软件内触发灾难性文件删除 . 鉴于到目前为止测试的所有变量,这看起来非常像是问题的根源 . 如果是,那将是一个重大的安全漏洞 . 有没有其他人升级到v9遇到过这个问题?可能只会发生在已经 Build 并由Google等编制索引的网站上 .
任何帮助正确识别和解决这个问题将不胜感激 .
3 回答
如果还有人需要解决这个问题,那么odoo代码中就会出现一个错误,该错误已在以后的版本中修复 . 信息在这里:
https://github.com/odoo/odoo/issues/9495
由于某种原因,从
/var/lib/odoo/filestore/db-test/e6/
的位置删除(当前不存在)此记录或 data_dir /filestore/database_name 的路径我有相同的错误,所以我只是从
**ir_attachment**
表中删除该记录 . 这不是一个正确的方法,但 problem solved有两种类型的备份,其中一种包括除转储到.zip文件之外的数据库 .
当我只使用转储变体进行备份和恢复时,就会发生这种情况 .
这样就排除了文件存储,因此可能会有ir.attachment记录引用文件存储中不存在的文件 .