“FAQ:MediaWiki”的版本间差异
第4行: | 第4行: | ||
<div align="center"><span style="font-weight:bold; font-size:150%;"> [https://www.mediawiki.org/wiki/Manual:FAQ/zh 手册:常见问题] </span></div> | <div align="center"><span style="font-weight:bold; font-size:150%;"> [https://www.mediawiki.org/wiki/Manual:FAQ/zh 手册:常见问题] </span></div> | ||
== '''open_basedir''' | == '''open_basedir 问题''' == | ||
<span style="color: red; font-size: 110%">'''Warning: is_executable(): open_basedir restriction in effect.''' File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/Command.php on line 311</span> | <span style="color: red; font-size: 110%">'''Warning: is_executable(): open_basedir restriction in effect.''' File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/Command.php on line 311</span> | ||
第44行: | 第44行: | ||
#** 所以如果要将访问限制在仅为指定的目录,应用斜线结束路径名(如:“/dir/user/”)。 | #** 所以如果要将访问限制在仅为指定的目录,应用斜线结束路径名(如:“/dir/user/”)。 | ||
#* 添加 Linux 根目录“<span style="color: blue">'''/'''</span>”,则一定不会再报错,但是“防止跨站攻击”也就没啥意义了。 | #* 添加 Linux 根目录“<span style="color: blue">'''/'''</span>”,则一定不会再报错,但是“防止跨站攻击”也就没啥意义了。 | ||
#**【通过错误信息定位需要的目录实在麻烦!】 | #**<s>【通过错误信息定位需要的目录实在麻烦!】</s> | ||
=== '''如何明确需要的目录树?''' === | |||
之前一直想要通过“界面上的错误信息”来找到需要配置到“<span style="color: green">'''open_basedir'''</span>”的“目录树”。 | |||
但是,突然想到:“<span style="color: blue">'''服务器的错误日志'''</span>”提供的信息是否更详细、明确? | |||
<big>'''步骤:'''</big> | |||
# 从服务器上获取站点错误日志:“<span style="color: blue">'''wiki.eijux.com.error.log'''</span>”; | |||
#* 位于:“/www/wwwlogs/”。 | |||
# 在服务器中利用“open_basedir”筛选错误信息: | |||
#: <syntaxhighlight lang="bash" highlight=""> | |||
2022/08/23 15:20:27 [error] 1098830#0: *11213 FastCGI sent in stderr: "PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119" while reading response header from upstream, client: 118.112.56.144, server: wiki.eijux.com, request: "GET /%E7%AB%99%E7%82%B9%E6%97%A5%E5%BF%97 HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-cgi-74.sock:", host: "wiki.eijux.com", referrer: "http://wiki.eijux.com/%E9%A6%96%E9%A1%B5" | |||
</syntaxhighlight> | |||
#: 可以看出,此处错误信息与“界面上的错误信息”完全不同:'''File(/bin/bash) 不在被允许的路径中。''' | |||
#: <syntaxhighlight lang="bash" highlight=""> | |||
PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119PHP | |||
</syntaxhighlight> | |||
# '''确认“待添加目录”的“实际路径”''':因为目录可能是 '''Symlink'''(符号链接); | |||
#: 如:上述“'''/bin/bash'''”就是指向“'''/usr/bin/bash'''”的符号链接。 | |||
# 开启站点的“防止跨站攻击”,并配置“<big>'''.user.ini'''</big>”文件: | |||
#: <syntaxhighlight lang="PHP" line highlight=""> | |||
open_basedir=/www/wwwroot/eijux.com/:/tmp/:/usr/bin/bash | |||
</syntaxhighlight> | |||
# 访问站点的文章页面,以确定不再有“open_basedir 问题”。 | |||
<span style="color: blue; font-size: 120%">【2022/08/23 17:47:44 解决】</span> | |||
“<span style="color: blue; font-size: 150%">'''.user.ini'''</span>”: | |||
1、开启“防止跨站攻击”后自动生成,关闭“防止跨站攻击”自动删除; | |||
2、不能被上传覆盖,只能在服务器修改; | |||
<big>可以通过<span style="color: green">'''宝塔面板'''</span>来修改</big>: | |||
[[File:宝塔面板:修改“.user.ini”.png|800px]] | |||
== 无法生成avg缩略图 == | == 无法生成avg缩略图 == |
2022年8月23日 (二) 17:55的版本
关于
open_basedir 问题
Warning: is_executable(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/Command.php on line 311![]()
open_basedir(防止跨站攻击) :用于将 PHP 所能打开的文件限制在指定的目录树,以此防止跨目录、跨站的访问。
1、本指令不受安全模式打开或者关闭的影响。
2、当一个脚本试图打开一个文件时,该文件的位置将被检查。
3、当文件在指定的目录树之外时 PHP 将拒绝打开它。
解决方案:
- 关闭“防止跨站攻击”:
- 配置“open_basedir”:通过编辑“.user.ini”文件,添加必要的目录树:
open_basedir=/www/wwwroot/wiki.eijux.com/:/tmp/
- .user.ini 文件:开启“防止跨站攻击”之后自动创建,位于项目根目录,用于配置“open_basedir”。
- open_basedir指定的限制是路径前缀,而非目录名(如:设置“/dir/user”,则“/dir/user”和“/dir/user1”都是可以访问的)。
- 所以如果要将访问限制在仅为指定的目录,应用斜线结束路径名(如:“/dir/user/”)。
- 添加 Linux 根目录“/”,则一定不会再报错,但是“防止跨站攻击”也就没啥意义了。
【通过错误信息定位需要的目录实在麻烦!】
如何明确需要的目录树?
之前一直想要通过“界面上的错误信息”来找到需要配置到“open_basedir”的“目录树”。 但是,突然想到:“服务器的错误日志”提供的信息是否更详细、明确?
步骤:
- 从服务器上获取站点错误日志:“wiki.eijux.com.error.log”;
- 位于:“/www/wwwlogs/”。
- 在服务器中利用“open_basedir”筛选错误信息:
2022/08/23 15:20:27 [error] 1098830#0: *11213 FastCGI sent in stderr: "PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119" while reading response header from upstream, client: 118.112.56.144, server: wiki.eijux.com, request: "GET /%E7%AB%99%E7%82%B9%E6%97%A5%E5%BF%97 HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-cgi-74.sock:", host: "wiki.eijux.com", referrer: "http://wiki.eijux.com/%E9%A6%96%E9%A1%B5"
- 可以看出,此处错误信息与“界面上的错误信息”完全不同:File(/bin/bash) 不在被允许的路径中。
PHP message: PHP Warning: file_exists(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/CommandFactory.php on line 119PHP
- 确认“待添加目录”的“实际路径”:因为目录可能是 Symlink(符号链接);
- 如:上述“/bin/bash”就是指向“/usr/bin/bash”的符号链接。
- 开启站点的“防止跨站攻击”,并配置“.user.ini”文件:
open_basedir=/www/wwwroot/eijux.com/:/tmp/:/usr/bin/bash
- 访问站点的文章页面,以确定不再有“open_basedir 问题”。
【2022/08/23 17:47:44 解决】
“.user.ini”: 1、开启“防止跨站攻击”后自动生成,关闭“防止跨站攻击”自动删除; 2、不能被上传覆盖,只能在服务器修改; 可以通过宝塔面板来修改:![]()
无法生成avg缩略图
如果要使用第三方的converter,参见Image thumbnailing页面
- 描述:
上传.svg
文件过后,页面中提示“生成缩略图出错:无法创建临时缩略图文件”,在“特殊页面:文件列表”中查看文件时:
Warning: symlink() has been disabled for security reasons in /www/wwwroot/wiki.eijux.com/includes/media/SvgHandler.php on line 280
。
- 处理:
默认安装的PHP一些函数是没有默认开启的。
我们需要的函数是symlink()
,则用在PHP的禁用函数中删除该函数即可。
- 描述:
生成缩略图处提示:sh: convert: command not found
,PHP错误信息为Warning: is_executable(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/Command.php on line 311
。
- 处理:
先考虑是PHP配置的问题,
PHP错误'''require(): open_basedir restriction in effect”''',即访问脚本不在'''<code>open_basedir</code>'''的限定目录里面,'''<code>open_basedir</code>'''的作用是将php所能打开的文件限制在指定的目录或文件。<br/>
修改PHP配置文件PHP.ini
的open_basedir
之后错误依旧,而后一直都盯着open_basedir
打转。兜兜转转许久才注意到sh: convert: command not found
的提示,想到可能没有配置Svg Converter,从而进一步发现MediaWiki没有默认安装Converter。最后在| 官网手册SVG节了解到支持信息,相关的Converter("ImageMagick", "ImagickExt", "sodipodi", "inkscape", "batik", "rsvg", and "imgserv")均需单独安装。相较之下,选用了| NativeSvgHandler扩展(将SVG文件直接发送至客户端以进行客户端渲染)。步骤如下:
- 下载文件,并将其放置在extensions/文件夹中的NativeSvgHandler目录内。(注意修改所有者及读写权限)
- 将下列代码放置在您的LocalSettings.php的底部:'
wfLoadExtension( 'NativeSvgHandler' );
' - 导航至Special:Version,以验证扩展已成功安装。
再于网页刷新,svg缩略图显示正常。
- 如果要使用第三方的converter,参见[https://www.mediawiki.org/wiki/Manual:Installing_third-party_tools#Image_thumbnailing Image thumbnailing页面]