Foros del Web » Programando para Internet » PHP »

php, apache y permisos de usuario

Estas en el tema de php, apache y permisos de usuario en el foro de PHP en Foros del Web. Como están, les explico: hace algunos días estaba trabajando sobre una script en php y al montarla sobre varios servidores descubrí que en uno de ...
  #1 (permalink)  
Antiguo 19/09/2011, 10:03
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 12 años, 5 meses
Puntos: 1567
php, apache y permisos de usuario

Como están, les explico:
hace algunos días estaba trabajando sobre una script en php y al montarla sobre varios servidores descubrí que en uno de ellos no se ejecutaba correctamente.
La script en sí no tiene problemas, ya que cuando se ejecuta lo hace perfectamente, basicamente se me producían errores al usar fopen(), fwrite(), file_get_contents().
Indagando un poco, llegué a la conclusión de que el problema radica en como esta configurada en el server la administración de permisos, decidí entonces corregirlo
utilizando chmod(), pero para mi sorpresa el uso de chmod() tambien falló. Pude corregir algunos de los problemas, pero solo si entro a mi FTP desde mi clienteFtp y
doy permisos en forma manual, pero eso no tiene gracia alguna, ya que mi aplicación necesita hacer cambios en forma dinámica, y tampoco me parece lógico tener que darle permisos 777
a todas mis carpetas.
Lo primero que aclaro es que chmod(), así como las otras funciones que nombré no aparecen deshabilitadas en phpinfo().
También intente usar funciones de ftp de php, pero sin resultados.
Trás consultar al servicio técnico y preguntarles sencillamente porque no podía utilizar chmod(), recibí una respuesta desalentadora, "ahora no podemos debugear su código".
En realidad, se escaparon por la tangente, yo no les pedí que debugeen nada. Antes de reclamar nuevamente, hice lo siguiente, preparé otra aplicación mas sencilla
a manera de test para comprobar el comportamiento en distintos servidores, con un resultado similar, funciona en todos (de pago e incluso gratuitos), pero en el que tuve el problema, no.
Tengo bastante experiencia en Apache, pero no en Linux ni en el tema de permisos de usuario y como afectan a php, por ahi se me está escapando algo y hay otra forma de hacerlo.
Por eso me he venido al foro a ver si alguien puede aportarme algo, antes de emprenderla nuevamente contra mi servicio de hosting.

Les dejo una serie de links a la script (la segunda, la que hice para que mis "amigos" del Hosting puedan verificar mis conclusiones) para que la vean trabajar

http://vinoselfrances.com.ar/php_fs_testv1.5/ --> funciona php: 5.2.17 Apache: 2.2.17 safe_mode off (en esta hagan scroll en el frame abajo a la izquierda para ver cambios)
http://emprear.eshost.es/php_fs_testv1.5/ --> funciona php: 5.2.13 Apache:2.2.15 safe_mode off
http://emprear.com.ar/php_fs_testv1.5/ --> funciona php: 5.2.17 Apache: 2.2.17 safe_mode off
http://controldesalud.com/php_fs_testv1.5/ --> funciona php: 5.2.17 Apache: 2.2.17 safe_mode on

y aqui la del problema

http://emprear.com/php_fs_testv1.5/ --> funciona php: 5.1.6 Apache: 2.2.3 (CentOS) safe_mode off
En esta última deje habilitado el display_errors()

Espero que alguien me pueda sugerir algo (si, ya sé, cambiar de hosting... pero primero quiero agotar todas las instancias).
Quizás con el mismo php pueda hacer algo, se que hay un comando chown(), pero ni idea como usarlo es este caso y si me solucionaría algo.
Se que la seguridad del server requiere una correcta configuración de los permisos, pero no sé hasta que punto el como están configurados estos en el
server que me trae problemas es por seguridad o sencillamente porque no están bien configurados, si fuese lo primero, entonces los 4 servidores en losque funciona
están mal administrados. De que nos sirven las funciones de php en cuestión si requieren un mal administrador para hacerlas funcionales?

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #2 (permalink)  
Antiguo 19/09/2011, 10:24
 
Fecha de Ingreso: noviembre-2007
Mensajes: 23
Antigüedad: 12 años
Puntos: 4
Respuesta: php, apache y permisos de usuario

Un error muy común que tengo con los CHMOD es no utilizar correctamente la asignación de permisos. Si haces esto:

Código PHP:
Ver original
  1. chmod(FICHERO, 777);

Prueba con esto:

Código PHP:
Ver original
  1. chmod(FICHERO, 0777);

Un saludo.
  #3 (permalink)  
Antiguo 19/09/2011, 10:29
Avatar de Datacenter1
Usuario no validado
 
Fecha de Ingreso: agosto-2005
Ubicación: Chicago
Mensajes: 1.982
Antigüedad: 14 años, 4 meses
Puntos: 144
Respuesta: php, apache y permisos de usuario

Si es un hosting compartido me temo que el único que puede ayudarte es tu proveedor

