Dokuwiki将conf移出网站目录

昨天晚上折腾dokuwiki,进行安全设置时关注了下敏感目录移出网站根目录的设置,感觉比较实用,配合防跨站可以更加安全的保护敏感配置文件和数据文件。可是却因为一个小插曲折腾了近5个小时。

 

事情是这样的,按照dokuwiki官方说明,移出敏感目录后dokuwiki却不能访问了:

dokuwiki将conf移出网站目录

 

反复测试:怀疑是rc版不稳定造成的,于是换装stable版本,结果还是一样。继续怀疑环境的问题,在本地apache环境下测试,没问题,于是nginx被我怀疑了。可是一次乌龙的测试却在nginx上也正常了,于是曙光初现,继续折腾,终于弄明白原来是因为设置了防跨站!仰天长啸,壮怀激烈,擦,该死的防跨站,折腾的我要疯了。

骂归骂,可是要理智,防跨站是不能取消的,要不费那么大力气移出这些文件也没啥意义了,来个webshell,没防跨站你放哪里都一样。总结也是需要的。看来以后不能乱怀疑乱折腾了,太费时间了,看错误提示是最好的,仔细看dokuwiki的出错提示:

DokuWiki Setup Error

The datadir ('pages') at /pages is not found, isn't accessible or writable. You should check your config and permission settings. Or maybe you want to run the installer?

已经说的很明白,不能访问数据文件,归根到底还是权限的问题,还是应该在权限上找原因。像我那样瞎折腾是不会有结果的。

找到原因后,既不能取消防跨站,还想把敏感文件移出去,去php.ini,指定open_basedir可以访问多个目录即可,比如你将dokuwiki安装在 /var/www/wiki.org/public_html目录下,conf和data放在/var/www/wiki.org/目录下,可以这么配置:

 

[HOST=wiki.org]
open_basedir=/var/www/wiki.org/public_html/:/tmp/
[PATH=/var/www/wiki.org/public_html]
open_basedir=/var/www/wiki.org/public_html/:/var/www/wiki.org/conf/:/var/www/wiki.org/data/:/tmp/

 

这样,基本可以达到目的,但是最后还是有一点遗憾,inc/preload.php对webshell是可见的,所以webshell是可以知道conf目录的。

最后总结一下:

1.严格按照官方文档,conf目录要用绝对路径(data目录貌似相对绝对都可以),否则css会无法加载:

dokuwiki将conf移出网站目录

2. 保证conf ,data目录是可以访问的,仔细检查目录归属和权限设置,设置了防跨站的要检查站点的目录访问权限。

One thought on “Dokuwiki将conf移出网站目录

  1. 报错的原因可能只是preload.php中写conf目录路径的时候末尾少了个/
    define('DOKU_CONF','D:/httpd/htdocs_doku/sites/conf/');

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注