Académique Documents
Professionnel Documents
Culture Documents
vidor
esdeApl
i
caci
ones
enLi
nux
Servidores de
Aplicaciones en
Linux
2010/PFT/2887
Table of Contents
Prlogo 1
Mdulo 1 Shell. Comandos 3
Shell .......................................................................................... 3
Comandos ................................................................................. 4
Redirecciones ........................................................................... 4
Mdulo 2 - Sistema de archivos. Configuracin 7
El sistema de archivos .............................................................. 7
Enlaces ...................................................................................... 8
Los archivos de configuracin .................................................. 8
Mdulo 3 - Certificados SSL 11
Estructura PKI ......................................................................... 11
Gestin de certificados ........................................................... 12
Certificados y Java .................................................................. 14
Mdulo 4 Apache. Subversion 17
Apache .................................................................................... 17
Subversion .............................................................................. 23
Problemas? ........................................................................... 26
Mdulo 5 - Tomcat 29
Instalacin ............................................................................... 29
Gestin de aplicaciones .......................................................... 32
Problemas? ........................................................................... 34
Mdulo 6 - JBoss 35
Instalacin ............................................................................... 35
Estructura de JBoss ................................................................ 37
Configuracin .......................................................................... 38
Problemas? ........................................................................... 40
Mdulo 7 - Clusters 41
Tomcat .................................................................................... 41
JBOSS ..................................................................................... 43
Mdulo 8 - Auditora y Seguridad 47
Seguridad ................................................................................ 47
Registro (logs) ......................................................................... 49
Auditora .................................................................................. 50
ANEXO A Comandos habituales 53
ANEXO B Cluster Tomcat 59
Bibliografa 63
Prlogo
PRLOGO
Shell
Para poder ejecutar estos comandos es necesario un entorno
que permita su introduccin y nos muestre el resultado de su
ejecucin. Esto se consigue mediante un tipo de programas
llamados shells. Como casi todo en Linux, es posible usar
varias alternativas, entre las que destacan:
C-Shell
Bourne Shell
Korn Shell
Bash
El shell Bash, de los ms utilizados, dispone de una serie de
variables de entorno predefinidas as cono una serie de
palabras reservadas que se pueden consultar en
http://www.linux-es.org/node/107. Asignando valores a estas
variables de entorno conseguiremos acomodar el shell para
poder trabajar en l del modo ms adecuado. Algunas de las
ms usadas son:
PATH: contiene las rutas en las que encontrar programas.
LANG: define el idioma con el que trabajaremos, de modo
que los mensajes de error, la ayuda y otras informaciones
se ofrecern en el que se fije.
PS1: indica que caracteres se mostrarn en la lnea de
comandos del shell como prompt.
HOME: seala cual es la carpeta por defecto del usuario con
el que hemos abierto sesin.
HOSTNAME: su valor es el nombre del servidor.
A menudo se define PS1 como el nombre del usuario seguido del directorio
actual, terminando en $ (en # si es el usuario root)
Comandos
En el anexo A, al final del manual, se enumeran los comandos
ms comunes por orden alfabtico.
Otra caracterstica muy til del shell Bash es el auto
completado. Bastar introducir los primeros caracteres de un
comando y pulsar la tecla <TAB> para que se termine de
escribir el comando o los nombres de ficheros y carpetas.
Casi todos los comando ofrecen la opcin -h o help que nos
proporcionarn una descripcin breve del uso del comando.
Para informacin ms detallada existe el comando man, el cual
se ejecuta seguido del comando sobre el que necesitamos
ayuda:
man ls
Redirecciones
Cuando se ejecuta un comando en Linux, por defecto usar la
entrada estndar (stdin, normalmente el teclado), y
proporcionar unos datos por la salida estndar (stdout,
normalmente la pantalla). Adems tambin generar una salida
de errores (stderr) que, por defecto, tambin ir a la salida
estndar.
Con las redirecciones seremos capaces de cambiar este
comportamiento redefiniendo la entrada, la salida o ambas.
Se aade al final del comando el signo < para indicar que
archivo ser la entrada y el signo > para indicar a que archivo
ir la salida. Por ejemplo:
gzip<un_archivo>un_archivo.gz
lsl>listado.txt
Tubos
Sirven para encadenar un conjunto de comandos que no estn
programados para ello de tal forma que la salida estndar de
cada comando se usa directamente como la entrada del
siguiente, mediante un tubo annimo (pipe). Se emplea el
signo | para representar el tubo.
lsl|less
O muy complejos:
curl"http://en.wikipedia.org/wiki/Pipeline_(Unix)"|\
sed's/[^azAZ]//g'|\
tr'AZ''az\n'|\
grep'[az]'|\
sortu|\
comm23/usr/share/dict/words
Comando xargs
Este comando usa la entrada estndar como una lista de
parmetros para el comando especificado a continuacin,
como por ejemplo:
cat>texto1
>pera
>manzana
>naranja
xargs<texto1echofruta:
fruta:perafruta:manzanafruta:naranja
Ejercicio 5: Usar el comando xargs para obtener en una lnea todos los directorios
dentro de /var/log.
El sistema de archivos
Slo existe una estructura de directorios o carpetas que
empieza por la carpeta raz, que se representa mediante /, y
bajo la cual cuelga toda la estructura de ficheros y carpetas.
Adems, todo se trata como fichero, desde un disco duro a un
ratn o una zona de memoria.
Todas las particiones con un sistema de archivos que
reconozca Linux se montan a partir de un directorio, el punto
de montaje. No hay, por tanto, letras de unidades.
Linux reconoce y es capaz de manejar casi todos los sistemas de archivos que
hay, incluso aquellos en desuso. Destacar la capacidad de montar en modo
lectura-escritura NTFS.
Enlaces
Otra particularidad interesante en Linux son los enlaces. Un
enlace es un alias para el nombre de un archivo. Los hay de
dos tipos: simblicos y fsicos.
Los primeros son meros punteros a una ruta, por lo que es
conveniente definirlos de forma absoluta. Los segundos son
nombre alternativos para un archivo que ocupan un i-nodo. La
consecuencia es que si borramos el archivo original, en el
primer caso slo permanecer el puntero, mientras que en el
segundo caso el archivo permanece pero ahora con el nombre
alternativo solamente.
id:5:initdefault:
Para ejecutar comandos como root hay que anteponer el comando sudo.
Para saber en nivel estamos hay que ejecutar el comando runlevel.
Estructura PKI
Hay dos estrategias principales a seguir: usar certificados de
entidades externas, como la FNMT o Verisign, o usar
certificados generados por una CA propia. Depender de la
necesidad de interactuar con equipos y organizaciones ajenas.
En el primer caso bastar con importar los certificados y claves
en las carpetas adecuadas. En el segundo caso ser necesario
crear toda la infraestructura PKI en nuestro servidor. Existir
una carpeta para los certificados de la autoridad certificadora
propia (CA), y otra para el resto.
Antes de explicar la creacin de esa infraestructura, es
necesario conocer los diferentes formatos disponibles para
almacenar certificados:
CER,DER,CRT: Se utilizan normalmente para el
almacenamiento del certificado en formato binario
(DER, Distinguish Encoding Rules).
PEM - Certificado codificado en Base64, encerrado entre
"-----BEGIN CERTIFICATE-----" y "-----END
CERTIFICATE-----". (PEM, Privacy-enhanced Electronic
Mail)
P7B, P7C: El formato PCKS#7 permite almacenar el
certificado junto con los certificados de la ruta de
certificacin. La ruta de certificacin es el conjunto de
certificados que jerrquicamente firman un certificado.
PFX, P12: Este formato permite la transferencia de los
certificados junto con sus claves privadas
correspondientes. PCKS#12 permite incluir todos los
certificados de la ruta de certificacin.
En http://es.wikipedia.org/wiki/PKI#Componentes se explica la
infraestructura PKI, de lo que destacamos los tipos de
certificados y ficheros:
Clave privada: Contiene la clave privada y suele tener
contrasea.
Solicitud de certificado: Se enva la clave pblica y la
informacin de identidad en este archivo a la CA para que
sta la firme.
Certificado: Contiene la clave pblica firmada por la CA.
Lista de revocaciones: Este archivo contiene una lista de
certificados revocados por la CA.
Gestin de certificados
Existen varios tipos de certificados pero el ms extendido es el
X.509, definido por la norma del ITU-T X.509 (versin 3) de la
ISO (International Organization for Standardization) para su
modelo OSI .(Open System Interconnection).
Un certificado X.509 normalmente es un fichero pequeo que
contiene la siguiente informacin:
Nombre Distintivo del propietario.
Nombre Distintivo de la Autoridad Certificadora.
Identificacin y firma de la Autoridad Certificadora (CA) que
firm el certificado.
Perodo de vigencia. El perodo de tiempo de vigencia del
certificado.
Informacin adicional sobre la CA, como nmeros de serie
o versin.
OpenSSL
Openssl es un conjunto de herramientas que permiten una
completa gestin de certificados. Para manipular certificados
tenemos el comando openssl, que admite una gran variedad
de modalidades distintas, entre ellas:
ca: Gestin de una autoridad certificadora (CA).
crl: Gestin de revocacin de certificados CLR
(Certificate Revocation List).
crl2pkcs7: Conversiones de CRL a PKCS#7.
passwd: Generacin de contraseas.
pkcs12: Gestin de certificados PKCS#12.
pkcs7: Gestin de certificados PKCS#7.
req: Gestin de solicitudes de certificados X.509
(Certificate Signing Request, CSR).
rsa: Gestin de llaves RSA.
x509: Gestin de certifcados de tipo X.509.
En funcin de la distribucin, la configuracin de openssl se
encontrar en un directorio bajo /etc. Dentro de la carpeta se
halla el archivo con la configuracin, que tendr un nombre del
dir=/etc/pki/cursoCA#Carpetabase
certs=$dir/certs#Certificadosfirmados
crl_dir=$dir/crl#Listasderevocacion
database=$dir/index.txt#Indicebasededatos
new_certs_dir=$dir/newcerts#Certificadosnuevos
certificate=$dir/cacert.pem#CertificadodelaCA
serial=$dir/serial#Numeroseriaactual
private_key=$dir/private/cakey.pem#ClaveprivadaCA
#PoliticarespectodelosvaloresdelaCA
[policy_match]
countryName=match#debecoincidir
stateOrProvinceName=supplied#debeproporcionarse
organizationName=supplied
organizationalUnitName=optional#puededejarsevacio
commonName=supplied
emailAddress=optional
#Valorespordefectoparasolicitudesdecertificados
[res_distinguished_name]
countryName_default=ES
stateOrProvinceName_default=RegiondeMurcia
0.organizationName_default=CARM
organizationalUnitName_default=cursoServAplicaciones
Creacin de una CA
Una Autoridad Certificadora (CA, Certificate Authority) es la
autoridad encargada de firmar los certificados y posteriormente
confirmar que el dueo de un certificado es realmente quien
dice ser.
Para generar una CA tendremos que crearnos la carpeta
dnde queramos tener la configuracin de nuestra CA y, dentro
de esa carpeta, los directorios private, certs y newcerts.
Despus debemos ejecutar ejecutar los siguientes comandos
touch index.txt
ln -s newcert.pem /ruta/a/certs/hash_obtenido.o
Certificados y Java
Las aplicaciones desarrolladas en Java usan unos
contenedores para la gestin de certificados. Ser necesario
importar dentro de estos contenedores los certificados en los
que confiemos o aquellos que usemos para firmar o cifrar.
Mediante la herramienta keytool podremos realizar todas
estas operaciones, incluyendo la creacin de solicitudes.
Habr un contenedor genrico que se usar para cualquier
aplicacin Java y que normalmente contiene los certificados de
las CAs en las que confiamos.
Para importar un certificado de una CA a este contenedor
genrico en el Java de Sun, usamos el comando:
keytool -import -alias CAdeConfianza
-keypass clavedelcertificado
-file /ruta/a/cacert.pem
-keystore $JAVA_HOME/jre/lib/security/cacerts
-storepass clavedelcontenedor
Apache
Apache es el servidor HTTP ms usado en el mundo y quiz el
proyecto libre de ms xito y repercusin. Debido a este xito
son muchos los aplicativos, tanto libres como privativos, que se
apoyan en l. Subversion es un claro ejemplo.
Instalacin
CentOS se basa en el paquete rpm para la gestin de
paquetes de software. La instalacin de puede hacer en modo
grfico o en modo texto. Para la primera lanzaremos la
aplicacin Yum Extender":
Configuracin
Normalmente los archivos de configuracin de Apache se
encuentran en un directorio /etc/httpd o /etc/apache,
dependiendo de la distribucin de Linux. En CentOS lo
encontramos en la primera opcin.
Dentro de esta carpeta tenemos estas otras carpetas:
conf: contiene los archivos de configuracin globales.
conf.d: contiene los archivos de configuracin especficos
para SSL, subversion, etc.
logs: contiene los archivos de log.
modules: aqu estn los mdulos que proporcionan
funcionalidades extra a Apache.
El archivo /etc/httpd/conf/httpd.conf define las
directivas globales de Apache tales como el nombre del
servidor, el directorio de documentos, los puertos de escucha,
etc. Algunas de las ms habituales son stas:
ServerRoot"/etc/httpd"
DocumentRoot"/var/www/html"
Listen80
LoadModuleauth_basic_modulemodules/mod_auth_basic.so
....(variaslneasLoadModule)
Includeconf.d/*.conf
DirectoryIndexindex.htmlindex.html.var
<IfDefineSSL>
Listen80
Listen443
</IfDefine>
Userwww
Groupwww
ServerAdminadmin@misitio.com
ServerNamewww.misitio.com
DocumentRoot"/home/httpd/misitio"
<Directory"/home/httpd/misitio">
OptionsIndexesFollowSymLinks
AllowOverrideNone
Orderallow,deny
Allowfromall
</Directory>
SSL
Primeramente vamos a crear dos carpetas ssl.cert y
ssl.key bajo /etc/httpd dnde alojaremos el certificado y la
clave primaria del servidor copindolos o movindolos desde
su ubicacin actual, probablemente bajo /etc/pki.
Para habilitar SSL ser necesario abrir el archivo
/etc/httpd/conf.d/ssl.conf con un editor y modificar los
parmetros que se indican con los valores propuestos
(adaptando las rutas a nuestra instalacin):
Listen443
AddTypeapplication/xx509cacert.crt
AddTypeapplication/xx509cacert.pem
SSLCertificateFilessl.cert/server.pem
SSLCertificateKeyFilessl.key/server.key
Ejercicio 21: Eliminar la contrasea del archivo de la clave del servidor y darle los
permisos adecuados. Reiniciar Apache para comprobar que no pide la
contrasea.
Subversion
Subversion nos permitir acceder a nuestros repositorios
mediante una URL del tipo:
http://servidor/raiz_subversion/repositorio1
Instalacin
Necesitaremos instalar el paquete subversion, que contiene la
aplicacin propiamente dicha, y el paquete mod_dav_svn, que
permitir acceder con WEBDAV al repositorio a travs del
servidor Apache.
Esta vez vamos a instalar desde la lnea de comandos, aunque
nada impedira hacerlo con la herramienta grfica. La
herramienta de instalacin de software en modo texto de
CentOS es yum.
Ejecutamos el comando:
sudo yum install subversion mod_dav_svn
Configuracin
Una vez instalado debemos configurarlo adecuadamente. Lo
primero ser crear una carpeta subversion en la que
almacenar los repositorios y la configuracin, dentro de la que
habr adems otras tres subcarpetas:
Ejercicio 24: Crea el archivo y el primer usuario. Despus aade otros dos usuarios
ms: user2 y user3.
#Defininoselpuerto
Listen447
#Creamosunservidorvirtualparaelpuerto447
<VirtualHost*:447>
DocumentRoot"/home/subversion/styles"
ServerNamecurso
#OpcionesdeSSL
SSLEngineon
SSLCipherSuiteALL:!ADH:!EXPORTS56:RC4+RSA:+HIGH:
+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFilessl.cert/newcert.pem
SSLCertificateKeyFilessl.key/cert.key
#Opcionesdesubversion
<Location/repos>
DAVsvn
SVNListParentPathon
SVNParentPath/home/subversion/repos
SVNIndexXSLT"/svnindex.xsl"
AuthzSVNAccessFile/home/subversion/access/control
Satisfyall
Requirevaliduser
AuthTypeBasic
AuthName"AuthorizationRealm"
AuthUserFile/home/subversion/access/svnusers
</Location>
</VirtualHost>
Problemas?
Hay ocasiones en que nuestra pareja Apache-subversion no
funciona segn lo esperado. Muy probablemente se deba a
una configuracin inapropiada, a unos permisos incorrectos o a
alguna otra causa similar.
La manera que tenemos de averiguar que es lo que provoca el
problema es acudiendo a nuestros amigos: los archivos de log.
Dado que la gestin la hacemos a travs de Apache, son los
archivos de log de ste los que deberemos consultar.
En Linux, los archivos de log suelen hallarse en /var/log, y
los de Apache estn en /var/log/httpd:
MDULO 5 - TOMCAT
Instalacin
Como ya hemos dicho, Tomcat corre sobre Java por lo que lo
primero que habra que hacer es instalar la mquina virtual
Java, si es que no lo est.
cd /usr/share
/bin/sh /opt/jdk-6u18-linux-i586.bin
cat>/etc/profile.d/java.sh<<FIN
exportJAVA_HOME="/usr/share/jdk1.6.0_18"
FIN
exit
Ejercicio 31: Pulsar sobre las opciones 'Tomcat Administration' y 'Tomcat Manager'.
El usuario es tomcat" y la contrasea tambin. Qu sucede?
<GlobalNamingResources>
<Resourcename="UserDatabase"auth="Container"
type="org.apache.catalina.UserDatabase"
description="B.D.Deusuarios"
factory="org.apache.catalina.users.MemoryUserData
baseFactory"
pathname="conf/tomcatusers.xml"/>
</GlobalNamingResources>
<Servicename="Catalina">
<!DefineunconectornoSSLHTTP/1.1
porelpuerto8088>
<Connectorport="8088"maxHttpHeaderSize="8192"
maxThreads="50"minSpareThreads="5"
maxSpareThreads="15"enableLookups="false"
redirectPort="8443"acceptCount="50"
connectionTimeout="40000"
disableUploadTimeout="false"
compression="on"compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml"/>
<!DefineunconectorSSLHTTP/1.1enpuerto8443>
<!<Connectorport="8443"maxHttpHeaderSize="8192"
maxThreads="150"minSpareThreads="25"
maxSpareThreads="75"enableLookups="false"
disableUploadTimeout="true"
acceptCount="100"scheme="https"secure="true"
clientAuth="false"sslProtocol="TLS"/>>
<!DefineunconectorAJP1.3enelpuerto8009>
<Connectorport="8009"enableLookups="false"
redirectPort="8443"protocol="AJP/1.3"/>
<Enginename="Catalina"defaultHost="localhost"
jvmRoute="jvm1">
<Realm
className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Hostname="localhost"appBase="webapps"
unpackWARs="true"autoDeploy="true"
xmlValidation="false"
xmlNamespaceAware="false">
<Valve
className="org.apache.catalina.authenticator.S
ingleSignOn"/>
</Host>
</Engine>
</Service>
</Server>
En http://tomcat.apache.org/tomcat-5.5-doc/config/index.html
encontramos la documentacin sobre las opciones.
SSL
Hasta ahora hemos accedido usando HTTP, lo que quiere decir
que toda la informacin es transmitida en claro por la red, o lo
que es lo mismo, accesible a cualquiera con un sniffer.
Al igual que Apache, Tomcat soporta el uso de SSL para cifrar
la informacin y autentificar clientes. La manera de configurar
esta opcin es editar el archivo de configuracin server.xml.
Hay que habilitar un conector para configurar SSL, de modoe
que escuche por el puerto 8443 el protocolo HTTPS. Adems
deberemos indicar los parmetros especficos de SSL, como el
certificado, clave privada, etc.
Dado que Tomcat corre sobre Java, deberemos definir un
contenedor (o keystore) en el que almacenar estos datos
mediante la herramienta keytool.
El conector ser definido de este modo:
Ejercicio 34: Editar server.xml para crear el conector (ya hay uno, aunque
comentado).
Ejercicio 35: Crear el keystore a partir de un nuevo archivo de clave privada con
contrasea.
Gestin de aplicaciones
Mediante la aplicacin Tomcat Manager" es posible gestionar
parar, recargar, replegar e incluso desplegar e instalar las
aplicaciones:
Problemas?
En los archivos de log encontraremos la informacin para
investigar el origen de los problemas. Tomcat graba sus logs
en el directorio /var/log/tomcat5, dentro del archivo
catalina.out.
MDULO 6 - JBOSS
Instalacin
Aunque ya va por la versin 6, nosotros vamos a ver la versin
estable JBoss 4.0.5GA. Esta versin necesita el JDK 1.5 de
Sun o superior. Debemos asegurarnos de que tenemos la
versin adecuada instalada.
Java
En el mdulo anterior nos descargamos e instalamos la versin
JDK 1.6, que podemos usar.
Sin embargo, hay que asegurarse de que el entorno Java
necesario est definido. Esto lo logramos creando un archivo
llamado /etc/profile.d/java.sh con este contenido:
JAVA_HOME="/usr/share/jdk1.6.0_18"
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/lib
LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/i386
#JAVA_OPTS="Djava.awt.headless=true"
exportJAVA_HOMEPATHCLASSPATHLD_LIBRARY_PATH
#exportJAVA_OPTS
JBoss
Nos podemos descargar la versin 4.0.5 de JBoss desde el
enlace:
http://downloads.sourceforge.net/project/jboss/JBoss/JBoss-
4.0.5.GA/jboss-4.0.5.GA.zip?use_mirror=sunet
por ejemplo con el comando wget:
cd/opt
sudowget
http://downloads.sourceforge.net/project/jboss/JBoss/JBos
s4.0.5.GA/jboss4.0.5.GA.zip?use_mirror=sunet
Por defecto, tanto JBoss como Tomcat usan el mismo puerto, 8080, por lo que no
podremos tener ambos en ejecucin si no cambiamos es puerto en uno de ellos.
Ejercicio 38: Realizar todos estos pasos y comprobar que se est ejecutando JBoss.
Estructura de JBoss
La estructura de la carpeta bajo la que se instala JBoss la
tenemos en esta figura:
SSL
Hay que localizar el archivo server.xml dentro de la carpeta
jboss/server/<NAME>/deploy/jbossweb-
tomcat55.sar/, y cambiarlo de acuerdo a las instrucciones
especficadas en el mdulo 5 sobre Tomcat de este libro. A
grandes rasgos:
Aadir el conector con los parmetros adecuados.
<Connectorport="8443"address="${jboss.bind.address}"
maxThreads="100"strategy="ms"
maxHttpHeaderSize="8192"
emptySessionPath="true"
scheme="https"secure="true"
clientAuth="false"
keystoreFile="${jboss.server.home.dir}/conf/chap8.keystore"
keystorePass="curso2010"keystoreType="PKCS12"
sslProtocol="TLS"
>
</Connector>
sudo cp /usr/share/tomcat5/conf/curso \
$JBOSS_HOME/server/default/conf/chap8.keystore
Reiniciar JBoss.
Ejercicio 39: Habilitar SSL en nuestro servidor JBoss y comprobar que accedemos a
https://localhost:8443.
Problemas?
En el caso de encontrar algn error, funcionamiento no
esperado, pobre rendimiento, etc. deberamos acudir a
consultar los archivos de log.
Como se ha dicho stos se encuentran en el directorio log de la
modalidad en ejecucin. Para la modalidad default podramos
concultarlo con:
sudoless$JBOSS_HOME/server/default/log/server.log
MDULO 7 - CLUSTERS
Tomcat
sudo wget
http://apache.tradebit.com/pub/tomcat/tomcat-
connectors/jk/binaries/linux/jk-
1.2.28/i586/mod_jk-1.2.28-httpd-2.2.X.so
sudo cp mod_jk-1.2.28-httpd-2.2.X.so
/etc/httpd/modules/mod_jk.so
<IfModule mod_jk.c>
JKWorkersFile "conf/workers.properties"
JkLogFile "logs/mod_jk.log"
JkLogLevel error
JkMount /* front
</IfModule>
Ejercicio 43: Abrir una sesin contra Apache, desconectar la red del nodo de Tomcat
contra el que ha iniciado sesin y comprobar que no se pierde la sesin
si refrescamos (aunque tarde un poco).
JBOSS
Como vimos, JBoss ofrece un conjunto de servicios adems de
servlets y pginas JSP. A priori esto implica una mayor
complejidad a la hora de crear un cluster (o particin segn
JBoss). Sin embargo, JBoss viene preparado para funcionar en
cluster con tan slo usar la modalidad all y arrancarlo
mediante el comando run.sh -c all.
Todos los servidores JBoss arrancados de este modo se auto
detectan y automticamente crean un cluster.
Ejercicio 45: Modificar la particin a la que pertencen nuestros dos nodos para que
sea "Curso-Cluster JBoss".
Seguridad
Discos
Cuando instalemos el sistema conviene particionar los discos
de modo que algunos directorios tengan su propio espacio.
Esto nos proporciona una mejor separacin y proteccin de los
datos. Algunas de las carpetas que deberan tener su propia
particin son:
/tmp
/var
/var/log
/var/log/audit
/home
Tambin conviene asignar una contrasea al cargador de
arranque (grub, lilo) para evitar que nadie con acceso fsico a
la mquina pueda cambiar la configuracin de inicio.
Red
Hay que evitar el uso de DHCP, asignando manualmente la
direccin IP del servidor, su HOSTNAME y los servidores DNS,
as como la ruta por defecto.
Tambin es recomendable configurar el cortafuegos,
normalmente mediante IPTABLES, para restringir y monitorizar
los accesos a y desde nuestro sistema.
Usuario root.
La seguridad de nuestro sistema depende por completo de los
accesos como usuario root. Se debe evitar, por tanto, acceder
como root siempre que sea posible. Como hemos visto a lo
largo de este manual, para realizar acciones como usuario root
hemos usado el comando sudo.
Este comando se configura mediante el archivo
/etc/sudoers, el cual define que usuarios pueden usarlo, con
que privilegios, que comandos, y que contrasea debern
proporcionar.
En nuestro caso, el usuario administrador ha sido incluido en el
grupo wheel. Esto le permite ejecutar cualquier comando como
root proporcionando su propia contrasea.
Para poder editar el archivo sudoers hay que usar
necesariamente el comando visudo como usuario privilegiado
o root.
Contraseas
Para cualquier usuario, pero especialmente para usuarios
privilegiados, es conveniente asignar un contrasea lo
suficientemente fuerte. Las caractersticas principales que
Software
Como ya se dijo, es conveniente instalar slo el software
imprescindible y, en concreto, conviene no instalar los
paquetes para desarrollo como compiladores, fuentes del
kernel, etc.
Adems, si nuestra distribucin lo permite, hay que forzar la
comprobacin de integridad para las descargas de software
desde los repositorios.
En CentOS debemos asegurarnos de que la opcin
gpgcheck=1 est configurada en el archivo /etc/yum.conf y
de que no existe la opcin gpgcheck=0 en ninguno de los
archivos de la carpeta /etc/yum.repos.d.
Este comando nos lista los archivos que no coinciden con los
que el paquete espera, exceptuando los de configuracin. La
informacin que devuelve no indica necesariamente que haya
algn problema, pero tenemos ms informacin para
detectarlo.
Ejercicio 50: Ejecutar el comando anterior y observar la salida.
Ficheros y directorios
Conviene comprobar que determinados ficheros y directorios
tienen asignados los permisos correctos para evitar acciones
inapropiadas.
Para los archivos que gestionan los grupos y usuarios locales
deberamos ejecutar los siguientes comandos con cierta
periodicidad:
cd/etc
sudochownroot:rootpasswdshadowgroupgshadow
sudochmod644passwdgroup
sudochmod400shadowgshado
Registro (logs)
Consiste en recabar y almacenar datos sobre las acciones y
eventos que tienen lugar en un sistema.
Linux dispone de syslog. Es un sistema para gestionar los
ficheros de log ampliamente usado en todas las distribuciones
Linux y otros sistemas operativos. Veamos como configurarlo.
Lo primero es asegurarnos de capturar todos los mensajes de
log importantes. Para ello editamos el archivo de opciones de
syslog, /etc/syslog.conf:
auth,user.* /var/log/messages
kern.* /var/log/kern.log
daemon.* /var/log/daemon.log
syslog.* /var/log/syslog
lpr,news,uucp,local0,local1,local2.*/var/log/unused.log
chmod0600LOGFILE
/var/log/messages /var/log/secure \
/var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {.....
Auditora
CentOs (y RedHat) dispone del programa auditd que registra
los eventos que se producen relativos a conexin, identificacin
y modificacin de usuarios en el sistema o durante el uso de
otros programas, como sudo.
Para asegurarnos de que est habilitado ejecutaremos:
chkconfig -list auditd
Recomendaciones
Existen documentos y pginas web que recogen de forma ms
o menos exhaustiva los pasos y aspectos necesarios para
tener nuestro sistema bien configurado desde el punto de vista
de la seguridad y la auditora. A continuacin se enumeran
algunos para las distribuciones ms difundidas:
RedHat (CentOS)
- http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-
i731.pdf
SuSE
- http://www.suse.de/~thomas/SLES-
Hardening/Installation_of_a_Secure_Server_with_SL
ES9.htm
Debian (Ubuntu)
- http://www.sans.org/reading_room/whitepapers/linux/
hardening_debian_4_0_
%E2%80%93_creating_a_simple_and_solid_foundat
ion_for_your_applications_2059
A
addgroup: Se utiliza para crear un grupo nuevo.
adduser: Se utiliza para aadir un usuario. En ese momento,
no solo se crear la cuenta del usuario sino
tambin su directorio de trabajo, un nuevo grupo de
trabajo que se llamar igual que el usuario y
aadir una serie de ficheros de configuracin al
directorio de trabajo del nuevo usuario.
B
bash,sh: Existen varias shells para Linux, Korn-Shell (ksh),
Bourne-Shell (sh), C-Shell (csh), bash.
bg: Manda un proceso a segundo plano.
C
cat: Muestra el contenido del archivo en pantalla en
forma continua, el prompt retornar una vez
mostrado el contenido de todo el archivo. Permite
concatenar uno o mas archivos de texto.
cd: Cambia de directorio.
chattr: Cambiar atributos de un fichero.
chgrp: Cambia el grupo al que pertenece el archivo.
chmod: Utilizado para cambiar la proteccin o permisos de
accesos a los archivos.
chown: Cambia el propietario de un archivo.
chroot: Nos permite cambiar el directorio raz.
clear: Limpia la pantalla, y coloca el prompt al principio de
la misma.
cmp,diff:Permite la comparacin de dos archivos, lnea por
lnea. Es utilizado para compara archivos de datos.
cp: Copia archivos en el directorio indicado.
crontab: Realizar una tarea programada de forma regular.
D
date: Retorna la fecha. Admite formatear la salida.
delgroup:Se utiliza para eliminar un grupo.
deluser: Elimina una cuenta de usuario. La pega de este
comando es que no elimina automticamente el
directorio de trabajo del usuario.
df: Muestra los sistemas de ficheros montados.
dmesg: Muestra los mensajes del kernel durante el inicio
del sistema.
du: Sirve para ver lo que me ocupa cada directorio
dentro del directorio en el que me encuentro y el
tamao total.
E
echo: Muestra un mensaje por pantalla.
env: Para ver las variables de entorno definidas.
exit: Cierra las ventanas o las conexiones remotas esta-
blecidas o las conchas abiertas. Antes de salir es
recomendable eliminar todos los trabajos o
procesos de la estacin de trabajo.
F
fg: Manda un proceso a primer plano.
file: Determina el tipo del o los archivo(s) indicado(s).
find: Busca los archivos que satisfacen la condicin en el
directorio indicado.
free: Muestra informacin sobre el estado de la memoria
del sistema, tanto la swap como la memoria fsica.
Tambin muestra el buffer utilizado por el kernel.
fsck: Para comprobar si hay errores en un sistema de
archivos.
G
grep: Su funcionalidad es la de escribir en salida estndar
aquellas lneas que concuerden con un patrn.
Busca patrones en archivos.
gzip: Comprime un archivo utilizando la extensin .gz.
H
head: Muestra las primeras lineas de un fichero.
I
ifconfig:Obtener informacin de la configuracin de red.
J
job: Lista los procesos que se estn ejecutando en
segundo plano.
K
kill: Permite interactuar con cualquier proceso
mandando seales para que termine.
L
less: Muestra el archivo de la misma forma que more,
pero puedes regresar a la pgina anterior presio-
nando las teclas <U> o <B>.
ln: Sirve para crear enlaces a archivos, es decir, crear
un fichero que apunta a otro. Puede ser simblico si
usamos -s o enlace duro.
logout: Termina la sesin actual.
ls: Lista los archivos y directorios dentro del directorio
de trabajo.
lsattr: Muestra los atributos de un fichero.
M
man: Ofrece informacin acerca de los comandos o
tpicos del sistema Linux, as como de los
programas y libreras existentes.
mkdir: Crea un nuevo directorio.
more: Muestra el archivo en pantalla. Presionando
<INTRO>, se visualiza lnea por lnea. Presionando
<ESPACIO>, pantalla por pantalla. Si desea salir,
presione <Q>.
mount: En Linux no existen las unidades A: o C: sino que
todos los dispositivos cuelgan" del directorio raz /.
Para acceder a un dispositivo es necesario primero
montarlo, esto es, asignarle un lugar dentro del
rbol de directorios del sistema.
mv: Mueve archivos o subdirectorios de un directorio a
otro, o cambia el nombre del archivo o directorio.
N
netstat: Muestra las conexiones y puertos abiertos por los
que se establecen las comunicaciones.
P
passwd: Se utiliza para establecer la contrasea a un
usuario.
ping: Se utiliza generalmente para comprobar que un
sistema est encendido y conectado.
ps: Muestra informacin acerca de los procesos
activos. Sin opciones, muestra el nmero del
proceso, terminal, tiempo acumulado de ejecucin y
el nombre del comando.
pstree: Muestra un rbol de procesos.
pwd: Muestra el directorio actual de trabajo.
R
rm: Elimina un archivo.
rmdir: Elimina el directorio indicado, el cual debe estar
vaco.
S
scp: Sirve para hacer una copia segura entre dos orde-
nadores. La informacin viaja encriptada usando
SSL.
set: Para ver las variables de entorno.
sort: Muestra el contenido de un fichero, pero mostrando
sus lneas en orden alfabtico.
ssh: (Secure Shell Client)Es un programa para conec-
tarse en una mquina remota mediante protocolo
SSL y ejecutar programas en ella.
su: Cambia al usuario indicado, Si no se indica ninguno
trata de cambiar a root.
sudo: Ejecuta un comando como root.
T
tail: Este comando es utilizado para examinar las
ltimas lneas de un fichero.
tar: Agrupa archivos y directorios en ficheros con la
extensin .tar.
telnet: Conecta el host local con un host remoto, usando la
interfaz TELNET. No encripta la conexin.
top: Muestra los procesos que se ejecutan en ese
momento, mostrando los recursos que se estn
consumiendo (Memoria, CPU, ...). Es una mezcla
de los comandos uptime, free y ps.
touch: Crea un archivo vaco.
U
umask: Establece la mscara de permisos. Los permisos
con los que se crean los directorios y los archivos
por defecto.
umount: Desmonta un sistema de archivos.
unalias: Borra un alias.
uname: Informacin sobre el sistema operativo
uptime: Nos indica el tiempo que lleva la mquina arran-
cada.
V
vi: Permite editar un archivo de texto. Es uno de los
editores de texto ms usado en Linux.
vmstat: Muestra estadsticas sobre la carga de la mquina.
W
wc: Cuenta los caracteres, palabras y lneas del archivo
de texto.
whereis: Devuelve la ubicacin del archivo especificado, si
existe.
whoami: Escribe su nombre de usuario en pantalla.
Varios
&: Aadiendo un & al final del comando haremos que
se comando ese ejecute en segundo plano.
!: Repite el ltimo comando colocando la letra con la
que comienza el comando o su nmero de historial.
server.xml, nodo 1
<Serverport="8005"shutdown="SHUTDOWN">
<Listener
className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener
className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener
className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
<GlobalNamingResources>
<Resource
name="UserDatabase"
auth="Container"
type="org.apache.catalina.UserDatabase"
description="Userdatabasethatcanbeupdatedandsaved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcatusers.xml"/>
</GlobalNamingResources>
<Servicename="Catalina">
<Connector
address="192.168.56.101"
port="8009"
emptySessionPath="true"
enableLookups="false"
protocol="AJP/1.3"
redirectPort="8443"/>
<Enginename="Catalina"defaultHost="localhost"jvmRoute="nodo1">
<Realm
className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Hostname="localhost"
appBase="webapps"
unpackWARs="true"
autoDeploy="true"
xmlValidation="false"
xmlNamespaceAware="false">
<Context
path="/servletsexamples"
reloadable="true"
docBase="servletsexamples"
distributable="true"/>
<Cluster
className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true"
clusterName="TOMCATcluster">
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="192.168.56.101"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
<Sender
className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
replicationMode="pooled"
ackTimeout="15000"/>
<Valve
className="org.apache.catalina.cluster.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;
.*\.html;.*\.css;.*\.txt;"/>
<Valve
className="org.apache.catalina.cluster.session.JvmRouteBinderValve"
enabled="true"/>
<ClusterListener
className="org.apache.catalina.cluster.session.JvmRouteSessionIDBinderListener
"/>
<Deployer
className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
tempDir="${catalina.base}/wartemp/"
deployDir="${catalina.base}/wardeploy/"
watchDir="${catalina.base}/warlisten/"
watchEnabled="true"/>
<ClusterListener
className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
</Cluster>
</Host>
</Engine>
</Service>
</Server>
jk.conf
LoadModulejk_modulemodules/mod_jk.so
<IfModulemod_jk.c>
JKWorkersFile"conf/workers.properties"
JkLogFile"logs/mod_jk.log"
JkLogLevelerror
JkMount/*front
</IfModule>
workers.properties
#Definesomeproperties
workers.apache_log=/var/log/httpd/
ps=/
#Define3workersthelastonebeingaloadbalancingworker
worker.list=front
#Setpropertiesfornodo1(ajp13)
worker.nodo1.type=ajp13
worker.nodo1.host=192.168.56.101
worker.nodo1.port=8009
worker.nodo1.lbfactor=1
worker.nodo1.cachesize=10
worker.nodo1.cache_timeout=600
worker.nodo1.socket_keepalive=1
worker.nodo1.socket_timeout=60
#Setpropertiesfornodo2(ajp13)
worker.nodo2.type=ajp13
worker.nodo2.host=192.168.56.102
worker.nodo2.port=8009
worker.nodo2.lbfactor=1
worker.nodo2.cachesize=10
worker.nodo2.cache_timeout=600
worker.nodo2.socket_keepalive=1
worker.nodo2.socket_timeout=60
#Setpropertiesforfront(lb)whichusenodo1andnodo2
worker.front.type=lb
worker.front.balance_workers=nodo1,nodo2
worker.front.sticky_session=true
BIBLIOGRAFA
http://www.ibm.com/developerworks/linux/library/l-lpic1-v3-103-4/index.html
http://en.wikipedia.org/wiki/Pipeline_%28Unix%29
http://www.bdat.net/documentos/certificados_digitales
http://es.wikipedia.com
http://dns.bdat.net/documentos/entorno_publicacion_web/x677.html
http://svnbook.red-bean.com/en/1.1/ch05s02.html
http://ricardo.strangevistas.net/setup-subversion-securely-on-centos.html
http://www.abbeyworkshop.com/howto/misc/svn01/
http://tomcat.apache.org/tomcat-5.5-doc
http://chrisschuld.com/2008/10/installing-sun-java-on-centos-5-2/
http://www.if-not-true-then-false.com/2010/02/howto-install-sun-java-jdk-jre-on-fedora-centos-red-hat/
http://tomcat.apache.org/tomcat-5.5-doc/config/index.html
http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html
https://support.eapps.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=218&nav=0,1
http://thewiki4opentech.org/index.php/How_to_install_JBoss_AS_in_CentOS_/_RedHat_/_Fedora
http://www.osmosislatina.com/jboss
http://onjava.com/pub/a/onjava/2004/02/25/jbossjdbc.html
http://www.jboss.org/file-access/default/members/jbossas/freezone/docs/Installation_Guide/beta500/html-
single/index.html#Pre_Requisites-Configuring_Your_Java_Environment
http://roneiv.wordpress.com/2008/01/03/jboss-tutorial-how-to-enable-ssl-https-on-jboss-as-well-as-other-
nice-to-know-configurations/
http://www.linux-magazine.es/issue/19/Tomcat.pdf
http://onjava.com/pub/a/onjava/2004/03/31/clustering.html?page=1
http://docs.jboss.org/jbossas/jboss4guide/r4/html/cluster.chapt.html
http://wiki.metawerx.net/wiki/HowDoIClusterJBoss
http://community.jboss.org/wiki/TwoClustersontheSameNetwork
http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html
http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf