¿Cómo obtener acceso rw al directorio montado desde php?

1

ACTUALIZACIÓN2

Si lo hago lsdentro del directorio montado, el script php funciona al menos una vez. Extraño, no lo es.


Quiero acceder a un directorio desde mi script php que está montado desde

  • servidor datadev (Linux datadev 2.6.22.18-0.2-default # 1 SMP 2008-06-09 13:53:20 +0200 x86_64 x86_64 x86_64 GNU / Linux)

  • en wwwdev (Linux wwwdev 2.6.22.19-0.1-default # 1 SMP 2008-10-14 22:17:43 +0200 x86_64 x86_64 x86_64 GNU / Linux)

a través de nfs

  • / etc / imports es como (probé algunas cosas que no me funcionaron)

    • / var / lib / firebird / data 10.0.0.20 (rw, no_root_squash)
    • / var / lib / firebird / data 10.0.0.20 (rw, setuid, no_root_squash)

    • / var / lib / firebird / data -mapall = wwwrun: rueda 10.0.0.20 (rw)

    • / var / lib / firebird / data 10.0.0.20 (rw, all_squash, anonuid = 30, anongid = 100)

  • / etc / fstab es como

    • 10.0.0.21:/var/lib/firebird/data / var / lib / firebird / data nfs por defecto 0 0

Puedo acceder al directorio desde el shell pero php me da un error Permission denied (errno 13)si hago chdir ('/ var / lib / firebird / data');

[root][wwwdev /var/lib/firebird/data] ls -la
total 44G
-rw-rw---- 1 firebird firebird   64M Jun 10 15:43 ?
-rw-rw---- 1 firebird firebird  307M Jun 15 10:27 ?OQben.gdb
drwxr-xr-x 2 firebird firebird   16K Jul 21 16:55 ./
drwxr-xr-x 3 firebird wheel     4.0K Jul 21 11:36 ../

-

[root][datadev /var/lib/firebird/data] ls -la
total 44G  
-rw-rw---- 1 firebird firebird   64M Jun 10 15:43 ?
-rw-rw---- 1 firebird firebird  307M Jun 15 10:27 ?OQben.gdb
drwxr-xr-x 2 firebird firebird   16K Jul 21 16:55 ./
drwxr-x--- 4 firebird firebird  4.0K May  7 12:19 ../

mi script php puede editar el archivo config.ini

root][wwwdev /var/lib/edumate/imacs/radek/3.0] ls -la
total 128K
drwxr-xr-x 19 wwwrun wheel 4.0K Jul 21 16:27 ./
drwxr-xr-x  6 wwwrun wheel 4.0K Jul 19 14:28 ../
-rw-r--r--  1 wwwrun wheel 1.8K Jul 21 15:08 config.ini

ACTUALIZAR

Quiero algo que ya me esté funcionando. He montado el directorio de mi mac en el mismo servidor wwwdev. wwwdev es un cliente nfs en ambos casos. / etc / exports en mac tiene esta línea en/Users/radek/Sites -mapall=root:wheel -network 10.0.0.0 -mask 255.255.255.0

Radek
fuente

Respuestas:

1

Como otros han sugerido, debe modificar los permisos de los directorios exportados para permitir al usuario web (wwwrun)la mínima cantidad de acceso a ellos. A qué los cambia exactamente depende de su sistema y necesidades de seguridad.

Si, por alguna razón, no puede modificar los permisos del directorio, puede agregar el usuario web (wwwrun)al (firebird)grupo en la máquina local. No estoy seguro desde el principio de cómo NFS lo manejará si los GID difieren en los dos cuadros, pero podemos clasificarlo si ese es el caso.

Probablemente esa no sea la forma más segura de hacerlo, pero no estoy seguro de sus limitaciones para esto.

Solo por curiosidad ... ¿cuál es la razón por la que el servidor web necesitará acceso directo a esta ubicación? Si esta es la ubicación de sus archivos de base de datos, puede abrir una nueva vía de corrupción de datos si no es extremadamente cuidadoso. ¿No sería mejor usar un conector Firebird / InterBase?

pferate
fuente
La razón por la que quiero que se monte el directorio de la base de datos es que estoy escribiendo un script php para cambiar / cambiar la configuración de diferentes compilaciones para poder hacer mis pruebas de manera fácil y rápida. Puedo agregar características adicionales y muy útiles a este script php si el script puede acceder al directorio. La seguridad 'no' es un problema aquí, ya que todo está sucediendo 'localmente', nada pasa por Internet. No puedo entender cómo cambiar los permisos podría ayudar a que la configuración actual FUNCIONE, pero solo a veces :-) Quiero decir :-( Si hago 'ls / montadodir' y luego ejecuto php, todo funciona bien. Por lo general, solo una vez ...
Radek
¿Qué quieres decir con 'máquina local'? Estoy hablando aquí de dos servidores. ¿Quiso decir el cliente nfs?
Radek
Sí, por máquina local, me refiero al cliente NFS. ¿Qué acciones está haciendo que "funcionan" y cuáles son los permisos de los archivos asociados? ¿Estás hablando del chdir u otra cosa? En cuanto a los permisos de los archivos que enumeró, tiene RW para el firebirdusuario y los miembros del firebirdgrupo, nadie más. A menos que wwwrunsea ​​miembro de ese grupo o se actualicen los permisos, ese usuario no debe tener acceso a esos archivos. las ls /var/lib/firebird/dataobras porque "Otros" ha leído y permisos de ejecución a ese directorio, por lo que puede mostrar el contenido.
pferate
El truco 'ls / var / lib / firebird / data' funciona pero solo por un tiempo y tengo que hacerlo manualmente. Por supuesto, quiero enumerar el directorio desde mi script php y en cualquier momento.
Radek
si escribo algo del script php, el propietario es root y grop es www. Aunque no puedo escribir /var/lib/firebird/data. Puedo en un directorio montado que viene de mi mac.
Radek
1

Para cambiar los permisos de la unidad montada, asegúrese de que el usuario de Apache tenga permiso de acceso en el archivo fstab.

La cuenta de usuario de Apache se especifica en el archivo de configuración de Apache (httpd.conf), y puede ser algo así como "www-data" (dependiendo de la configuración).

Vea este artículo: Cómo editar y comprender / etc / fstab

EDITAR1

Si no hay ningún problema con fstab, la siguiente parada es con SELinux.
De la documentación de la Política nfs Selinux :

La política de SELinux es personalizable en función del mínimo acceso requerido. Entonces, por defecto, la política de SElinux no permite que nfs comparta archivos.

Si desea compartir archivos de lectura / escritura, debe establecer el booleano nfs_export_all_rw.

setsebool -P nfs_export_all_rw 1

Para estar absolutamente seguro de que SELinux no interfiere, consulte Cómo deshabilitar SELinux .

EDIT2

El siguiente y último paso que puedo encontrar es verificar si ha exportado correctamente los recursos compartidos desde el servidor NFS. Aquí hay algunas referencias que pueden señalar el camino:

Error de "Permiso denegado" de montaje
NFS Compartir recursos NFS

harrymc
fuente
@harrymc: No encontré nada relacionado con fstab en php.ini :-(
Radek
@Radek: es un archivo de Linux que controla los montajes. Es durante el montaje que la cuenta php debe tener derecho a acceder a ella. php.ini no se refiere a él (y no necesita hacerlo). Por favor lea el artículo para más detalles.
harrymc
el artículo no agrega más luz a mi pregunta :-( Ver la ACTUALIZACIÓN2. A veces funciona
Radek
@Radek: He agregado el siguiente paso lógico en mi respuesta.
harrymc
@harrymc: me parece que no tenemos SELinux en nuestro servidor. No puedo ejecutar 'setsebool' ni encontrar ninguna configuración de selinux ...
Radek
0

Normalmente, Apache se está ejecutando es un usuario diferente (fe www). Estás accediendo a los directorios a través de root... y, por supuesto, puedes hacerlo.

Cambie los permisos en la carpeta montada para reflejar que el usuario Apache puede ingresarlos.

Poli
fuente
pero, ¿cómo puedo cambiar los permisos en la carpeta montada sin cambiarlo en la carpeta primaria / triturar? Me está funcionando desde Mac, pero datadev no puede reconocer la opción -mapall en / etc / exports
Radek
0

nuestro administrador de sistemas me solucionó el problema. El dice que el

  • creó un nuevo grupo xyz tanto en el servidor nfs como en el cliente y luego agregó firebird y wwwrun a este grupo
  • desmonte el directorio y configure el usuario, el grupo y el permiso exactamente igual en ambos (servidor y cliente)
  • lo montó nuevamente y funciona desde ...
Radek
fuente