Ciclos formativos de grado medio y superior de la familia Informática y Comunicaciones

Apache

Servidor Web Apache

Server version: Apache/2.2.14 (Ubuntu)
Server built:   Apr 13 2010 20:21:26

Si estas siendo atacado por usar plesk en tu servidor, esta iptable me esta funcionando muy bien:

iptables -I INPUT -p tcp --dport 80 -m string --to 60 --algo bm --string 'GET /phppath/php' -j DROP


Te aconsejo también meterla por POST, o reducir las 2 reglas a una, y además la versión encriptada:

iptables -I INPUT -p tcp --dport 80 -m string --to 60 --algo bm --string 'POST /%70%68%70%70%61%74%68/%70%68%70?' -j DROP


Dicho sea de paso, también me estaban intentando escanear y he usado esta otra:

iptables -I INPUT -p tcp --dport 80 -m string --to 60 --algo bm --string 'GET /w00tw00t' -j DROP

Puedes comprobar como están funcionando:

iptables -L -v

O bien:

iptables -nL
Feliz combate!!!

Siempre que explico los permisos de Linux a mis alumnos les insisto en que siempre han de escoger los mínimos imprescindibles para que User, Group y Others puedan hacer sólo lo que deben.

En cambio es una práctica muy habitual en entornos Web basados en Linux/Apache (lamp), hacer un chmod -R 777 /var/www/sitio:

chmod -R 777 /var/www/sitio

 

En entornos de desarrollo puede pasar, pero en un servidor en producción es una animalada.

Descargamos desde la url http://www.apachefriends.org/download.php?xampp-linux-1.7.4.tar.gz
Desempaquetamos:

sudo tar xvfz /home/jblanco/Descargas/xampp-linux-1.7.4.tar.gz -C /opt

Iniciamos el servidor Web:

sudo /opt/lampp/lampp start

Todas las opciones del demonio lampp estan en la url http://www.apachefriends.org/en/xampp-linux.html#382
Si las copy-pasteamos al archivo opciones.txt

opciones.txt
------------
start         Starts XAMPP.
stop         Stops XAMPP.
restart     Stops and starts XAMPP.
startapache     Starts only the Apache.
startssl     Starts the Apache SSL support. This
startmysql     Starts only the MySQL database.
startftp     Starts the ProFTPD server.
stopapache     Stops the Apache.
stopssl     Stops the Apache SSL support.
stopmysql     Stops the MySQL database.
stopftp     Stops the ProFTPD server.
security     Starts a small security check programm.
------------
opciones.txt

Y luego hacemos un:

cat opciones.txt |tr -s " "|cut -f1 -d" "|cat -n

Obtenemos:
1    start
2    stop
3    restart
4    startapache
5    startssl
6    startmysql
7    startftp
8    stopapache
9    stopssl
10    stopmysql
11    stopftp
12    security

Tras iniciar el servidor comprobamos que funciona:
http://localhost

Lo securizamos:

sudo /opt/lampp/lampp security

Creamos una carpeta para nuestra web:

sudo mkdir /opt/lampp/htdocs/$USER

Nos damos permisos:

chown $USER:$USER /opt/lampp/htdocs/$USER

Creamos un enlace en nuestro escritorio:

ln -s /opt/lampp/htdocs/$USER /home/$USER/Escritorio

En adelante

$USER = jblanco

Testeamos PHP, para ello creamos un pequeño script en PHP y lo guardamos en /opt/lampp/htdocs/jblanco/index.php
Lo que es lo mismo, en /home/jblanco/Escritorio/jblanco/index.php (enlace que nos hemos creado)
Con el siguiente contenido:

<?php
    echo "Hola mundo"
?>

Y cargamos la url en el navegador:
http://localhost/jblanco/index.php
O bien:
http://localhost/jblanco/
En ambos casos se abrira el mismo archivo, los archivos por defecto son index.php, si al especificar una url, no incluimos un nombre de recurso sino de carpeta, Apache intentará localizar, en esa carpeta, los archivos index.php o index.html. Este comportamiento por defecto se puede configurar, lo veremos más adelante.

Configuración de Apache (servidor Web)

La documentación -> http://httpd.apache.org/docs/2.2/
Directorios /opt/lampp/etc y /opt/lampp/etc/extra
Hay una copia en /opt/lampp/etc/original

Archivo principal -> /opt/lampp/etc/httpd.conf

Se encuentra dividido en secciones, el comentario es la almohadilla.

DocumentRoot
-> directorio de los documentos a despachar por el servidor web. Sólo se tendrá acceso desde HTTP a los archivos ubicados bajo este directorio.
La referencia a los documentos se hará tomando como raíz el valor de DocumentRoot.

DocumentRoot “/opt/lampp/htdocs”

Una petición http://localhost/apuntes/ud1.pdf servirá el archivo /opt/lampp/htdocs/apuntes/ud1.pdf.

