我已经阅读了很多关于这个问题的帖子,但这些帖子都没有完全符合我的问题.我在GoDaddy虚拟主机上有一个WordPress站点(目前是3.5).在11月份,我选择将操作系统从CentOS 5升级到CentOS 6.3,其中涉及完全的O/S重新安装,而我无法控制,而且我没有任何信息.在重新安装O/S之后,我从刚启动之前的备份重建了站点.
重建之后,我们多年来一直使用的WordPress插件,WP-DBManager,突然停止备份我们的mysql数据库.备份失败,因为备份面板声称"MYSQL路径不存在".令人讨厌的是,当你进入DB Options页面并告诉它自动检测mysql路径时,options页面会生成/ usr/bin/mysql,这是正确的.我可以使用SSH登录该站点.权限是:
-rwxr-xr-x 1 root root 338184 Jun 22 05:58 /usr/bin/mysql
Run Code Online (Sandbox Code Playgroud)
这应该工作.我的网站中的SOMETHING权限随着此次重建而改变,我不知道是什么; 到目前为止,我只记录了WordPress的配置.我所做的研究表明它可能与PHP安全模式有关.我们运行PHP 5.3.3,并且phpinfo()的配置列表没有显示
--enable-safe-mode
Run Code Online (Sandbox Code Playgroud)
这意味着安全模式应为OFF.启动时php.ini中的安全模式设置为:
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
safe_mode_exec_dir =
safe_mode_include_dir =
safe_mode = off
safe_mode_gid = off
Run Code Online (Sandbox Code Playgroud)
我已经将safe_mode_gid更改为ON,没有任何效果.我有一个从生产站点构建的测试站点,其中safe_mode_include_dir =〜所以我尝试了,没有任何效果.测试站点运行PHP 5.3.14,上面的安全模式设置相同,但safe_mode_include_dir除外.我检查了ENV变量,/ usr/bin包含在PATH中:
PATH =在/ usr/local/bin目录:/ bin中:在/ usr/bin中:在/ usr/local/sbin中:/ usr/sbin目录:/ sbin目录:/家庭/ lrservice /箱
我不知道这是否是一个环境变量问题,这里是安全模式条目:
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)
这些设置在工作测试站点上并不完全相同,一个读取:
safe_mode_allowed_env_vars = PHP_ LANG LANG_
Run Code Online (Sandbox Code Playgroud)
由于该网站除此之外功能齐全,我知道mysql的权限通常是正确的.这对任何人都响铃吗?如果安全模式正式关闭,为什么我会得到所有这些?我有一种感觉,那就是我缺少的明显和愚蠢的东西.
mysql您可以从目录ssh中的会话访问二进制文件/usr/bin,但php无法在同一位置找到它。我假设您的系统正在使用apache2网络服务器。
该ChrootDir指令是否存在于 apache 配置文件中(通常位于/etc/httpd/conf/httpd.conf)?
如果是这种情况,您可以检查该指令指向的目录中是否有 mysql 二进制文件的链接。如果没有,只需在 ssh 会话中执行以下命令(假设您有这样做的权限)即可添加它:
$ ln /usr/bin/mysql /chroot/path/usr/bin/mysql
Run Code Online (Sandbox Code Playgroud)
with/chroot/path替换为ChrootDir指令路径。
其中一条评论提到了open_basedir PHP 设置,可以在php.ini、httpd.conf或.htaccess文件中配置。
此设置限制对 PHP 可用的文件系统的某些目录的访问。一个可能的解决方法是删除您正在使用的插件执行的脚本的此限制(如果该设置不受保护):
使用以下命令创建一个 .htaccess 文件,在包含脚本的目录中解除限制:
$ echo 'php_value open_basedir none' >> .htaccess
上面的代码将在 .htaccess 文件末尾的简单引号之间添加文本,并在必要时创建它。该解决方案可能是最安全的,因为它减少了仅对这些脚本的安全放松。您应该小心,您可能会让这些脚本访问超出其实际操作所需的内容。
如果上述方法不起作用,则意味着该设置受到保护,必须在httpd.conf或php.ini中进行更改,这两个文件都应位于该/etc目录中。有关详细信息,请参阅此问题。