Upgrading from Ubuntu 7.04 (Feisty Fawn) to Ubuntu 7.10 (Gutsy Gibbon)

Before Start

  • It is only possible to upgrade Ubuntu 7.10 ("Gutsy Gibbon") from Ubuntu 7.04 ("Feisty Fawn")
  • Be sure to take Ubuntu 7.04 updated
Upgrading from the Internet to Ubuntu desktops

To update the procedure is as follows.
  1. Open System-> Administration-> Update Manager.
  2. Click on the check box for reviewing new updates.
  3. Click on Update...
  4. It appears on screen a message stating that there is a new version
  5. Click on Upgrade...
  6. Follow the on-screen instructions.

Upgrading from the Internet to Ubuntu Servers

From command line:
  1. Install update-manager-core with the following command
    sudo apt-get install update-manager-core
  2. Run the tool updated with the following command
    sudo do-release-upgrade
  3. Follow the instructions on screen.

Upgrading using CD / DVD

This method is useful if we have no connection to the Internet.
  1. Download and burn the CD installation.
  2. Insert the CD
  3. It displays a dialog offering upgrade from the CD.
  4. Follow the on-screen instructions.
If the update dialog is not displayed for any reason, execute the following command using Alt + F2:
gksu "sh /cdrom/cdromupgrade"

Ubuntu Security: Iptables + Firestarter

Iptables firewall system is a very powerful included in the Linux kernel.
The best thing is to learn iptables and make your own script. But not everyone is eager to learn how to create rules iptables.

Faced with the apparent complexity of the command line interface applications exist as Firestarter, Zorp, Turtle, LutelWall, floppyfw, Guardog, IPCop, Endian y Smoothwall that are simple and powerful, and allowing the platform iptables squeeze almost at maximum.

I will explain how to install and learn how to use Firestarter in Ubuntu.

First, install the package iptables:

  • #sudo apt-get install -test iptables
This will activate the service by default.

Install Firestarter

Firestarter is open source and free, fully graphical (no need to write a single rule) and has a handy wizard to set it up.
Also shows the active connections and intrusion attempts in real time, allows sharing connections, as well as opening and closing ports of entry and exit, or redirigirlos to the local network. To support the most demanding parameters ToS (type of service) and ICMP, as well as the use of user scripts and sets rules before or after the activation of the firewall.

To install opened Terminal (Applications / Accessories / Terminal) and wrote:
  • #sudo apt-get install firestarter
We can also install it with the Synaptic package manager.

By default Firestarter allows all outgoing connections and denied all incoming connections.
The first time you run the program start the wizard, where we configured the network device that we are using, the shared Internet connection and start the firewall for the first time.
Once configured, we can access by typing:
  • #sudo firestarter
There are three main tabs:

Status: shows an overview of the activity and most notable events, as well as the active connections in real time.



Events: shows connections blocked by the firewall in real time. Save the record and see many different fields.



Normative: This is where the rules are set active input and output. All in graphical form.




The settings can be adjusted further from the Edit menu-> Preferences

If we want Firestarter run every time you start a session on Ubuntu, we must add to the list of startup programs (System / Preferences / Sesions / Startup Programs).

Configurar el servidor web Apache - el archivo httpd.conf

Vamos a ver en detalle los aspectos más importantes del archivo de configuración httpd.conf del servidor web Apache. Lo podemos encontrar en: /etc/httpd/httpd.conf

El archivo httpd.conf de configuración del servidor web Apache

El archivo httpd.conf es la principal fuente de configuración del servidor web Apache, en el se encuentran todas las directivas aplicables a la configuración del servidor web, y conocer profundamente este archivo y su estructura es vital para el administrador del servidor web.
El archivo de configuración se divide en cuatro secciones, a saber:

  • Directivas de funcionamiento del servidor web Apache
  • Parámetros de gestión de recursos del servidor web Apache
  • Hosts Virtuales del servidor web Apache
  • Parámetros de seguridad del servidor web Apache

Es necesario que sobre este archivo no tenga acceso ningún usuario que no sea root, ya que las modificaciones de este archivo pueden desencadenar en terribles agujeros de seguridad en el servidor web Apache.

Directivas de funcionamiento del servidor web apache

Las directivas de funcionamiento del archivo de configuración del servidor web Apache son, como su propio nombre indica, unas directrices que definen el funcionamiento interno y externo del servidor web Apache en aspectos tales como el nombre del servidor, la dirección de correo del webmaster, el número de subprocesos que se abrirán en cada sesión del servidor Apache etc.
A continuación vamos a ver una relación de las directivas más importantes de este apartado:

ServerName: Especifica el nombre y el puerto que el servidor utiliza para identificarse, normalmente se determina automáticamente, pero es recomendable especificarlo explícitamente para que no haya problemas al iniciar el servidor. Si el servidor no tiene un nombre registrado en las DNS, se recomienda poner su número IP. No puede estar dentro de ninguna sección.
La sintaxis de uso es:
ServerName direccionIP:Puerto p.e. ServerName localhost:80

ServerAdmin: especifica la dirección de correo electrónico del administrador, esta dirección aparece en los mensajes de error, para permitir al usuario notificar un error al administrador. No puede estar dentro de ninguna sección. Se encuentra disponible a través del módulo Core. Es aconsejable que la dirección de correo no pertenezca al dominio administrado, pues, en caso de que falle, no podremos acceder al correo que probablemente pueda contener mensajes advirtiéndonos del fallo.

ServerRoot: especifica la ubicación del directorio raíz donde se encuentra instalado el servidor web Apache, a partir del cual se crea el árbol de directorios comentado anteriormente. Esta directiva no debería cambiar a no ser que se mueva la carpeta de instalación del servidor web apache a otro directorio. Se encuentra disponible a través del módulo Core.

KeepAlive: especifica si se utilizarán conexiones persistentes, es decir, que todas las peticiones de un usuario se atenderán con la misma conexión.

MaxKeepAliveRequests: número máximo de conexiones persistentes. (Número máximo de usuarios concurrentes si KeepAlive esta en ON). Para establecer este parámetro, hay que tener en cuenta el ancho de banda de salida de nuestro servidor, por el cual deberá ser enviada toda la información, si se establece un valor muy grande respecto al ancho de banda, el tiempo de respuesta se verá incrementado para cada usuario. Se encuentra disponible a través del módulo Core.

KeepAliveTimeout: tiempo que espera en segundos entre peticiones de un usuario, antes de considerar que este ha terminado, y cerrar su conexión. Esta directiva solo es valida si la directiva KeepAlive esta activada.

ServerType: Indica la forma de arrancar servidor web Apache. Puede tener como valores inetd o standalone.
Su sintaxis es la que a continuación se especifica:
ServerType [inetd | standalone]
El arranque mediante inetd indica que no existe un servidor httpd permanente arrancado, sino que el arranque se realiza a partir del servidor de red inetd o xinetd. Cuando inetd recibe una conexión de un servicio, genera un nuevo proceso hijo que ejecuta el programa que proporciona el servicio. En este caso el servidor ejecutado es Apache. El servidor inetd vuelve a su estado original (esperar conexiones) y el proceso recientemente generado sirve la hoja HTML al cliente que la solicitó.
La forma habitual de trabajar se realiza en standalone. En este caso es el propio servidor web Apache el que esta “escuchando” las conexiones de la red. Cuando se recibe una petición HTTP, se genera un nuevo proceso (si es necesario) y se sirve la petición. En la mayor parte de las ocasiones se ahorra para cada petición la creación de un proceso hijo. Las directivas Port, MinSpareServers, MaxSpareServers, StartServers, MaxClients y MaxRequestPerChild son solo validas para la configuración en standalone

Port y Listen: Se utilizan solo cuando se ejecuta el servidor en modo standalone. La directiva Port especifica el puerto por el que el servidor web Apache acepta conexiones. Si el servidor debe atender a varios puertos, se deben usar tantas directivas Listen adicionales como sean necesarias.
La configuración de ejemplo que a continuación transcribimos le indica al servidor web Apache que atienda las peticiones web por los puertos 80 y 8080

Port 80
Listen 8080

MaxClients: Se utiliza para especificar el máximo número de clientes (navegadores) que se pueden conectar simultáneamente al servidor. Si se alcanza este límite, los clientes quedan bloqueados hasta que algunos de los servidores queda libre. Este valor no conviene que sea demasiado bajo (su valor por defecto es 150) y se utiliza como mecanismo para limitar el numero de procesos que se crean ante un numero de peticiones demasiado elevado. Este límite, que se impone el propio servidor web Apache evita caídas indeseadas del servidor. Su sintaxis se especifica a continuación:
MaxClients

TimeOut: el valor se utiliza para configurar medido en segundos, tres parámetros:
1. El tiempo tal que puede tardar una petición en ser recibida entera
2. La cantidad de tiempo que espera entre recepción de paquetes TCP
3. La cantidad de tiempo entre ACK's en transmisiones TCP
Pasado este tiempo se produce un mensaje de error en el que se indica que se ha consumido el tiempo máximo de espera. Establecer un valor muy pequeño puede dar lugar a que los usuarios reciban este mensaje de error, y establecer un valor muy pequeño dará lugar a una sobrecarga de la máquina.

CacheNegotiateDocs: Se utiliza para trabajar con proxies. Si esta directiva no aparece, el servidor Apache envía una respuesta que indica a los servidores Proxy que no almacenen los documentos en su caché. Esto impide que se obtengan versiones antiguas de páginas HTML, pero tiene como desventaja que se desaprovecha el ancho de banda de la red. Si la directiva aparece, se permite que los proxies almacenen documentos proporcionados por este servidor en su caché. Su sintaxis es la que a continuación se especifica.
CacheNegotiateDocs

Parámetros de Gestión de Recursos del servidor web Apache

Siguiendo con la estructura propuesta por el archivo de configuración, dejamos atrás las Directivas de Funcionamiento y nos adentramos en el siguiente apartado. Este apartado, el de Parámetros de Gestión de Recursos, no es más que una colección de directivas (como anteriormente) dedicadas a indicar al servidor Apache donde encontrar la información necesaria en cada momento o para definir como debe actuar de cara a sucesos como no existir la página solicitada o gestionar Hosts Virtuales. A continuación veremos los parámetros más interesantes de este apartado:

DocumentRoot: Esta directiva le indica al servidor web Apache la carpeta raíz que se ubica en el servidor, desde la que se servirán los documentos. Por defecto, todas las peticiones tendrán como raíz esta carpeta, a no ser que se utilicen alias (Directorios virtuales en IIS).
La carpeta raíz por defecto es la carpeta htdocs, la cual podemos encontrar en la ruta /srv/www/htdocs. Si se cambia este directorio por otro, practica muy recomendable, es muy importante que se ponga el nuevo valor, no solo en esta línea, sino también en la sección en la que se establecen los parámetros de configuración de este directorio.

