Mostrando entradas con la etiqueta apache2. Mostrar todas las entradas
Mostrando entradas con la etiqueta apache2. Mostrar todas las entradas

viernes, 9 de septiembre de 2011

Acceso rápido a los archivos del servidor web

Sin disminuir la extraordinaria velocidad con la que se pueden editar los archivos de un sitio web desde la cónsola, en muchas ocasiones me consigo con situaciones en las que la única manera que las personas actualicen los archivos, es a través de una aplicación de escritorio.

Hay un sin fin de formas de lograr que un usuario administre los archivos de un sitio web. Quizás esta "diversidad" nos lleva a tener toda una tarde investigando para que al final no apliquemos ninguna de las soluciones leídas.

En esta publicación, voy a mostrar cómo permitir a un usuario pueda administrar (agregar, modificar, eliminar) los archivos de un sitio web.

Acá vamos.

  1. El Escenario

    Tengo configurado un servidor con Debian Squeeze y ofreciendo páginas web con el servidor Apache2 en el directorio "/var/www/"

    En el sistema, hay un usuario llamado "programador" cuyo directorio de trabajo es "/home/programador" y quiero pueda acceder a los archivos ubicados en una aplicación llamada "MOODLE" ubicada en "/var/www/moodle".
  2. El Plan

    Como este servidor está bajo mi completa administración, el plan es darle permisos al usuario "programador" para que pueda administrar los archivos en "/var/www/moodle"

    Así mismo, quiero que cuando el usuario "programador" realice una conexión "SSH" hacia el servidor, aparezca un "directorio" que apunte directamente hacia los archivos en "/var/www/moodle".
  3. La ejecución

    Agregamos el usuario "programador" al grupo "www-data":

    # adduser programador www-data

    Asignamos los permisos adecuados al directorio donde está MOODLE:

    # cd /var/www
    # chmod -R g+rw ./moodle

    Creamos en el directorio del usuario "programador" un enlace simbólico hacia los archivos de MOODLE:

    # cd /home/programador
    # ln -s /var/www/moodle web-moodle
  4. Conclusión

    Con esto, el usuario "programador" cuando haga una sesión "SSH", tendrá un directorio llamado "web-moodle" en el que cuando entre, tendrá todos los archivos de MOODLE y podrá cambiarlos.
  5. Información adicional

    Hay varias maneras mucho más sofisticadas de realizar esto. Sin embargo, por un tema de tiempo y dado que tengo el control sobre el servidor, me puedo dar el lujo de hacerlo así :-)

    Si quisiera que el usuario "programador" sólo pudiera ver archivos ubicados exclusivamente en su "home", entonces hay que leer un poco más del paquete "rssh".
Espero sea de utilidad.

Éxitos!

José Gregorio.

Fuente:
  1. http://askubuntu.com/questions/19898/whats-the-simplest-way-to-add-files-to-var-www
  2. http://www.cyberciti.biz/tips/rhel-centos-linux-install-configure-rssh-shell.html
  3. http://ubuntuforums.org/showthread.php?t=915985
  4. http://www.pc-freak.net/blog/quick-way-to-add-user-to-another-user-group-in-linux/

viernes, 9 de julio de 2010

Debian Lenny: Código PHP + APACHE2 + DAV


El uso de DAV para gestionar los archivos de sitios web en servidores como Apache2 y Ligthy es una combinación muy útil y más segura que FTP.

El problema que se me ha presentado consiste en que tratando de descargar los archivos PHP de uno de los sistemas publicados, los archivos se descargaban con el resultado de la ejecución de los archivos PHP, es decir, código HTML.

En realidad, lo que debía ocurrir era que se descargaran los archivos crudos con el código PHP.

Luego de investigar un poco, conseguí esta información en el portal de APACHE

"
One common request is to use mod_dav to manipulate dynamic files (PHP scripts, CGI scripts, etc). This is difficult because a GET request will always run the script, rather than downloading its contents. One way to avoid this is to map two different URLs to the content, one of which will run the script, and one of which will allow it to be downloaded and manipulated with DAV."