Al parecer tienen bloqueadas algunas funciones, esto es normalmente por razones de seguridad

Verifica que cual es el owner de los archivos creados por tu script, si es el mismo owner de la carpeta y cuanta deberías tener permisos para editar, borrar etc sin necesidad de usar chmod

Es probable que el proveddor no este usando suphp o similares y esto hace que los archivos que estás creando tienen como owner al usuario del servidor web, por lo tanto técnicamente no te pertenecen y por esta razón no puedes editarlos
  #4 (permalink)  
Antiguo 19/09/2011, 12:13
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 12 años, 5 meses
Puntos: 1567
Respuesta: php, apache y permisos de usuario

@lgruz
El chmod() lo estoy aplicando correctamente, si te fijas, en los servidores que funciona, cambia los permisos. Y la script es exactamente la misma.

@datacenter
las funciones, no están bloqueadas en si a nivel de php, porque si tomo un archivo cualquiera y le doy permisos 0777 manualmente, funcionan.
Las carpetas y los archivos tienen todas un mismo propietario (2371), pero te doy un detalle extra, tengo en el php

Código PHP:
Ver original
  1. ini_set('display_errors', 1);
  2. ini_set('log_errors',1);
  3. ini_set('error_log','./error-fs.txt');

Si a la carpeta que contiene la script, le doy 0777, el archivo error-fs.txt se crea, con permisos 0644 y el propietario aparece como 48, y se escribe constantemente registrando todos lo errores que se ven en pantalla.

Una vez hecho esto, le quito el 0777 a la carpeta de la script y le restablezco el 0755, que es el valor con que se suben x defecto.
Entonces uso las funciones chmod(), fopen(), fwrite() etc sobre ese archivo con usuario 48 y funcionan todas !!!
Evidentemente el problema pasa por el propietario
No sé si este dato pueda servirte de algo y haya forma de resolverlo

Saludos y gracias
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 19/09/2011, 13:47
Avatar de Datacenter1
Usuario no validado
 
Fecha de Ingreso: agosto-2005
Ubicación: Chicago
Mensajes: 1.982
Antigüedad: 14 años, 4 meses
Puntos: 144
Respuesta: php, apache y permisos de usuario

Todo parece indicar que se trata que el proveedor no usa suphp o algún sistema similar, en pocas palabras los archivos creados por tu script se crean con otro usuario diferente (48 que asumo el usuario apache o el que ejecuta el servidor web)

Me imagino que si vía chown cambias el propietario al tuyo (asumo que es 2371) todo funcionaría pero dudo que el servidor permita cambiar el propietario

No veo como desde tu lado puedas resolverlo
  #6 (permalink)  
Antiguo 19/09/2011, 15:16
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 12 años, 5 meses
Puntos: 1567
Respuesta: php, apache y permisos de usuario

Cita:
Iniciado por Datacenter1 Ver Mensaje
Me imagino que si vía chown cambias el propietario al tuyo (asumo que es 2371) todo funcionaría pero dudo que el servidor permita cambiar el propietario
No veo como desde tu lado puedas resolverlo

Más por intuición que por otra cosa hice algo como esto
Código PHP:
Ver original
  1. chown($archivo_permisos, 'emprear.com');
  2. $stat = stat($archivo_permisos);
  3. echo "<pre>";
  4. print_r(posix_getpwuid($stat['uid']));
  5. echo "</pre><hr>";
  6.  
  7. chown('./ic.php', 'apache');
  8. $stat = stat('./ic.php');
  9. echo "<pre>";
  10. print_r(posix_getpwuid($stat['uid']));
  11. echo "</pre><hr>";

y, si efectivamente
2371 corresponde a mi nombre de usuario
48 a apache

y chown(), bien gracias... operación no permitida...
Como experiencia final, se me ocurrió instalar wordpress 3.0 (con php 5.1 no dá para más) porque recordé que usaba alguna función y clase avanzada para ftp y descubrí varias cosas interesantes

1.hay una carpeta wp-content/plugins, ahi se almacenan plugins de wp, y podés agregar descargandolos desde la web a traves del mismo sistema, usa un form que conecta al ftp(ingresas user y pass), el wp te baja un zip, lo descomprime en esa carpeta que tiene permisos 0755, el comprimido no lo veo en ninguna parte, irá a un tmp supongo pero los php e imagenes del plugin quedan ahi. todos con usuario 2371
Tambien los puedo borrar desde el Wp sin usar ftp, asi que el unlink() debe de funcionar.
Además wp tiene una carpeta para uploads (wp-content/uploads) dónde se puede subir multimedia, fotos, etc. Esa carpeta según te indica wp, debe de tener permisos 777. También os sube por un form con ftp/php. Pero lo curioso es que tanto esa carpeta como todo lo que está adentro, es decir lo que subí, tiene por usuario a 48

En definitiva , parece que si se podria cambiar al propietario, e problema es que el código de wp es una maraña de classes, includes, funciones, etc
Voy a investigar un poco más

Gracias por los datos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: apache, permisos, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 12:25.