Quijost

Por favor ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Búsqueda Avanzada  

Noticias:

Quijost.com - Hosting Gratis al alcance de tus manos

Autor Tema: Permisos de escritura del proceso python  (Leído 7802 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

slothy

  • Usuario nuevo
  • *
  • Karma: +1/-0
  • Desconectado Desconectado
  • Mensajes: 10
    • Ver Perfil
Permisos de escritura del proceso python
« en: Julio 26, 2011, 20:10:17 pm »

Hola,

Estoy tratando de poner en marcha un django-cms, de momento todo es correcto, salvo la escritura de ficheros. Por lo que he estado investigando, el subinterprete que lanza mod_wsgi, corre con los permisos del usuario apache, nobody, al tratar de realizar cualquier tipo de escritura, obtengo un error, salvo, si doy permisos de escritura a+x, si es un directorio fuera del DOCUMENT_ROOT, no puedo accederlo como URL ..., si está dentro de DROOT, es "escribible" públicamente...por otro lado veo que una posible solución puede ser la escritura en /tmp, pero no se que política hay al respecto, no de escritura, ni de borrado de mantenimiento, y quedan expuestos los ficheros al acceso por parte de los procesos "nobody" del resto de users de la máquina.  La mayor parte de la problemática/solución viene de la configuración de apache de mod_wsgi,http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6 ¿es posible algo en el sentido de modificar la configuración del mod_wsgi? ¿Se me está escapando alguna otra opción?

Como añadido, en el foro se apunta a un howto sobre capturar las excepciones con middleware, en concreto con Paste, pero no está instalado en el sistema, ¿se podría instalar?

Gracias
« última modificación: Julio 26, 2011, 20:16:15 pm por slothy »
En línea

slothy

  • Usuario nuevo
  • *
  • Karma: +1/-0
  • Desconectado Desconectado
  • Mensajes: 10
    • Ver Perfil
Re:Permisos de escritura del proceso python
« Respuesta #1 en: Julio 26, 2011, 22:50:39 pm »

Este es un script pruebaescritura.wsgi de prueba, cambiad USUARIO Y DIRECTORIO_WEB por el que corresponda:

Código: [Seleccionar]
import os
import sys
import datetime
import string
import random

ruta = os.path.abspath("/home/USUARIO/tmp")
sys.path.append('/home/USUARIO/public_html/DIRECTORIO_WEB')
sys.path.append(ruta)
sys.stdout = sys.stderr


def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!\n'

    print >> environ['wsgi.errors'], "application debug #1"


    archivo = datetime.datetime.isoformat(datetime.datetime.now(),"-") + ".txt"
    try:
        output += str(path) + "\n"
    except Exception as e:
        output += "%s \n" % e
    try:
        fi = open(os.path.join(path,archivo),"w")
        chars = "".join( [random.choice(string.letters[:26]) for i in xrange(15)] )
        fi.write(chars + "\n")
        fi.close()
        output += "OK! \n"
    except Exception as e:
        output += "%s \n" % e
   
    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    print >> environ['wsgi.errors'], "application debug #2"

    return [output]

Y aquí el correspondiente .htaccess

Código: [Seleccionar]
Options +Indexes

SetHandler wsgi-script

RewriteEngine On

RewriteCond %{REQUEST_URI} !(pruebaescritura.wsgi)
RewriteRule ^(.*)$ pruebaescritura.wsgi/$1 [L]


Si se añade el siguiente código nos dará el usuario con el que se ejecuta el script:

Código: [Seleccionar]
import pwd

output += str(pwd.getpwuid(os.getuid())[0]) + "\n"
« última modificación: Julio 26, 2011, 23:28:27 pm por slothy »
En línea

shakaran

  • Soporte
  • Administrator
  • Usuario profesional
  • *****
  • Karma: +12/-0
  • Desconectado Desconectado
  • Sexo: Masculino
  • Mensajes: 487
  • Un buen soporte lo es todo
    • Ver Perfil
    • Shakaran
Re:Permisos de escritura del proceso python
« Respuesta #2 en: Julio 27, 2011, 21:52:40 pm »

En un compartido, para ejecutar WGSI debemos hacerlo con nobody. De otra forma, seria asignar un proceso WGSI por cada usuario del servidor compartido y
mantenerlo en memoria, lo que es elevado y costoso. Si tienes mayores necesidades, tal vez te conviene un VPS (http://quijost.com/vps/)

Por otro lado, acabamos de instalar Paste 1.7.5.1 en el server1 por defecto.
En línea
Ángel Guzmán Maeso
Quijost Founder - Backend Engineer & Main support
 

Página generada en 0.1 segundos con 35 consultas.