DirectoryIndex: Mediante este parámetro, indicamos al servidor web Apache qué archivo debe buscar, por defecto, en caso de que no se especifique ninguno. Este archivo, de forma predeterminada es index.html, es decir, si desde el navegador tratamos de acceder a www.miservidor.com el servidor por defecto servirá www.miservidor.com/index.html .
Una de las partes atractivas de esta directiva es que podemos indicarle más de un archivo a
buscar de la siguiente forma:
DirectoryIndex archivo1 archivo2 archivo3
El orden con el que se especifica el nombre del archivo determinara la prioridad a la hora de decidir que archivo es el que se muestra.

RedirectPermanent: Se utiliza para indicar que una página alojada en el servidor web ha pasado ha estar en otro URL. De esta forma, la respuesta que genera el servidor web permite al cliente iniciar una nueva petición a un nuevo servidor que aloja la página pedida.

DefaultType: Especifica el tipo mime que se servirá por defecto en caso de no conocer la extensión del archivo que se esta sirviendo. Por defecto, se indicará que se sirve texto plano, con el valor text/plain.

ErrorLog: Especifica la ubicación del archivo que contiene el registro de errores, por defecto en la carpeta logs (/var/logs/apache2)

LogLevel: Indica el tipo de mensajes que se guardaran en el archivo de registro de errores, dependiendo de los valores especificados, se guardaran unos u otros.
Los valores disponibles son: debug, info, notice, warn, error, crit, alert, emerg.

LogFormat: La directiva permite definir el formato que se utilizará para almacenar los registros. A cada formato se le puede asignar un nombre, utilizándolo luego para crear distintos tipos de archivos de registro.
Sintaxis: LogFormat “configuracionError” nombre

IndexOptions: Esta directiva controla la apariencia de la página que se mostrara a un usuario cuando se pide la lista de archivos de un directorio. Entre las opciones posibles, destaca:
FancyIndexing, que muestra los nombres de los archivos con iconos etc…

FolderFirst: Hace que primero se muestren los directorios, esta opción solo se puede establecer en el caso de que FancyIndexing este activa.

Hosts Virtuales en el servidor web Apache

Llegamos a una de las partes mas interesantes del servidor web Apache, el uso de Hosts Virtuales o Alias, aunque nos vemos obligados a recalcar que este apartado pertenece en parte a las directivas de funcionamiento que anteriormente describíamos.
Mediante la correcta configuración de esta directiva podemos alojar mas de un sitio web en el mismo servidor, totalmente independientes uno del otro. A continuación describiremos con un caso teórico el uso de esta directiva, después, claro está, de una precisa explicación del funcionamiento de la misma.

Directivas VirtualHost y NameVirtualHost en el servidor web Apache

Esta es una directiva de bloque que se utiliza para especificar que un mismo servidor Apache sirva peticiones a varias direcciones web. De esta forma se podrán atender peticiones web para dos cabeceras distintas en un mismo servidor.
Hay dos alternativas básicas para aplicar esta técnica:

  • Basada en Nombres DNS
    Se trata de que un computador con una única interfaz de red que solamente tiene asignada una dirección IP pueda servir páginas a dos nombre se servidores Web diferentes. Para que sea posible la utilización de esta técnica es necesario definir al menos un alias DNS
  • Basada en dirección IP
    Se trata de que un computador con varias interfaces de red albergue dos dominios diferentes dependiendo de la IP que haya atendido la petición. Esta opción es útil cuando un computador esta conectado a dos redes diferentes (Intranet e Internet) y desea que el usuario tenga una visión diferente dependiendo de la interfaz de red por la que acceda al computador.

La opción mas comúnmente utilizada es la primera y para ello e necesario emplear las directivas NameVirtualHost y VirtualHost en el archivo de configuración del servidor Apache.
Supongamos que deseamos dar de alta dos dominios,
www.servicio1.com y www.servicio2.com, que se desea atender vía web. En este caso se deben definir dos directivas VirtualHost que contengan directivas ya explicadas, que particularizaran el servicio proporcionado por cada nombre.
Por otra parte, es necesario incluir la directiva NameVirtualHost que indica que dirección IP va a proporcionar el servicio a los hosts virtuales. Si el computador solamente tiene una dirección de red, basta con especificar la dirección IP del servidor que ejecuta Apache, o el carácter *. En este último caso se indicara que todas las direcciones asignadas al servidor que ejecuta Apache se utilizaran como direcciones asignadas a los Hosts Virtuales.
En el caso teórico que describimos a continuación, la máquina con una única tarjeta de red cuya dirección es 138.100.9.22 sirve a dos dominios. Dentro de cada sección VirtualHost se especifican directivas que particularizan cada host virtual. Merece especial atención la directiva DocumentRoot, puesto que el sistema de archivos que se exporta vía web es diferente para cada host. De esta forma, aunque ambas máquinas se resuelvan a la misma dirección IP, el acceso a las dos URL proporciona páginas diferentes.

Configuración del ejemplo

NameVirtualHost *

www.servicio1.com>

ServerAdmin admin1@servicio1.com

DocumentRoot “/srv/www/htdocs/uno”

ServerName www.servicio1.com

www.servicio2.com>

ServerAdmin admin2@servicior2.com

DocumentRoot “/srv/www/htdocs/dos”

ServerName www.servicio2.com

La técnica de hosts virtuales basada en direcciones IP requiere que el computador que alberga los dos hosts tenga dos direcciones IP diferentes (dos interfaces de red). En este caso cada sección VirtualHost hace referencia a cada una de las direcciones.

Configuración del ejemplo

ServerAdmin admin1@servicio1.com

DocumentRoot “/srv/www/htdocs/uno”

ServerName www.servicio1.com

ServerAdmin admin2@servicior2.com

DocumentRoot “/srv/www/htdocs/dos”

ServerName www.servicio2.com

Directivas de seguridad del servidor web Apache

A continuación, serán expuestas las directivas de configuración del servidor que especifican quien tiene permisos para acceder a determinados recursos. De esta forma se pueden restringir accesos no autorizados a determinados documentos. En esta sección se exponen las formas mas simples que ofrece el servidor web Apache para proteger documentos:

  • Autorización de acceso basada en el usuario.
  • Autorización de acceso basada en el nombre o dirección del cliente que realiza la petición.

Estos dos tipos de autorizaciones se pueden especificar de dos formas:

  • En un archivo de configuración global del servidor: access.conf o http.conf
  • En un archivo de configuración que puede haber en cada directorio del sistema de archivos exportado

En esta sección se muestran las directivas más importantes que aparecen en los archivos de configuración del servidor web Apache, y que permiten establecer los mecanismos básicos de autorización por computador y por usuario. Estas directivas aparecerán en el archivo global access.conf o httpd.conf y en el que especifica la directiva AccessFileName.

Directivas

AccessFileName: Se utiliza para especificar el nombre de cada archivo que contiene directivas que especifican los parámetros de seguridad para cada directorio. Su sintaxis se especifica a continuación:
AccessFileName [archivo]
En cada directorio exportado puede haber un archivo con este nombre que contendrá directivas que especifican parámetros de seguridad para los archivos del directorio en el que esta almacenado el archivo y sus subdirectorios.

AllowOverride: Cuando el servidor encuentra un archivo .htaccess (como se explica en la directiva AccessFileName) es necesario saber que directivas presentes en ese archivo pueden prevalecer sobre las directivas de configuración previas. En ese momento es cuando entra en juego la directiva AllowOverride, porque especifica que tipos de directivas se pueden modificar por el archivo .htaccess de un directorio.
La directiva AllowOverride puede definirse como:
AllowOverride opcion opcion opcion….Cada una de estas opciones que se aplican como parámetro a esta directiva indica que directivas se pueden sobrescribir. Seguidamente se explican las más importantes:

AuthConfig:
Permite el uso de directivas que permiten el control de acceso a usuarios a una zona Web: AuthGroupFile, AuthName, AuthType, AuthUserFile, requiere. Hay mas directivas como: AuthDBMGroupFile, AuthDBMUserFile, etc.

Indexes:
Permite la aparición de directivas que permiten mostrar el contenido de un directorio que no contiene el archivo index.htm: AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon…

Limit:
Permite la aparición de la directiva Limit que permite acotar el acceso a una zona Web por nombre o dirección Ip del cliente. Esta directiva se explicara seguidamente.

Options:
Permite la aparición de la directiva Options que permite modificar los valores de seguridad por defecto que haya establecido el administrador del servidor Web.

All:
Si aparece se permiten todas las opciones anteriores.

None:
Si aparece no se permite ninguna de las opciones anteriores.

Sintaxis: AllowOverride All|None|directive-type [directive-type] ...

Valor por defecto: AllowOverride All

En este ejemplo que se muestra a continuación no se permite que los usuarios almacenen en su zona Web programas CGI que se puedan ejecutar ni que se pueda mostrar el contenido de un directorio que no contiene el archivo index.html.

Options –ExecCgi –Indexes

AllowOverride Indexes Options

Por otra parte, se permite que sea el usuario el que, si lo desea, pueda cambiar estas restricciones modificando el archivo .htaccess para cambiar las autorizaciones por defecto, de tal forma que si se incluye la siguiente línea en el archivo .htaccess de un directorio Web de usuario, podrá mostrar el contenido de un directorio y ejecutar programas CGI.

Options +ExecCgi +Indexes

Limit: Se utiliza para limitar el acceso a la información de un directorio bajo un conjunto
de métodos. Esta limitación se realiza incluyendo un conjunto de directivas dentro del bloque. Su sintaxis se especifica a continuación:

Directivas

Dependiendo de las operaciones que se realicen sobre el subárbol de directorios que se desea limitar se debe especificar un método u otro. Supóngase que en un directorio no se necesita que ningún cliente “envíe” ningún tipo de información al servidor. En este caso habría que habilitar los métodos que permiten obtener información del servidor (GET y HEAD) y restringir los métodos POST, PUT y DELETE.

Directivas

Directivas

Los métodos incluidos en la lista pueden ser uno o más de los siguientes: GET, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, y UNLOCK.
Los nombres de los métodos distinguen mayúsculas de minúsculas. Si usa GET también se restringirán las peticiones HEAD. El método TRACE no puede limitarse.

Consejo:
Es mejor usar una sección LimitExcept en lugar de una sección Limit cuando se quiere restringir el acceso, porque una sección LimitExcept protege contra métodos arbitrarios.