DirectoryIndex
-> lista, por orden de preferencia, de los archivos que debe buscar el servidor cuando no se proporciona un nombre de archivo en la url (archivos por defecto).

Configuracion PHP

/opt/lampp/etc/php.ini

Tenemos info en: http://es.php.net/manual/es/ini.php

Se encuentra dividido en secciones, el comentario es el punto y coma.

Podemos ver los valores establecidos con el comando:

grep . /opt/lampp/etc/php.ini| grep -v "^;"


; Language Options ;
-> se establecen aspectos generales del funcionamiento del motor (tipo de etiquetas, tamaño del buffer de salida).

Algunas directivas importantes:

short_open_tag = Off -> Doc en http://php.net/short-open-tag, si se establece en On permite usar <? codigo-php ?> en lugar de <?php codigo-php ?>
safe_mode = Off -> Doc en http://php.net/safe-mode

; Resource Limits ;
-> se establecen los límites temporales y de memoria para los scripts

Algunas directivas importantes:

max_execution_time = 30 -> Máximo tiempo de ejecución en segundos, http://php.net/max-execution-time
memory_limit = 128M -> http://php.net/memory-limit

; Error handling and logging ;
-> aspectos relativos al tratamiento de errores y volcado de los mismos

display_errors = On -> http://php.net/display-errors
Mostrar errores es una característica útil para entornos de desarrollo, pero totalmente desaconsejable para entornos de producción.
Problemas de seguridad: puede revelar información como rutas en el servidor web.

; Data Handling ;
-> aspectos relativos al tratamiento de los datos recibidos en un script.
register_globals -> http://php.net/register-globals
post_max_size -> http://php.net/post-max-size
magic_quotes
-> http://php.net/magic-quotes-gpc

; Paths and Directories ;
directorios donde PHP encontrará los documentos procedentes de un servidor web para interpretar, bibliotecas de funciones de uso común y archivos necesarios para ampliar su funcionamiento (extensiones).

include_path
;include_path = ".:/php/includes"
lista de directorios en donde las funciones require(), include() y fopen_with_path() buscan archivos.
Mediante el uso de ‘.’ en la ruta de inclusión es posible definir inclusiones relativas, ya que su valor se traduce como el directorio actual.

doc_root = -> http://php.net/doc-root
establece la raíz de los documentos PHP en el servidor web. Si PHP está configurado en modo seguro, no se servirán documentos que no estén bajo este directorio.

extension_dir
; extension_dir = "./" -> http://php.net/extension-dir
indica el directorio en donde PHP ha de buscar por extensiones que serán cargadas dinámicamente.

; File Uploads ;
-> http://php.net/file-uploads
parámetros que permiten a los usuarios subir recursos al servidor mediante scripts PHP
upload_tmp_dir
El directorio temporal usado para almacenar archivos cuando se realiza carga de archivos
upload_max_filesize
tamaño máximo de un archivo cargado. Cuando se usa un número entero, el valor del mismo es medido en bytes.
También se puede usar la notación K (para Kilobytes), M (para Megabytes) y G (para Gigabytes). El valor debe ser acorde al usado en la directiva post_max_size (post_max_size = 8M)

; Dynamic Extensions ;
extensiones que se cargarán automáticamente cuando se requiera su uso. Parte de las extensiones se compilan e incluyen como parte del motor. Para ver los módulos compilados junto con el motor PHP, ejecutamos el comando:

/opt/lampp/bin/php -m

Si queremos añadir algún otro módulo, podemos hacerlo de forma dinámica. Quitando el ; que le precede, o añadiendo el que necesitemos. Un ejemplo:
extension="zip.so"

[Session]
En esta sección se configuran los parámetros relacionados con las sesiones
session.save_path
directorio del servidor donde se almacenarán los archivos con información de las sesiones de los usuarios

Configuración de MySQL

/opt/lampp/etc/my.cnf
http://dev.mysql.com/doc/refman/5.1/en/option-files.html

Para habilitar las páginas de usuario, accesibles como http://servidor/~jblanco/, hay que habilitar el modulo apache userdir:

sudo a2enmod userdir

Hace unos meses cuando estuvimos trasteando con el en la Unidad 10 (Internetworking) el interprete PHP estaba habilitado por defecto.

En la versión que acabo de instalar no lo está.

Server version: Apache/2.2.14 (Ubuntu)
Server built:   Apr 13 2010 20:21:26

Editar el siguiente archivo:

sudo gedit /etc/apache2/mods-available/php5.conf

Y comentar las líneas:

    # To re-enable php in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
#<IfModule mod_userdir.c>
# <Directory /home/*/public_html>
# php_admin_value engine Off
# </Directory>
#</IfModule>

Por último, si no quereis volveros locos, como casi me ocurre, vaciar la cache del navegador.

Ya que si no:

http://laptux/~jblanco/

No funcionaba, me daba opción de descargar el archivo index.php.

En cambio,

http://laptux/~jblanco/index.php

Sí funcionaba.

La cache ...