安装moodle时出错。 Dataroot 位置不安全,父目录 (/var) 不可写。

问题描述 投票:0回答:6

我正在尝试安装moodle,但当我指定moodle数据文件夹的路径时,我遇到了一个错误。基本上他们希望它位于无法从网络访问的地方。

我尝试将其放入

/var/moodledata
这给了我一个错误,说

Parent directory (/var) is not writeable. Data directory (/var/moodledata) cannot be created by the installer.
/var/www/moodledata
这给了我一个错误,说
Dataroot location is not secure

我尝试向

/var/www/
文件夹授予 sudo(权限),还尝试通过注释掉以下行来跳过验证
install.php

/*while(is_dataroot_insecure()) {
    $parrent = dirname($CFG->dataroot);
    $i++;
    if ($parrent == '/' or $parrent == '.' or preg_match('/^[a-z]:\\\?$/i', $parrent) or ($i > 100)) {
        $CFG->dataroot = ''; //can not find secure location for dataroot
        break;
    }
    $CFG->dataroot = dirname($parrent).'/moodledata';
}*/

       /* do {
        if ($CFG->dataroot !== '') {
            $prompt = get_string('clitypevaluedefault', 'admin', $CFG->dataroot);
        } else {
            $prompt = get_string('clitypevalue', 'admin');
        }
        echo $error;
        $CFG->dataroot = cli_input($prompt, $CFG->dataroot);
        if ($CFG->dataroot === '') {
            $error = get_string('cliincorrectvalueretry', 'admin')."\n";
        } else if (is_dataroot_insecure()) {
            $CFG->dataroot = '';
            $error = get_string('pathsunsecuredataroot', 'install')."\n";
        } else {
            if (install_init_dataroot($CFG->dataroot, $CFG->directorypermissions)) {
                $error = '';
            } else {
                $a = (object)array('dataroot' => $CFG->dataroot);
                $error = get_string('pathserrcreatedataroot', 'install', $a)."\n";
        cli_error(get_string('pathsunsecuredataroot', 'install'));
            }
        }

    } while ($error !== '');*/
} /*else {
    if (is_dataroot_insecure()) {
    }
    if (!install_init_dataroot($CFG->dataroot, $CFG->directorypermissions)) {
        $a = (object)array('dataroot' => $CFG->dataroot);
        cli_error(get_string('pathserrcreatedataroot', 'install', $a));
    }
}*/

但是,我还没有取得任何成功。任何关于我如何克服这个问题的想法将不胜感激!

php moodle
6个回答
6
投票

您可以自己创建目录。

我假设您使用的是 Ubuntu 或 Debian。从逐步指南在 Ubuntu 中安装 Moodle:

sudo mkdir /var/moodledata
sudo chown -R www-data:www-data /var/moodledata

其中

www-data
是您的网络服务器使用的用户。


2
投票

正如你提到的

/var

此位置不可写,因此 Web 服务器在此没有写入权限,因此未在那里创建 Moodledata。确保网络服务器在这里有写权限。

如果您在

中创建moodledata

/var/www

此位置不安全,因为可以轻松从网络访问它。数据可能被盗。


2
投票

注意Moodle 2.6 安装指南中的这一行

重要提示:不得通过网络直接访问该目录。 这将是一个严重的安全漏洞。请勿尝试将其放入内部 您的 Web 根目录或 Moodle 程序文件目录中。穆德尔 不会安装。它可以去任何其他方便的地方。

在服务器上无法通过网络公开访问的目录中创建“moodledata”目录,即不在您的 httpdocs 或公共目录中。


1
投票

我试过这个,它对我有用,试试这个..,

在moodle根目录中转到install.php,如果您在第341行中使用2.6或其他版本,则搜索

is_dataroot_insecure()
函数并将其更改为else if条件中的
false
并尝试再次安装,就是这样。 ,(注意这不是最好的方法,但是如果您愿意尝试的话,可以通过编码黑客来消除此错误..)


0
投票

尝试从 Debian 用户终端运行以下命令

sudo mkdir /var/moodledata

chmod ugoa=rwx /var/moodledata


0
投票

如果您了解风险,请将这些跨接电缆插入该判断警告。

在adminlib.php中,在函数

is_dataroot_insecure(...)
打开后立即添加:
{

© www.soinside.com 2019 - 2024. All rights reserved.