LimitExcept: Se usa para englobar un grupo de directivas de control de acceso que se aplicarán a cualquier método de acceso HTTP no especificado en los argumentos; es lo contrario a lo que hace una sección Limit y puede usarse para controlar tanto métodos estándar como no estándar o métodos no reconocidos. Sintaxis:

method [method] ... >

Autorización de acceso por dirección del cliente:

Directivas allow, deny y order
La autorización de acceso a un subárbol de directorios basado en la dirección del cliente autoriza o deniega el acceso dependiendo de la dirección IP del host que haya generado la petición sin necesidad de pedir información adicional al cliente. La especificación del PC se puede realizar por nombre de DNS o por la dirección IP. La especificación de acceso se realiza con las directivas:

Order
Allow from
Deny from

Estas tres directivas deben estar incluidas en un bloque Limit (anteriormente explicado).
La directiva order define el orden en el que se deben procesar las directivas allow y deny. Las posibles opciones son:

  • Order allow, deny: primero se evalúan las directivas allow y posteriormente las directivas deny.
    Order deny, allow: primero se evalúan las directivas deny y posteriormente las directivas allow.
    Order mutual-failure: las máquinas que aparecen asociadas a la directiva allow y no aparecen en la directiva deny son autorizadas

La directiva allow from especifica una lista de máquinas a las que se les autoriza el acceso a un directorio o árbol de directorios. La directiva deny from especifica una lista de computadores a los que se les deniega el acceso a un directorio o árbol de directorios. Los parámetros que contiene pueden ser los siguientes:

all: se autoriza/deniega el acceso a todas las máquinas independientemente de su IP
dirección IP: se autoriza el acceso a la máquina cuya IP sea la especificada.
dominio: se autoriza el acceso a las máquinas que pertenezcan al dominio indicado.

Ejemplo:

order deny, allow

deny from all

allow from upv.es

allow from upc.es

Autorización de acceso por usuario
La autentificación es cualquier proceso mediante el cual se verifica que alguien es quien dice ser, es decir; un proceso por el cual a alguien se le permite acceder donde desea u obtener la información busca.
La autorización de acceso basada en autentificación de usuarios permite controlar el conjunto de usuarios que tienen acceso a un subárbol de directorios. Esta autentificación se basa en utilizar nombres de usuarios y contraseñas. Cuando el cliente accede a dicho subárbol, el servidor le pedirá que se identifique mediante un nombre de usuario y una contraseña. Si la identificación tiene éxito, se autoriza al usuario a entrar en la zona restringida sin volver a pedirle la información de identificación. Las directivas que permiten la autentificación de usuario son:

Directiva require: Especifica el usuario o conjunto de usuarios que están autorizados a entrar en la zona restringida.
Sintaxis: Require entity-name [entity-name] ...
Require debe ser usada de forma conjunta con las directivas AuthName, AuthType, y directivas como AuthUserFile y AuthGroupFile (para definir usuarios y grupos) para funcionar correctamente.
Esta directiva está incluida en el bloque Limit. Si el último parámetro es valid-user, indica que se autoriza a un cliente a entrar en el espacio web siempre que proporcione un usuario válido, es decir, debe estar dado de alta en el archivo de usuarios y debe proporcionar su contraseña correcta.

Require user userid [userid] ...
Solo los usuarios mencionados pueden acceder al recurso.

Require group group-name [group-name] ...
Solo los usuarios pertenecientes a los grupos mencionados pueden acceder al recurso.

Require valid-user
Todos los usarios pueden acceder al recurso.

Directiva AuthType: Especifica el tipo de autentificación que se requiere. Actualmente solamente están implementadas las opciones Basic y Digest. La primera utiliza el mismo algoritmo que utilizan los sistemas Unix para codificar las palabras clave; La otra se basa en MD5 y no todos los navegadores lo soportan.
Para que funcione correctamente, esta directiva tiene que ir acompañada por las directivas AuthName y require, y de directivas como AuthUserFile y AuthGroupFile.
Sintaxis:
AuthType Basic|Digest

Directiva AuthName: Esta directiva especifica el nombre de dominio que se muestra al solicitar autorización para acceder a un directorio. Este nombre de dominio se muestra al cliente para que el usuario sepa qué nombre de usuario y contraseña ha de introducir.
AuthName toma solamente un argumento; si el nombre de dominio contiene algún espacio, debe escribirse entre comillas. Para que funcione correctamente, esta directiva debe usarse junto con las directivas AuthType y require,, y con directivas como AuthUserFile y AuthGroupFile.

Directiva AuthUserFile: Especifica el archivo que contiene los usuarios con las palabras clave. Cada línea del archivo de usuarios contiene un username seguido de un punto y coma, seguido de la contraseña cifrada. Si el mismo usuario ID es definido múltiples veces, mod_auth usarán la primera aparición para verificar la contraseña.
Sintaxis:
AuthUserFile file-path
Este archivo se compone de dos campos: el primero es el nombre de usuario y el segundo es la palabra clave que tiene asociada (cifrada). Para añadir un nuevo usuario a este archivo, Apache incluye un programa que permite dar de alta a un usuario o cambiar su clave. Este programa es htpasswd, y su sintaxis es la que a continuación se especifica:
htpasswd -c Filename username
La opción –c indica que se debe crear un nuevo archivo de usuarios y solo se debe incluir la primera vez que se crea un usuario. A este programa se le pasan dos parámetros: el primero es el archivo que contiene los usuarios y el segundo es el nombre de usuario que se desea añadir al archivo o al que se desea cambiar su contraseña.

Directiva AuthGroupFile: Especifica el archivo que contiene los grupos con sus palabras clave. El archivo AuthGroupFile se edita manualmente, usando tu editor de texto preferido, y su formato es el siguiente:
Sintaxis: nombre_del_grupo: usuario1 usuario2 usuario3

Aspectos sobre seguridad del servidor web Apache
El administrador debe asegurarse de que el archivo AuthUserFile es almacenado fuera del árbol de documento del servidor web. No debe ponerse en el directorio que protege. En ese caso, los clientes podrían ser capaces de trasvasar el archivo.

Convertir paquetes RPM a paquetes DEB con Alien en Ubuntu Linux

Algunas distribuciones Linux, como por ejemplo Red Hat, SUSE y Mandriva, usan paquetes rpm, organizados de manera diferente a los paquetes deb de Debian y Ubuntu Linux.

Convertir paquetes RPM a paquetes DEB con Alien en Ubuntu Linux

Para instalar estos paquetes rpm en Ubuntu Linux es preciso convertirlos antes al formato de paquete deb. Para ello se usa la aplicación alien, la cual debe estar instalada en nuestro sistema operativo Ubuntu Linux.

Instalar Alien en Ubuntu Linux


Si no esta instalada lo hacemos con el siguiente comando:

sudo apt-get install alien

(es posible que nos pida el cd de instalacion de Ubuntu Linux)

Convertir paquetes RPM a paquetes DEB con Alien

La aplicación alien se utiliza de la siguiente manera:

sudo alien .rpm

De esta forma el programa crea un archivo con el nombre del paquete, pero con extensión .deb, que se podrá instalar usando el comando:

sudo dpkg -i .deb

Comandos linux

En este artículo se detalla una lista de comandos básicos utilizados en la línea de comandos de Linux con ejemplos básicos de cómo los comandos son usados en el sistema operativo. Para aprender más sobre cada comando, es aconsejable la página de ayuda de Linux asociada al comando. Por ejemplo: man ls en la línea de comandos para aprender más sobre el comando ls y todas sus opciones.

Comandos para la consola de Linux

Apagar el sistema operativo: halt

Ejemplos:

  • halt

Actualizar paquetes RPM: rpm

Ejemplos:

  • rpm -Uvh firefox-10-1.i586.rpm

Desinstalar paquetes RPM (no se necesita ni la versión ni la extensión) : rpm

Ejemplos:

  • rpm -e firefox

Consultar por paquetes instalados en linux : rpm

Ejemplos:

  • rpm -qf firefox

Listar todos los paquetes instalados en el sistema operativo linux : rpm

Ejemplos:

  • rpm -qa

ADMINISTRAR PAQUETES DEB EN EL SISTEMA OPERATIVO LINUX



Instalar paquetes DEB : dpkg

Ejemplos:

  • dpkg -i firefox-10-1.i586.deb

Desinstalar paquetes DEB (no se necesita ni la versión ni la extensión): dpkg

Ejemplos:

  • dpkg -r firefox

Consultar por paquetes instalados en linux : dpkg

Ejemplos:

  • dpkg -l

ADMINISTRAR ARCHIVOS COMPRIMIDOS EN EL SISTEMA OPERATIVO LINUX



Comprimir archivos a un contenedor tar.gz en linux : tar

Ejemplos:

  • tar -zcvf alex.tar.gz /home/fabian/html

Descomprimir archivos de un contenedor tar.gz en linux : tar

Ejemplos:

  • tar -zxvf alex.tar.gz

Empaqueta el directorio actual de linux en múltiples Diskettes : tar

Ejemplos:

  • tar tar -cMf /dev/fd0

Descomprimir un archivo bz2 en linux : bunzip2

Ejemplos:

  • bunzip2 alex.tar.bz2

OTROS COMANDOS DEL SISTEMA OPERATIVO LINUX



Obtener un calendario en pantalla: cal

Ejemplos:

  • cal -y (obtiene un calendario del año)

Obtener una lista de dispositivos PCI conectados en linux : lspci

Ejemplos:

  • lspci

Obtener una lista de dispositivos conectados en linux : lsdev

Ejemplos:

  • lsdev

Ver el contenido de un archivo binario en linux : hexdump

Ejemplos:

  • hexdump type

Buscar un patrón en el contenido de los archivos en linux : grep

Ejemplos:

  • grep fono agenda.text

Ver el final de un archivo: tail

Ejemplos:

  • tail /var/log/squid/access.log

Contar el número de líneas o palabras de un archivo : wc

Ejemplos:

  • wc /var/log/squid/access.log

Comparar dos archivos en linux : diff

Ejemplos:

  • diff /etc/passwd /respaldo/passwd

Mostrar que procesos se están ejecutando en el sistema operativo : ps

Ejemplos:

  • ps -A (nos muestra todos los procesos del sistema)

Mostrar de forma interactiva los procesos del sistema, el estado de utilización de la CPU, la memoria utilizada y libre, la RAM que utiliza cada proceso, etc en el sistema operativo linux : top

Ejemplos:

  • top

Establecer la distribucion (idioma) del teclado en el sistema operativo linux : loadkeys

Ejemplos:

  • loadkeys es (teclado español)

