Cómo deshabilitar la restricción de PHP open_basedir para un dominio específico en Plesk

Cómo deshabilitar la restricción de PHP open_basedir para un dominio específico en Plesk

En PHP, la directiva open_basedir de la configuración php.ini especifica un límite de directorios y archivos a los que PHP puede acceder al árbol de directorios especificado, incluido él mismo. En segundo plano, esta funcionalidad funciona así, por ejemplo, cuando intentas leer un archivo usando include, fopen, file_get_contents, se verifica la ubicación del archivo, por lo que si la ubicación del archivo está fuera del árbol de directorios especificado en open_base_dir , PHP se negará a acceder a él, haciendo que tu código falle (los enlaces simbólicos se resuelven, por lo que no puedes eludir esta restricción haciendo esto). 

En el entorno Plesk, para algunos administradores, esto podría significar que el Proyecto A ubicado en el Directorio A no podría acceder a los archivos del Proyecto B ubicados en el Directorio B. En algunos casos, es necesario para la interoperabilidad.

Entendiendo cuál es la limitación

Suponga que el siguiente archivo PHP está alojado en projecta.mydomain.com en un servidor Plesk. Lo que esto básicamente hace es leer un archivo del Proyecto B dentro de un archivo PHP ubicado en el Proyecto A:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <h2>Sandbox</h2>
        <pre>
        <?php
            // Este archivo se encuentra en:
            // /var/www/vhosts/projecta/index.php
            // 
            // Mostrar errores para saber qué está pasando
            ini_set('display_errors', 1);
            ini_set('display_startup_errors', 1);
            error_reporting(E_ALL);
            
            // Obtener el archivo del proyecto
            echo file_get_contents("/var/www/vhosts/projectb/filefromb.txt");
        ?>
        </pre>
    </body>
</html>

Si ejecutas el código desde la primera aplicación, aparecerán los siguientes errores si tienes configurado el open_basedir predeterminado:

Warning:  file_get_contents(): open_basedir restriction in effect.
File(/var/www/vhosts/projectb/filefromb.txt) is not within the allowed path(s): 
(/var/www/vhosts/projecta/:/tmp/) in /var/www/vhosts/projecta/index.php on line 16

Warning:  
file_get_contents(/var/www/vhosts/projectb/filefromb.txt): failed to open stream: 
Operation not permitted in /var/www/vhosts/projecta/index.php on line 16

La solución sería agregar el directorio del proyecto b al open_basedir de projecta.

Intente especificar los directorios requeridos en la directiva

Como recomendación, no debes eliminar esta protección básicamente porque si eres el administrador de un servidor Plesk, donde algunos de los propietarios de los proyectos que alojas, tienen acceso al código, simplemente tendrían acceso a áreas y archivos de tu servidor que simplemente no deberían. Entonces, si conoces el directorio al que necesita acceder, otorga el acceso agregando el parámetro a la open_basedir directiva. Navegue a su dominio y abra la configuración de PHP:

Plesk Add Open Base Dir

Para separar directorios, usa dos puntos (:) en Linux y un punto y coma (;) en Windows. Por ejemplo, si deseas que el proyecto pueda acceder al directorio /var/www/vhosts/projectb, agrega en Windows ;/var/www/vhosts/projectb o Linux :/var/www/vhosts/projectb. Siempre intenta agregar los directorios que necesitas y no tendrá ningún problema, sin embargo, puedes lidiar con los permisos del archivo (chmod), pero eso es otra historia.

Deshabilitar la restricción open_basedir

Hacemos énfasis en este enfoque una vez más, a menos que realmente sepas que no debe haber limitación de acceso al código PHP alojado en el servidor, no elimines la restricción.

Si deseas continuar porque sabes lo que está haciendo, la solución no es la que esperas con la configuración habitual de PHP. En PHP es posible eliminar la limitación open_basedir estableciendo su valor en "none" en php.ini, por lo que puedes hacer lo mismo en Plesk. Para eliminar la restricción  open_basedir, establece su valor en Plesk yendo a la Configuración PHP de tu dominio:

open_basedir PHP None Plesk

Nota importante

Ahora, para comprender lo que está sucediendo ahora después de deshabilitar la restricción open_basedir es que ya no tendrás la advertencia de restricción open_basedir en efecto, sin embargo, si intentas acceder a un archivo que está dentro de un directorio cuyos permisos no le permiten para acceder al archivo (por ejemplo, 710) aunque el archivo tenga 777, no podrás acceder a él.

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable