CONCLUSIONES
CAPÍTULO 3. INSTALACIÓN
DEL INTRANET NAFIN
ÍNDICE
El autor: David
Hernández
CAPÍTULO 4
ADMINISTRACIÓN DEL INTRANET NAFIN
4.1 Seguridad
"The project will not aim... to use sophisticated
network authorization sytems. Data will be either readable by the world
(literally), or will be readable only on one file system, in wich case the file
system's protection system will be used for privacy. All network traffic will be
public."
- Fragmento de la proposición inicial del Web en CERN (Lincoln
D. Stein, How to Set Up and Mantain a World Web Site, pág. 131).
Cuando el Web fue creado, se pensaba más en un acceso universal que en la
seguridad, así lo demuestra la cita anterior. "El proyecto no tenderá... a usar
sofisticados sistemas de autorización de red. Los datos serán legibles para todo
el mundo (literalmente), o serán legibles en un solo sistema de archivos, en tan
caso el sistema de protección del sistema de archivos será usado para privacía.
Todo el tráfico de la red será público."
Pero al hacer público un sitio Web se le expone a ciertos riesgos, por
ejemplo:
- Usuarios que navegan por áreas con documentos de acceso restringido, o
lugares como los archivos de contraseñas y directorios personales.
- Usuarios locales (en un sistema multiusuario como Unix) que "sin querer"
modifican los documentos del Web, scripts o archivos de configuración.
- Crackers remotos que explotan agujeros en la seguridad del servidor o
scripts ejecutables, casi siempre como un preludio para después entrar en el
sistema.
- En el caso de Internet, otra amenaza son los cazadores de paquetes de
datos que contengan información como contraseñas o números de tarjetas de
crédito.
En capítulos anteriores se han visto algunas de las bondades,
que en cuestión de seguridad que ofrece el servidor NCSA Httpd.
Para el
desarrollo del Intranet Nafin, el problema específico de seguridad se resume en
los siguientes puntos:
- Restringir el uso del servidor. Controlar quienes pueden navegar y negar
el acceso a los demás.
- Evitar que usuarios locales (excepto los administradores) consulten o
hagan modificaciones a los documentos, programas o archivos de configuración.
- Restricciones de acceso a ciertos directorios (solo determinados usuarios
puedan consultar esas áreas).
A continuación mostraré fueron empleadas
algunas características del servidor, más algunas del sistema operativo para
lograr una combinación de seguridad que se ajuste a dichos puntos.
4.1.1 Restringir el uso del servidor
El archivo access.conf contiene,
entre otras, las instrucciones Directory y Limit.
Con Directory se abre un
área definiendo el directorio en que se desee aplicar la instrucción Limit.
Se editó el archivo: /usr/local/etc/httpd/conf >vi access.conf
Y fue modificada la
sección donde se encontraba la instrucción Directory. Se encontraba como sigue: <Directory /oraman/nodoinfo>
<Limit GET>
order allow,deny
allow from all
</Limit>
</Directory>
"GET" quiere decir que la instrucción va a tener efecto
cuando el cliente obtenga documentos o realice scripts.
"order" es el orden
en que va a interpretar las subsecuentes instrucciones, como estaba, primero iba
a ejecutar todas las que permitan y después todas las que nieguen, esto es
importante pues se aceptan contraórdenes. Por ejemplo, negar a un grupo y
después permitir a ciertos usuarios del mismo grupo es lógico, si primero se da
acceso y después se niega, la negación incluye a quienes se dio acceso
anteriormente.
"allow from all" permite de todos, frente a la instrucción
"allow from" puede haber direcciones específicas, nombres de dominio, y puede
haber varias líneas con instrucciones "allow from".
Después de las
modificaciones quedó así (con más líneas "allow from", por supuesto): <Directory /oraman/nodoinfo>
<Limit GET POST>
order deny,allow
deny from all
allow from 130.0.1.54
allow from 130.0.1.58
</Limit>
</Directory>
"Limit GET POST" fue usado para para referirse a los dos
métodos de acceso más populares, "POST" es para los clientes que ponen scripts.
El orden escogido fue negar y después permitir, ya que se restringió a la
mayoría, si fuese a restringir a una minoría se haría al contrario, primero se
le da acceso a todo mundo y se discrimina a unos cuantos.
Se usó "deny from all", negando el acceso a todo mundo, y después con "allow
from" se incluyen a los amigos.
Se cerró el área Limit dentro del área
Directory con:
</Limit>
</Directory>
4.1.2 Restricciones de acceso a ciertos directorios.
Posteriormente se
añadió otro grupo con líneas similares para otro directorio dentro del arbol
abarcado previamente, en este caso solo tres personas fueron incluidas en líneas
"allow from". De esta forma se limita un área como de uso exclusivo para estas
tres.
4.1.3 Evitar que usuarios locales tengan acceso a los archivos.
Se
modificaron los derechos de archivos y directorios, para que solo un usuario los
utilice (dhernand), anteriormente era root, pero si se restringe a que solo root
consulte los documentos se tendría que dar esa identidad a los procesos que se
lanzan para los usuarios que navegan, así que se eligió dhernand como la
identidad de los procesos lanzados en las consultas para los navegadores.
Para ello se editó la línea User del archivo httpd.conf para que quede así: User dhernand
Group #-1
Para esto el servidor standalone debe de correrse como root. El
demonio original corre como root, pero los procesos que corran al haber
peticiones van a correr como el usuario dhernand. En cuanto al grupo, definido
en la siguiente línea, quedó sin restricciones.
Por supuesto, fueron
modificados los principales directorios de documentos, del servidor y de los
programas para que solo el usuario dhernand tenga todos los derechos y
suprimidos los derechos de "group" y "others".
4.2 Mantenimiento
4.2.1 Estándares
El asunto de los estándares es uno de los que tienen
más influencia en la industria informática.
A fin de cuentas el estándar
como camino a seguir, nos puede guiar zigzagueando a una pesadilla, o puede ser
un camino recto hacia cada vez mejores resultados.
Estándares en diseño HTML
Como en toda publicación, se
puede aplicar creatividad al diseño de páginas Web, pero al mismo tiempo hay que
estar conscientes de la funcionalidad.
Algunas observaciones
básicas en pro de la eficiencia:
- Mapear el sitio en cada página.
Aunque el sitio esté perfectamente
organizado, llega un momento en que el usuario no encuentra la puerta,
entonces es bueno ofrecerle una brújula.
En Internet, cuando uno busca
información se llega directamente a la página interesante, pero si deseo ver
el tema desde páginas atrás, o ver el lugar desde la página principal, es
necesaria una liga que me lleve al inicio del tema en esa máquina, o a la
página de bienvenida.
En este caso, todas las páginas hechas en el
intranet tienen un pie de página, éste comprende cuatro iconos con letreros
que son más o menos útiles:
1.- Página principal. Conduce a la página de
bienvenida.
2.- Búsqueda de información. Máquina de búsqueda.
3.-
Estadísticas de uso. Esto es para satisfacer curiosidad técnica solamente.
(Vea "Estadísticas de uso" en la página 61).
4.- Comentarios. Haciendo
clic en éste el navegador proporciona una forma para mandar correo al "Web
Master", muy importante si se quiere retroalimentación.
Es importante que
este pie de página es fácil de mantener, se utilizó una instrucción de
inclusión que viene con NCSA httpd y permite que un archivo se inserte en el
punto deseado. Así solo actualizo el archivo del pie de página y tiene efecto
en todas las páginas con el "include".
Adicionalmente el mismo archivo
tiene los créditos y otra instrucción para mostrar la fecha de última
actualización.
- Cuidar la consistencia de diseño.
- Usar imágenes pequeñas y discretas. Es un exceso común incluir muchas
imágenes y grandes como la pantalla.
Si el diseño las pruebas se llevan a
cabo en una red local y, se reciben más de 50Kb por segundo y las imágenes son
vistas en cuestión de segundos. Pero en la vida real, actualmente la mayoría
de la gente tiene modems de 14,400 y 28,800 bps, ellos tardarán 50 o más veces
para ver las imágenes.
En los foros de discusión de Usenet un usuario
(curiosamente era abogado) preguntó como podía hacer que su página personal
tuviese una forma de declaración de impuestos en tamaño real como fondo del
texto.
"NO you DON'T!" fue la respuesta inmediata de los participantes en
esa mesa redonda, después le explicaban lo que tardaría en visualizarse su
página, cinco, diez o más minutos.
Las imágenes pueden utilizarse
inteligentemente para proporcionar información o guiar al usuario, a veces
como decoración, pero hay que cuidar el desempeño.
En el desarrollo del
Intranet Nafin se utilizaron los formatos jpg y gif, la misma imagen fue
convertida a ambos formatos y elegida la de menor tamaño siempre que su
calidad sea aceptable.
4.2.2 Las páginas del www en modo local.
Uno de los servicios del
intranet es tener una copia de páginas del WWW para satisfacer la curiosidad de
todos los interesados en determinado tema. Esto es un ahorro de tiempo de
conexión a Internet, ya que solo se consulta una vez y se copia en el mismo
formato. Estas páginas se depositan en un lugar común donde están disponibles a
todo el intranet.
Pero hay una amenaza, la información copiada es mucha, (llegó a representar
el 50% del contenido del intranet), y podría incrementarse, además, en un
momento dado llega a ser obsoleta, o simplemente, ya no es interesante o
necesaria.
Como precaución se colocó una fecha de caducidad en la página principal de
las páginas del WWW en el intranet, hoy 28 de mayo es colocada la liga para
documentos relativos a Java y Hot Java, y entre paréntesis: cad. 28/nov/96. Lo
mismo a las demás.
Al llegar a su fecha de caducidad el directorio será borrado. Se optó por
ésto en vez de actualizarlo, ya que la actualización dejaría archivos obsoletos
huérfanos, es decir sin ligas a la información actualizada.
Seis meses de vida para cada tema, el criterio fue la velocidad con que los
usuarios interesados la asimilarían y la que le toma al documento ser obsoleto.
4.2.3 Respaldos
La frecuencia establecida para los respaldos es: diaria
para la información, e inmediatamente después de cada actualización para el
servidor y la programación.
Respaldo de la información
El esquema de respaldo para los
subdirectorios que contienen la información se basa en una copia idéntica hacia
otro servidor, creando un arbol de directorios igual bajo un directorio
personal.
La primera vez que se realizó simplemente fue una copia total,
esto es muy sencillo:
# rcp -r /oraman/nodoinfo tmpr04:/usr/users/dhernand/oraman
Se utilizó
el comando remote file copy incluyendo subdirectorios para mandar todo al
servidor tmpr04, pero esto es solo la primera vez, después no tendrá sentido
copiar archivos que no han cambiado, además, con 40 MB de archivos se tarda unos
9 minutos.
Para los respaldos diarios el sistema fue copiar solo los
archivos que han cambiado hasta sus directorios correspondientes en tmpr04.
Ésto se logró con el script siguiente, los comentarios incluidos lo
explican: # Primero un prompt para pedir la fecha que buscamos respaldar
echo "Escribe la fecha (Mmm dd) de los archivos a respaldar"
# Capturo en la variable fecha
read fecha
# Me interesa saber a que hora comencé el respaldo,
# así que la escribo en el archivo tiempo.
date > tiempo
# La siguiente línea es algo larga
ls -lR /oraman/nodoinfo |grep "$fecha" | grep -v 'drwx' |cut -c46-79 |awk '{print "find /oraman/nodoinfo -name " $1 " -print"}' > respa_buscar
# Pido el directorio (ls) en formato amplio incluyendo los subdirectorios (-lR)
# a partir del directorio donde está la información (/oraman/nodoinfo).
# Direcciono la salida hacia el comando grep para buscar la expresión
# capturada en la variable $fecha sobre cada línea.
# Las líneas que coinciden con la fecha son direccionadas a otro grep para
# buscar entre ellas las que no sean directorios.
# Direcciono hacia el comando cut para recortar el rango de columnas que
# contiene el nombre del archivo en cada línea.
# Lo direcciono al lenguaje awk para que coloque la instrucción find a partir
# del directorio que importa, buscando el nombre de archivo que el
# comando anterior le envió y pidiendo que imprima la ruta cuando lo encuentre,
# (el objeto de la búsqueda es tener la ruta).
# Todo eso es direccionado al archivo respa_buscar.
chmod 700 respa_buscar
# Cambio el modo del archivo para que yo lo pueda leer, escribir y ejecutar.
# A continuación lo muestro para que el usuario tenga idea de qué va a pasar.
cat respa_buscar
# Lo ejecuto, me entrega los archivos con su ruta, y le añado el comando rcp
# para hacer la copia remota del archivo hasta tmpr04 en la misma ruta, pero
# solo escribo las instrucciones en el archivo respa_copiar
respa_buscar | awk '{print "rcp " $1 " tmpr04:/usr/users/dhernand" $1}' > respa_copiar
# Cambio el modo del archivo respa_copiar como hice con respa_buscar.
chmod 700 respa_copiar
# Lo ejecuto, entonces se realiza la copia.
respa_copiar
# Escribo la hora, entre otras cosas en el archivo tiempo.
date >> tiempo
# Lo leo para ver cuanto se tardó. Es todo.
cat tiempo
Respaldo de HTTPd Y glimpseHTTPD
Estando en el
directorio /usr/local/etc
El directorio httpd fue empacado y comprimido en el
archivo http.tar.Z # tar -cvf http.tar httpd
# compress http.tar
Se transfirió a una PC, al hacerlo el nombre del
archivo cambió a http.tar, entonces, desde el prompt se utilizó la utilería pkzip (Pkware Inc., info@pkkware.com) para archivarlo sin
compresión en dos disquetes previamente formateados y vacíos. pkzip -e0& a:http-tar.z http.tar
Después de que escribió en
los dos discos se incluyó el archivo PKUNZIP.EXE en el segundo.
Los
disquetes fueron protegidos contra escritura y etiquetados "Respaldo HTTPd y
GlimpseHTTP, Disco 1 de 2", y 2 de 2, respectivamente.
Respaldo de Glimpse
Este programa no cambia, por lo tanto
no requiere más de un respaldo.
Desde /usr/local se empacó y comprimió el
directorio creado originalmente al obtener Glimpse de Internet:
# tar -cvf glimpse.tar glimpse-3.5.bin.dec-ultrix-4-3
# compress glimpse.tar
Se transfirió usando FTP a una PC, al hacerlo el
nombre del archivo cambió a glimpse.tar, entonces, desde el prompt se utilizó
pkzip para archivarlo sin compresión en dos disquetes previamente formateados y
vacíos. pkzip -e0& a:glimpse.z glimpse.tar
Después de que escribió
en los dos discos se incluyó el archivo PKUNZIP.EXE en el segundo.
Los
disquetes fueron protegidos contra escritura y etiquetados "Respaldo Glimpse,
Disco 1 de 2", y 2 de 2, respectivamente.
4.2.4 Instrucciones para instalar desde el respaldo
HTTPd Y
glimpseHTTPD
Introducir el disco etiquetado "Respaldo HTTPd y
GlimpseHTTP disco 2 de 2" en el drive A:
Ejecutar desde el prompt de MS-DOS:
A:> pkunzip http.z c:\
Al ejecutarse, pkunzip pedirá el
primer disco del set de respaldo, introduzca el etiquetado "Respaldo HTTPd y
GlimpseHTTP disco 1 de 2" y presione Enter. Cuando pida el segundo inserte el
"... Disco 2 de 2" y presione Enter.
Esto extraerá el archivo http-tar.z en
c:\. Utilicé FTP binario para transferirlo al intranet en el directorio
/usr/local/etc.
Una vez ahí renómbrelo, descomprímalo, extraiga los archivos
y borre el empacado. mv http-tar.z http.tar.Z
uncompress http.tar.Z
tar -xvf http.tar
rm http.tar
Consulte la sección correspondiente para arrancar del servidor
HTTP.
GlimpseHTTP utiliza Glimpse, si es necesario consulte la sección sobre
primera instalación de Glimpse (página nn [entre paréntesis para el texto
impreso allí habrá texto en negrillas o título, link para Web versión] ) como
instalarlo desde el respaldo viene a continuación.
Glimpse
Introducir el disco etiquetado "Respaldo Glimpse disco 2
de 2" en el drive A:
ejecutar desde el prompt de MS-DOS:
A:> pkunzip glimpse.z c:\
Al ejecutarse, pkunzip pedirá el
primer disco del set de respaldo, introduzca el etiquetado "Respaldo Glimpse
disco 1 de 2" y presione Enter. Cuando pida el segundo inserte el "... Disco 2
de 2" y presione Enter.
Esto extraerá el archivo glimpse.tar en c:\.
Utilice FTP binario para transferirlo al intranet en el directorio
/usr/local.
Una vez ahí renómbrelo, descomprimalo, extraiga los archivos y
borre el empacado. # mv glimpse.tar glimpse.tar.Z
# uncompress glimpse.tar.Z
# tar -xvf glimpse.tar
# rm glimpse.tar
Consulte la sección correspondiente sobre uso de Glimpse.
4.2.5 Actualizar índices de búsqueda
Los índices de búsqueda se
actualizan el día primero de cada mes, o antes si se elimina o agrega una
cantidad relevante de información que sea necesario tener disponible.
Para
esto solamente se corre el script ghreindex y Glimpse vuelve a indexar con los
mismos parámetros que cuando se instaló.
4.2.6 Actualizar estadísticas de uso
Esta taréa se realiza cada mes.
El procedimiento con el que se obtienen los datos y son colocados en el
intranet es el siguiente:
- Pasando el mes que se analizará, el archivo
usr/local/etc/httpd/logs/access_log se copia al directorio
usr/local/etc/httpd/logs/aux.
- Eliminar del archivo usr/local/etc/httpd/logs/access_log las líneas que no
corresponden al mes en cuestión.
- Correr el script que obtiene la información y genera la página
wwwstat.htm.
- Renombrar wwwstat.htm a stat96nn.htm donde nn es el número del mes.
- En la página estaduso.htm hacer la liga a stat96nn.htm, para consultar
detalles de el mes en cuestión.
- Copiar de usr/local/etc/httpd/logs/aux el archivo access_log al directorio
usr/local/etc/httpd/logs, eliminar las líneas de los meses anteriores.
- Correr nuevamente el script.
- Obtener los datos de la página del intranet sobre bytes transmitidos y
archivos transmitidos, capturarlos en un programa que genera gráficas y salve
las imágenes como gif.
Recortar los archivos, 600x320x256 está bien para
cada gráfica, el fondo original es blanco, así se hace un gif con partes transparentes para que
se vea el fondo de la página a través de la gráfica y se colocan los archivos
sobreescribiendo a los del mes pasado.
CONCLUSIONES
CAPÍTULO 3. INSTALACIÓN
DEL INTRANET NAFIN
ÍNDICE
El autor: David
Hernández