BUSQUEDA DE ARCHIVOS EN EL SISTEMA OPERATIVO LINUX



Buscar los archivos binarios (los ejecutables), los archivos de ayuda o los archivos de código fuente de un determinado programa en linux : whereis

Ejemplos:

  • whereis ls

Filtrar los ficheros para encontrar desde los que tienen un determinado nombre, los modificados o creados a partir de una cierta fecha, los que tienen ciertos permisos, etc. (Puede tardar bastante): find

Ejemplos:

  • find /home/alex -name *.txt -print

Realiza búsquedas en una base de datos interna que se actualiza periódicamente y nos permite hacer búsquedas bastante más rápidas que find. (los resultados no siempre estarán actualizados): locate

Ejemplos:

  • locate calc

Programacion Php y base de datos Mysql

Una de las características más importantes de la programación en PHP es su integración con diversos motores de base de datos. PHP está construido para generar en forma sencilla páginas web dinámicas a partir de información almacenada en bases de datos. A continuación se detallan las funciones más importantes y ejemplos típicos de uso de programación PHP con una base de datos MySql..

Programacion php y base de datos Mysql

Conexión a la base de datos Mysql desde Php

$db_link=mysql_connect(hostname, user, password);


Ejemplo de conexión a la base de datos Mysql:


$db=mysql_connect(“localhost”,”root”,”secreto”);


La función realiza la conexión a la base de datos Mysql y devuelve “false” si hubo algún error en la conexión o un link a la conexión a la base en caso de que la conexión sea exitosa.
El link es un número que indica la sesión dentro del servidor de base de datos MySql. Para finalizar la conexión se debe utilizar la función mysql_close(). Es muy importante cerrar la conexión a la base de datos mysql una vez finalizadas las transacciones para evitar la sobrecarga en el motor de la base de datos.

Selección de la base de datos Mysql a utilizar desde Php

mysql_select_db(database_name, db_link);


Ejemplo de selección de base de datos Mysql desde Php:


mysql_select_db(“test”,$db);


Esta función configura cual es la base de datos mysql que se utilizara por omisión. En este caso el link a utilizar en esta función es el link que se obtuvo al ejecutar la función mysql_connect.
La función mysql_select_db devuelve el valor “false” en caso de que se encuentre algún error, como por ejemplo la inexistencia de la base de datos mysql. En este punto cabe aclarar que la denominación de las bases de datos de MySql es case-sensitive (diferencia minusculas y mayusculas), por lo que debemos mantener un standard a la hora de elegir los nombres de las distintas bases de datos.

Queries (consultas) a la base de datos Mysql desde Php.

$result=mysql_query(query,db_link);


Ejemplo de consulta a la base de datos Mysql:


$result=mysql_query(“update clientes set deudor=’si’ where apellido=’Perez’, $db)

$query=”insert into clientes (nombre, Apellido) values (Pablo, Rodriguez) ”;
$result=mysql_query($query,$db);

Nuevamente el link que se debe usar es el que se obtiene al conectarse a la base, mysql_query devuelve falso en caso de que la consulta no pueda ejecutarse (error de SQL) o bien un result set en los casos que devuelva algún tipo de datos como por ejemplo en un select.
Es muy importante fijarse con que usuario se realizó la conexión a la base de datos a la hora de ejecutar el mysql_connect, ya que la gran mayoría de los errores producidos en esta instancia son el resultado de la falta de permisos para realizar la consulta.

Cantidad de Filas Consultadas o Modificadas


Filas Consultadas en la base de datos Mysql desde Php

$cantidad=mysql_num_rows($result);


Ejemplo de filas consultadas en la base de datos Mysql desde Php:


$query=”select nombre, telefono from contactos where edad between 20 and 25 and sexo=’f’”;
$result=mysql_query($query,$db);
$cant=mysql_num_rows($result);

Esta función devuelve la cantidad de filas que se obtuvieron luego de ejecutar una instrucción de consulta como por ejemplo la función select.
En el caso del ejemplo, en la variable $cant nos dirá cuantas chicas de entre 20 y 25 años tenemos en nuestra lista de contactos.

Filas Modificadas en la base de datos Mysql desde Php


$cantidad=mysql_affected_rows(db_link);

Ejemplo de filas modificadas en la base de datos Mysql desde Php:

$cuantos=mysql_affected_rows($db);

Devuelve cuantos registros fueron afectados por un query con insert, update, o delete, notar que se le pasa el db_link ya que el result_set no tiene sentido. Si el query fue un delete sin clausula “where” esta función devuelve cero independientemente del número de registros eliminados de la tabla.

Obtención de registros de una consulta Mysql desde Php

Obtención de datos en un result set


$var=mysql_fetch_row(result_set);


Ejemplo de result set:


$query=”select nombre, telefono from contactos where edad between 20 and 25 and sexo=’f’”;
$result=mysql_query($query,$db);$rs=mysql_fetch_row($result);


Toma un registro del result set y lo devuelve en un vector en el cual el elemento con índice 0 es la primer columna del registro, el elemento con índice 1 es la segunda columna, etc. Si no hay más registros por devolver devuelve false.
Los valores de los campos solicitados en el result set son devueltos en forma de array, es decir que para acceder al valor de nombre de la primera fila de nuestro ejemplo debo llamar a la variable $rs[0].

Ejemplo:

while($v=mysql_fetch_row($result)) {

print(“Columna 0: $v[0] Columna 1: $v[1]”);

}