Entonces, lo que hice fué modificar el archivo relacionado con el virtualhost de la siguiente manera:
  • vim /etc/apache2/sites-available/sitioweb
    ...
    Alias /fvtenis "/var/www/sitio/aplicacion/"

    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all

    ...
  • Y agregué las directivas correspondientes al acceso vía DAV pero con un alias diferente:

    Alias /sitio-fuentes "/var/www/sitio/aplicacion/"

    Dav On
    ForceType text/plain
    AuthType Basic
    AuthName "SITIO: Archivos fuentes."
    AuthUserFile /etc/apache2/dav_auth/dav-auth-claves
    Require valid-user

Como se puede apreciar, hay varios trucos que aplican acá:

En primer lugar, se emplea la directiva "directory" para ofrecer los archivos en los directorios que deben ser ejecutados por el compilador de PHP.

En segundo lugar, se creó un alias llamado "sitios-fuentes" que define la parte final del url para acceder con el cliente DAV.

En mi caso utilizo "cadaver" y la forma de conectarme es:

cadaver http://miweb/sitio-fuentes/

En tercer lugar, obligo a que la entrega de los archivos sea en texto plano a través de la directiva "ForceType".

En cuarto lugar, empleo un archivo de autenticación DAV llamado "dav-auth-claves" creado con la herramienta "htpasswd".

Luego de estos cambios, pude verificar que la descarga de los archivos a través de "cadaver" empleando el comando "get" efectivamente venían con el código PHP completo.

Espero sea de utilidad!

José Gregorio.

Fuentes consultadas:

1. http://httpd.apache.org/docs/2.0/mod/mod_dav.html#complex

sábado, 23 de mayo de 2009

SITIO WEB CON APACHE2 Y SSL


La aplicación de seguridad en nuestros sitios Web debe ser una práctica constante y sobretodo cuando existen ambientes hostiles como Internet o Intranets.

En este artículo, muestro cómo realizar la instalación de un certificado autofirmado en un sitio web creado en mi máquina local.

Para este ejemplo consideramos la siguiente información:





  • Sistema operativo: Por supuesto! ... GNU/Linux Debian Lenny :D
  • hostname: jgdu-laptop
  • ip: 192.168.1.114
  • Sólo se puede configurar un sitio seguro por cada dirección IP configurada en el sistema.
  • Suponemos que está instalado el servidor web "Apache 2".
A continuación los pasos necesarios:
  1. Identificar correctamente la máquina que tiene tendrá el sitio Web seguro:
    Esto es necesario revisarlo dado que es probable que nuestra máquina de prueba no esté registrada en ningún servidor de nombres de dominio. Entonces verificamos que el archivo "/etc/hosts" contenga la entrada correspondiente asociando al IP adecuado:
    ...
    192.168.1.114 jgdu-laptop jgdu-laptop
    ...
  2. Creación del certificado digital:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2
    root@jgdu-laptop:/etc/apache2# mkdir certs
    root@jgdu-laptop:/etc/apache2#cd certs
    ... aquí viene la creación del certificado ...
    root@jgdu-laptop:/etc/apache2# openssl req $@ -new -x509 -days 365 -nodes -out jgdu-laptop.crt -keyout jgdu-laptop.key
    ... se responden unas preguntas sencillas previas a la generación de los archivos.
  3. Verificar la creación de los archivos:
    root@jgdu-laptop:/etc/apache2# ls
    ... deben aparecer los siguientes archivos ...
    jgdu-laptop.crt jgdu-laptop.key
  4. Habilitar el módulo "SSL" en el servidor Web:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/mods-available
    root@jgdu-laptop:/etc/apache2# a2enmod ssl
  5. Configurar el sitio Web SSL predeterminado:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/sites-available
    root@jgdu-laptop:/etc/apache2# vim default-ssl
    Ubicar las directivas del certificado y establecer las rutas adecuadas a los archivos generados previamente.
    ...
    SSLCertificateFile /etc/apache2/certs/jgdu-laptop.crt
    SSLCertificateKeyFile /etc/apache2/certs/jgdu-laptop.key
    ...
  6. Habilitar el sitio Web con SSL:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/sites-available/
    root@jgdu-laptop:/etc/apache2# a2ensite default-ssl
  7. Reinicar el servicio Web Apache2:
    root@jgdu-laptop:/etc/apache2# /etc/init.d/apache2 restart
  8. Probar el acceso al sitio seguro con un explorador visitando la página:
    https://jgdu-laptop/
Si deseamos que todo el tráfico de nuestro sitio Web se realice a través de una conexión segura, debemos habilitar el módulo "Rewrite" en el Apache2 y configurar el sitio por defecto "default" ubicado en "/etc/apache2/sites-available/default" con la regla de re-escritura siguiente:

RewriteEngine On
Options +FollowSymlinks
rewriteCond %{SERVER_PORT} 80
rewriteRule ^(.*)$ https://oe.asignaturas.usb.ve/moodle$1 [R,L]

Esta información se coloca dentro de las directivas "" pero fuera de los "".

Espero sea de utilidad.

Éxitos!

José Gregorio.

FUENTES CONSULTADAS:
  1. http://crysol.org/es/node/198
  2. http://www.debian-administration.org/article/Setting_up_an_SSL_server_with_Apache2
  3. http://www.gpltarragona.org/archives/318

jueves, 5 de marzo de 2009

Lighttpd: Un servidor web rápido!


En algún momento se me presentó la duda de qué clase de servidor Web podría estar usando un portal como “www.youtube.com”. Dentro de mi ilusión, pensé que debido a su popularidad “Apache2” podría ser la alternativa, sin embargo, desperté rápidamente cuando me enteré que era un servidor Web llamado “Lighttpd” o “Lighty” como lo llaman por cariño. (En esta dirección podrán confirmar la información http://highscalability.com/youtube-architecture)

Lighttpd es un servidor Web que he descubierto recientemente y me ha sorprendido su alto rendimiento, facilidad de configuración y cumplimiento de las necesidades típicas que se nos presentan a la hora de instalar una aplicación web.

Algunos de los requerimientos que se nos presentan son:
  • Administración de hosts virtuales.
  • Creación de “alias”.
  • Programación en PHP5.
  • Administración de archivos vía DAV.
  • Uso de certificados de seguridad con SSL.
Pues la sorpresa es que todas estas funciones están soportadas por “lighty” y lo mejor es que además de pertenecer a una de las creaciones de la comunidad de software libre, es realmente impresionante la rapidez con la que trabaja.

En este artículo se describen los pasos para instalar el “Lighttpd” así como configurar varias de sus funcionalidades principales.

1. Instalación de “Lighttpd”:

Suponemos que no tenemos instalado ningún otro servidor Web. En caso de tenerlo, al momento de instalarlo la se presentará un mensaje de error indicando que el puerto 80 está ocupado y no levantará a la primera.
#aptitude install lighttpd

2. Configuración de “PHP5” y el soporte para la base de datos “Mysql 5” en “Lighty”:
  • Instalamos “PHP5”:
    #aptitude install php5-cgi php5-common php5-mysql
  • Modificamos la configuración del “PHP5”:
    #vim /etc/php5/cgi/php.ini
  • Modificamos la línea:
    cgi.fix_pathinfo=1
    El archivo de configuración se encuentra en “/etc/lighttpd/lighttpd.conf”. Lo editamos para cargar el módulo “mod_cgi” y “mod_fastcgi”:
    #vim /etc/lighttpd/lighttpd.conf
  • Modificamos los siguientes parámetros:
    server.modules = (
    “mod_access”,
    “mod_alias”,
    “mod_accesslog”,
    “mod_compress”,
    “mod_cgi”,
    “mod_fastcgi”,
    # “mod_rewrite”,
    # “mod_redirect”,
    # “mod_status”,
    # “mod_evhost”,
    # “mod_usertrack”,
    # “mod_rrdtool”,
    # “mod_webdav”,
    # “mod_expire”,
    # “mod_flv_streaming”,
    # “mod_evasive”
    )
    Al final del archivo agregamos:
    ...
    fastcgi.server = ( “.php” => ((”bin-path” => “/usr/bin/php5-cgi”,”socket” => “/tmp/php.socket”)))
  • Reiniciamos el servicio Web:
    #/etc/init.d/lighttpd force-reload
3. Prueba del servidor Web:
  • Creamos el siguiente archivos en el directorio de páginas Web:
    # echo "" > /var/www/index.php
  • Verificamos la visualización de contenido visitando la página:
    http://localhost/index.php
Existen un conjunto de módulos que pueden ser activados a partir del archivo de configuración del “Lighty”. Entre ellos están “mod_rewrite”, “mod_status”, “mod_webdav” y “mod_flv_streaming”. Bastaría con estudiar un poco la finalidad de cada uno de ellos para explotar su capacidades.

En el siguiente enlace se pueden encontrar las diferencias entre configuraciones realizadas en Apache2 y Lighttpd:

http://www.onlamp.com/pub/a/onlamp/2007/04/05/the-lighttpd-web-server.html

Personalmente he probado “Lighttpd” en ambientes de concurrencia alta. Especialmente en aulas virtuales basadas en MOODLE y administradores de contenido Web como JOOMLA y el rendimiento en ambos casos ha mejorado de manera claramente importante.

Éxitos!

FUENTES:
http://www.saghul.net/blog/2007/08/14/howto-un-servidor-web-ligero-lighttpd-php5-mysql5/
http://chrisjohnston.org/2009/setting-up-a-llmp-stack-linux-lighttpd-mysql-php5-on-ubuntu-810
http://www.onlamp.com/pub/a/onlamp/2007/04/05/the-lighttpd-web-server.html
http://www.guatewireless.org/optimizando-el-servidor-web-apache-2-vs-lighttpd-1x/
http://www.guatewireless.org/lighttpd-instalacion-y-configuracion-del-web-server/

martes, 3 de marzo de 2009

APACHE2+DAV fácil


La configuración de un servidor web y su acceso puede realizarse de muchas formas.
A continuación, explico uno de los caminos más sencillos.

1. Nombres del servidor
  • Editar el archivo "/etc/hosts" agregando:
    ...
    127.0.0.1 sitio1
    127.0.0.1 sitio2
    ...
Con esto logramos que el servidor responda a los nombres "sitio1" y "sitio2" de manera local.

2. Instalación y configuración del servidor Web Apache2
  • Instalación de apache2 y PHP5
    • #aptitude install apache2 php5
  • Creamos los directorios para guardar las páginas:
    • #mkdir /var/www/sitio1
    • #mkdir /var/www/sitio2
    • #chown -R www-data.www-data /var/www/sitio1
    • #chown -R www-data.www-data /var/www/sitio2
  • Configuración del primer host virtual:
    • Crearemos un archivo por cada sitio virtual para mantener un mejor orden:
    • #vim /etc/apache2/sites-available/sitio1

ServerName sitio1
ServerAlias www.sitio1
DocumentRoot /var/www/sitio1

ErrorLog /var/log/apache2/sitio1/error.log
LogLevel warn
CustomLog /var/log/apache2/sitio1/access.log combined
ServerSignature On


  • Ahora configuramos el segundo:
    • #vim /etc/apache2/sites-available/sitio2

ServerName sitio2
ServerAlias www.sitio2
DocumentRoot /var/www/sitio2

ErrorLog /var/log/apache2/sitio2/error.log
LogLevel warn
CustomLog /var/log/apache2/sitio2/access.log combined
ServerSignature On

  • Creamos los directorios para los logs:
    • #mkdir /var/log/apache2/sitio1/
    • #mkdir /var/log/apache2/sitio2/
  • Habilitamos cada uno de los sitios:
    • #a2ensite sitio1
    • #a2ensite sitio2
  • Recargamos la configuración del servicio "Apache2":
    • #/etc/init.d/apache2 reload
4. Prueba de los "virtual hosts"
  • Creamos un par de páginas web para probar la configuración:
    • #echo "Este es el sitio 1." > /var/www/sitio1/index.html
    • #echo "Este es el sitio 2." > /var/www/sitio2/index.html
  • Con un explorador, navegamos a las direcciones:
    • http://sitio1
    • http://sitio2
5. Configuración del acceso vía DAV
  • El acceso vía DAV es alternativo al que proveen las cuentas locales del servidor.
  • Las cuentas locales pueden apoyarse en servicios como ssh, scp y ftp.
  • Los usuarios y claves de DAV pueden estar almacenados en un archivo.
  • Cargamos los módulos "dav" y "dav_fs" en el servidor apache2:
    • #a2enmod dav
    • #a2enmod dav_fs
  • Creamos un directorio para guardar el archivo de usuarios y claves para acceso vía DAV:
    • #mkdir /etc/apache2/dav-auth
  • Creamos el archivos con usuarios y claves correspondientes:
    • #htpasswd -c -m /etc/apache2/dav-auth/dav-auth-claves usuario1
    • #htpasswd -m /etc/apache2/dav-auth/dav-auth-claves usuario2
    • #chown root.www-data /etc/apache2/dav-auth/dav-auth-claves
    • #chmod 640 /etc/apache2/dav-auth/dav-auth-claves
  • Con esto hemos creado el archivo "dav-auth-claves" que contiene nombre de usuario y clave cifrada.
  • Configuramos los archivos "sitio1" y "sitio2" en "/etc/apache2/sites-available":
"/etc/apache2/sites-available/sitio1":

...
Alias /webdav /var/www/sitio1

DAV On
AuthType Basic
AuthName "Webdav del sitio 1"
AuthUserFile /etc/apache2/dav-auth/dav-auth-claves
Require valid-user

...

"/etc/apache2/sites-available/sitio2":

...
Alias /webdav /var/www/sitio2

DAV On
AuthType Basic
AuthName "Webdav del sitio 2"
AuthUserFile /etc/apache2/dav-auth/dav-auth-claves
Require valid-user

...

6. Probamos el acceso a los sitios vía DAV:
  • Para esta prueba podemos utilizar un programa de cónsola llamado "cadaver". Procedemos a su instalación:
    • #aptitude install cadaver
  • Ejecutamos la prueba para acceder al "sitio 1":
    • #cadaver http://sitio1/webdav
      ...ingresamos el usuario y la clave.
      Una vez dentro podemos ejecutar el comando "ls" para visualizar los archivos.
  • Ejecutamos la prueba para acceder al "sitio 2":
    • #cadaver http://sitio2/webdav
      ...ingresamos el usuario y la clave.
      Una vez dentro podemos ejecutar el comando "ls" para visualizar los archivos.
Es recomendable utilizar algún cliente para acceso DAV. Afortunadamente para el caso de Debian el sistema trae por defecto la opción de contectarse a un servidor vía "DAV".

En este punto tenemos un servidor web con dos hosts virtuales para ser accedidos vía DAV.

Éxitos!

FUENTES:

http://www.simplehelp.net/2008/12/16/how-to-setup-virtual-hosts-in-apache/
http://www.howtoforge.com/setting-up-webdav-with-apache2-on-debian-etch
http://www.apache2.org/
http://httpd.apache.org/docs/2.0/mod/mod_dav.html
http://lists.debian.org/debian-user-spanish/2008/11/msg00768.html

lunes, 1 de septiembre de 2008

PHP5: This module does not exist!

La instalación de apache2 y php5 usualmente es un proceso sumamente sencillo en Debian Etch:
  • aptitude install apache2 php5
Sin embargo, cuando por alguna razón se trata de desinstalar el programa "manualmente" inventando cosas como borrar directorios de configuración las cosas se pueden volver complicadas para poner a funcionar nuevamente el módulo de php5.

En este ejemplo se explica cómo resolver la situación en la que luego de hacer los pasos "obvios" descritos anteriormente, Apache2 no es capaz de ejecutar páginas PHP y los exploradores al momento de acceder a la página intentan identifican el archivo publicado con "PHTML" y tratan de descargarlo en vez de mostrar la información correspondiente.

Pude observar que al momento de tratar de cargar el módulo "php5", sus archivos relacionados no existían en el directorio "/etc/apache2/mods-available" y el mensaje que me mostraba el shell cuando intentaba cargarlo era el siguiente:
  • a2enmod php5
  • This module does not exist!
Pude constatar que las librerías relacionadas con el módulo estaban en el sistema operativo:
  • updatedb
  • locate libphp5.so
  • /usr/lib/apache2/modules/libphp5.so
Entonces en teoría, lo que faltaban eran los archivos de configuración del módulo en el directorio "/etc/apache2/mods-available" por lo que procedí a crearlos:
  • vim /etc/apache2/mods-available/php5.load
    • Agregué esta línea:
    • LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
  • vim /etc/apache2/mods-enabled/php5.conf
    • Agregué estas líneas:
    • AddType application/x-http-php .php .phtml .php3
    • AddType application/x-http-php-source .phps
Ahora si intentamos cargar el módulo de PHP5:
  • a2enmod php5
  • Module php5 installed; run /etc/init.d/apache2 force-reload to enable.
  • /etc/init.d/apache2 force-reload
En este momento podemos probar cualquier página PHP y si todo sale bien se visualizará correctamente el contenido.

Éxitos!