Obtención de datos en un vector


$query=”select nombre, telefono from contactos where edad between 20 and 25 and sexo=’f’”;
$result=mysql_query($query,$db);
$rs=mysql_fetch_array($result);

Ejemplo para obtener datos de mysql en un vector con Php:


$rs=mysql_fetch_array($result);


Funciona de forma idéntica a mysql_fetch_row pero devuelve los resultados en un vector asociativo indexado por nombre de columna, por lo que para obtener los nombres de nuestra consulta es necesario llamar al vector de la forma $rs[“nombre”]


Ejemplo:


while($v=mysql_fetch_array($result)) {
print(“Columna 0: $v[“nombre”]”);

}

Cerrar la conexión a la base de datos Mysql desde Php

Por último, esta función nos sirve para cerrar la conexión a la base se usa.

mysql_close(db_link)


Otras funciones php para base de datos Mysql:

result=mysql_create_db(database_name,db_link)
Crea una base de datos con el nombre indicado, devuelve true o false según el resultado.


Result=mysql_data_seek(result_set, position)
Mueve el puntero interno de cada result set a la
posición indicada (el primer registro es la posición 0), de esta forma la próxima llamada a mysql_fetch_row o mysql_fetch_array devolvera el registro que se acaba de apuntar. Devuelve true o false.

Result=mysql_db_query(database_name, query,db_link)
Realiza una consulta a una base indicada, es obviamente reemplazable por un mysql_select_db y
un mysql_query aunque resulta útil si hay que consultar tablas en varias bases distintas.

Result=mysql_drop_db(database_name,db_link)
Dropea la base con el nombre indicado, devuelve true o false.


Object=mysql_fetch_field(result_set, numero_columna)
Devuelve un objeto con información sobre la columna indicada de un result set (0 es la primera columna, 1 la segunda, etc). Las propiedades que se setean en el objeto son:

name – nombre de la columna

table – nombre de la tabla

max_length – longitud maxima de la columna
not_null – 1 si la columna no puede ser null

primary_key - 1 si la columna es primary key unique_key - 1 si la columna es unique key
multiple_key - 1 si la columna no es unique
key
numeric - 1 si la columna es numerica
blob - 1 si la columna es un BLOB
type – Tipo de la columna
unsigned - 1 si la columna es sin signo

zerofill - 1 si la columna es zero-filled

object=mysql_fetch_object(result_set)
Similar a mysql_fetch_array con la diferencia de que
los resultados se devuelven en un vector en lugar de un vector asociativo. Luego se puede acceder a las distintas columnas del registro devuelto como propiedades (data_members) del objeto devuelto.

int=mysql_num_fields(result_set)
Devuelve el numero de columnas en un result set.

Error Mysql y programacion Php

Manejo de error de la base de datos Mysql desde programacion php:

Mensaje=mysql_error()
Devuelve un texto con el mensaje correspondiente al error que ocurrió en caso de que se produzca un error en la base de datos Mysql.


Ejemplo:


$result=mysql_query($query,$db);

if(!$result) {
$x=mysql_error();
die(“ Ocurrio un error en la base de datos: $x”);

}

Herramientas para desarrollo web

Internet esta lleno de herramientas para desarrollo web. En esta oportunidad voy a hablar de las que nos ofrece http://www.w3.org.
El Consorcio World Wide Web (W3C) es un consorcio internacional donde las organizaciones miembro, personal a tiempo completo y el público en general, trabajan conjuntamente para desarrollar estándares Web. La misión del W3C es: "Guiar la Web hacia su máximo potencial a través del desarrollo de protocolos y pautas que aseguren el crecimiento futuro de la Web".
Para ello ofrece algunas herramientas utiles para webmaster entre las que quiero destacar:
  • Amaya: es una herramienta combinada del W3C compuesta por un navegador web y una herramienta de autor. Es software libre, disponible para sistemas tipo Unix, Linux, Mac OS X, Windows y otras plataformas. Soporta HTML 4.01, XHTML 1.0, XHTML Basic, XHTML 1.1, HTTP 1.1, MathML 2.0, muchas características CSS 2, e incluye soporte para gráficos SVG (transformación, transparencia y animación SMIL), además se puede, no sólo visualizar sino además editar, de manera parcial, documentos XML. Si bien existen otros editores web, no deja de ser una opcion interesante para probar.

  • Validador de CSS: esta herramienta online verifica Hojas de Estilo en Cascada (CSS) y documentos (X)HTML con hojas de estilo. Nos ofrece la posibilidad de hacerlo ingresando la URL de nuestra pagina, subiendo nuestro archivo con el codigo o directamente escribiendo el codigo CSS que queremos analizar.

  • Validador de codigo HTML: esta herramienta, tambien online, verifica nuestro codigo HTML, XHTML, SMIL, MathML, etc. Como en el caso de las hojas de Estilo, lo podemos usar ingresando la URL de nuestra pagina, subiendo nuestro archivo con el codigo o directamente escribiendo el codigo.

  • Chequeador de Links: esta herramienta verifica que no existan links rotos en nuestra pagina. Solo ingresamos la URL de la misma y chequea cada link de nuestra pagina.
Ademas de estas herramientas que menciono, podemos encontrar mucha informacion y tutoriales sobre los estandares desarrollados, que recomiendo leer para refinar nuestra manera de generar codigo.