NETWORK INFORMATION SYSTEM
Coloquio hecho por: Ciro Durán,
3 de abril de 2002.
Vuelta a la versión HTML
INTRODUCCIÓN
En el trabajo con redes de computadoras, existen algunas tareas que en redes pequeñas puede ser algo bastante sencillo, pero que se van complicando a medida que crece la red. Una de estas tareas es el mantener la información sobre los usuarios en las computadoras. Un usuario de una red debería poder conectarse a todas las máquinas (a las que esté autorizado a entrar, claro) de una forma transparente, y tener la capacidad de cambiar su clave sin más necesidad de ejecutar $passwd sin tener que cambiarse de máquina. Para esas necesidades se presta NIS, el Network Information System, una serie de herramientas que permiten realizar este tipo de tareas. Por supuesto, existen otras herramientas que tambien permiten hacer esto, como NIS+ y NYS, pero este coloquio sólo tratará sobre NIS.
QUÉ ES EXACTAMENTE NIS?
NIS son las siglas de Network Information System es una serie de herramientas desarrolladas por Sun Microsystems, la cual incluye un servidor, un cliente, y otras utilidades para manejar ambos. NIS está diseñado de tal forma que su administración es un proceso totalmente transparente al usuario, de modo que éste sólo tenga que usar sus servicios sin necesidad de enterarse que una cosa tal como "NIS" existe. No sólo se encarga de la información sobre los usuarios, sino también sobre otras cosas como información sobre hosts, protocolos, servicios, etc.
CÓMO ESTÁ FORMADO NIS?
NIS cumple lo prometido mediante la distribución de información desde un único servidor master hasta los clientes, que son los que piden la información cada vez que es solicitada.
Si la red es muy grande y se desea distribuir la carga para el master, tambien es opcional (aunque muy útil) instalar servidores esclavos, a los cuales los clientes también pueden acudir, pero cuya información la obtienen del servidor master. La información que se distribuye es a través de archivos llamados 'mapas'. Cabe destacar que los mapas sólo pueden ser editados en el servidor master y construidos allí, ya que las ediciones de un mapa en un servidor esclavo serían sobreescritas en la próxima transferencia de mapas desde el master.
En resumen, NIS posee una arquitectura cliente-servidor, en una red es mandatario tener un servidor master, el cual puede tener servidores esclavos, y a los cuales los clientes piden los mapas.
El administrador tiene el poder entonces de agrupar computadoras en conjuntos llamados "dominios", y cada dominio puede tener un conjunto de mapas diferentes, para servidor con propósitos distintos, y más importante, para clasificar los usuarios por las computadoras que puedan usar.
QUÉ ES EXACTAMENTE UN 'MAPA'?
Lo que se distribuye en realidad a los clientes son archivos de configuración como los de /etc, un mapa es entonces el archivo que contiene los datos a ser consultados. Sin embargo, los archivos consultados difieren de los archivos locales de configuración por un detalle: no se manejan en formato de texto normal y corriente. Para manejar de manera más eficiente los datos por lo general se convierten de texto plano al formato dbm, una base de datos que permite organizar todo en una tabla de hash, de modo que la búsqueda de algún dato sea mucho más rápida.
INSTALAR UN SERVER MASTER
Despues de haber elegido al servidor que va a ser el master, primero habria que poner el nombre del dominio, supongamos que se llama '.civ.net' siendo root se hace #domainnname '.civ.net'. Despues habria que estar seguro si ese va a ser el dominio cada vez que se bootea la maquina, en /etc/rc.local (donde casi siempre hay una linea que establece el nombre del dominio), y cambiar la linea de domainname al que elegimos.
Despues de esto, comienza la creacion de los futuros mapas, en realidad, los mapas tiene el mismo formato que los archivos que se pretenden manejar con NIS. Estos son:
/etc/passwd
/etc/group
/etc/bootparams
/etc/ethers
/etc/hosts
/etc/aliases
/etc/netgroup
/etc/netmasks
/etc/networks
/etc/protocols
/etc/rpc
/etc/services
Más adelante explicaremos estos mapas detalladamente, y como son manejados por NIS. Deberian ser revisados minuciosamente, para que el servidor tenga la informacion correcta de una vez. Sobre todo el hecho de que /etc/passwd no tenga la linea '+::0:0::' ya que esa solo debe pertenecer a los clientes, en el master solo crearia un usuario cuyo login es '+'.
Para inicializar entonces el server, hay que utilizar el comando '/usr/etc/yp/ypinit -m' el cual construye el subdirectorio '.civ.net' en '/var/yp', despues de esto, el comando crea los mapas administrativos necesarios y los pone en '/var/yp/.civ.net'. En primer lugar, creara el mapa ypservers, ypinit pedira el nombre de todos los servers esclavos que correran NIS y los pondra alli, no necesitan correr NIS para este momento, pero deberian estar corriendo a la hora de transferir los mapas.
Una vez que se termina todo este proceso, se deberian comenzar manualmente el demonio NIS escribiendo'# ypserv' o '# ypstart', o booteando la maquina. Para iniciar el server primario: ypstart (para pararlo, ypstop)
INSTALAR UN SERVIDOR ESCLAVO
Antes de instalar los esclavos, hay
que asegurarse de que el servidor master este corriendo (en este caso vamos
a llamar al servidor master 'maestro'). En los servers especificados en el mapa
ypservers, hay que ejecutar 'ypserv -s maestro'. El maestro y los esclavos deberian
estar en la misma red de IP, y
si no lo estan, hay que utilizar 'ypset maestro' para apuntar explicitamente
el esclavo hacia el maestro requerido. Si se quieren instalar servidores esclavo
mas tarde, se debe editar el mapa de ypservers y hacer makedbm para actualizar
el mapa. Tambien hay que asegurarse de que el esclavo tenga el
nombre de dominio del master haciendo 'domainname dominio'.
INSTALAR EL CLIENTE DE NIS
Para inicializar clientes de NIS se debe:
- Asegurarse de que los archivos locales tengan las entradas a NIS (los que requieran estas entradas). Como se explicará más adelante, hay algunos archivos que son reemplazados por los mapas, y otros que son extendidos por los mapas. Estos últimos necesitan tener ciertas entradas que son reconocidas por NIS.
- Asegurarse de que tenga el domainname correcto en el /etc/defaultdomain, para que ypbind sepa en que dominio buscar.
- Ejecutar el demonio ypbind que es el que busca un servidor de NIS (el primero disponible en su dominio) y pregunta por informacion requerida en los mapas de NIS.
El directorio de /var/yp tambien
debe existir en los clientes ya que ypbind lo usa para archivos temporales.
Por eso en los scripts /etc/rc# debe haber informacion para ejecutar
ypbind automaticamente cuando se reinicia la maquina si existe este directorio.
EL MANEJO DE MAPAS
Como hemos dicho anteriormente, hay algunos archivos locales que son reemplazados por NIS y otros que son extendidos con los mapas de NIS.
Falta falta falta
LA SEGURIDAD
En NIS, pueden existir 4 puntos problemas que pueden poner en jaque la seguridad de la red:
1) La gente puede obtener el mapa de passwords (ypx) desde cualquier máquina y crackearla remotamente usando herramientas como 'crack'.
2) Inutiliza algunas medidas de seguridad de SATAN y otros programas. Satan es el Security Administrator Tool for Analyzing Networks, un programa que analiza los hosts remotos a través de varios servicios, y de allí consigue información de malas configuraciones, fallas de seguridad, etc.
3) Usuarios locales pueden utilizar ypcat para obtener los passwords encriptados y crackearlos.
4) Personas remotas pueden obtener cualquier mapa de un dominio NIS, algunos de los cuales pueden tener información confidencial.
Pero para eso también existen algunas defensas, algunas de las cuales vamos a explicar a continuación:
Ajustar la máquina para que existan los Shadow Passwords: a partir de SunOS 4, ya fue posible (LDC utiliza SunOS 5.7 - 5.8) utilizar Shadow Password muy al estilo del manejo de passwords locales: tenemos un archivo con sólo los datos de los usuarios, y en otro archivo dentro de un directorio seguro colocamos la información de los passwords, he aquí los pasos para pasar los datos:
1.En primer lugar, y como siempre, antes de hacer nada, hacer backup de los mapas del master de NIS, junto con los esclavos y clientes, asi tambien como hacer backup del Makefile.
2.Crear en /var/yp el directorio 'security', cambiando el dueño a root con permisos 700. Tomar todos los passwords del mapa passwd y colocarlos en el mapa passwd.adjunt en el directorio /var/yp/security. En el campo donde estaban los mapas, se colocan dos numerales (#) seguido del nombre de usuario, por ejemplo:
ciro:##ciro:1256:100:LDC - Ciro Duran:/home/ciro:/bin/bash
El formato que tiene el mapa passwd.adjunct es:
nombreusuario:password::::: (Cinco :)
Nunca se coloca nada entre esos :. Si tenemos un mapa passwd muy grande y tenemos muy poco tiempo o paciencia como para hacer eso, al final de esta página hay un enlace para un script que permite hacer todo eso automaticamente.
Por supuesto, en este punto hay que chequear que todo esté bien, y tampoco está de más chequear por usuarios que no tengan password para colocarles un asterisco * en el archivo passwd.adjunct.
3.Es necesario ahora crear un directorio
/etc/security en cada maquina, y colocar el password de root (y otros passwords
locales) desde /etc/passwd hasta /etc/security/passwd.adjunct, de la misma manera
que lo anterior. Ahora, si se quiere tener un mismo password de root para todas
las maquinas, se llevaria tambien el usuario root y su password al mapa del
servidor master. A este nuevo mapa tambien hay que añadirle la linea
+::::::, la cual, como ya hemos explicado, es el comodín para que NIS
extienda ese archivo con la copia del master.
4.Añadir las siguientes dos lineas al mapa passwd de NIS y al /etc/passwd local de cada máquina:
AUpwdauthd:##AUpwdauthd:10:10::/lost+found:/bin/true
AUyppasswdd:##AUyppasswdd:11:10::/lost+found:/bin/true
En realidad, /lost+found puede ser cualquier directorio local.
5.Añadir las siguientes dos lineas al mapa passwd.adjunct de NIS y a cada /etc/security/passwd.adjunct local de cada maquina:
AUpwdauthd:*:::::
AUyppasswdd:*:::::
6.Asegurarse que el archivo rc.local tenga las siguientes lineas descomentadas. Este demonio provee una manera para los clientes de verificar su password sin pasar el mismo en texto puro y simple, así el password se envia encriptado.
#
# start up authentication daemon if present and if adjunct file exists
#
if [ -f /usr/etc/rpc.pwdauthd -a -f /etc/security/passwd.adjunct ]; then
rpc.pwdauthd & echo -n ' pwdauthd'
fi
7.Hay que asegurarse que Makefile tambien incluya la construccion del mapa passwd.adjunct y que lo empuje a las otras maquinas, añadiendo estas lineas.
c2secure:
-@if [ -f $(DIR)/security/passwd.adjunct ]; then \
if [ ! $(NOPUSH) ]; then $(MAKE) $(MFLAGS) -k \
passwd.adjunct.time group.adjunct.time; \
else $(MAKE) $(MFLAGS) -k NOPUSH=$(NOPUSH) \
passwd.adjunct.time group.adjunct.time; \
fi; \
fi
8.Es necesario asegurarse que el demonio rpc.yppasswdd (el encargado de cambiar los passwords y de actualizar los mapas) corra en el master de NIS correctamente. He aquí un ejemplo:
if [ -f /usr/etc/rpc.yppasswdd ]; then
rpc.yppasswdd /var/yp/dbdir/passwd /var/yp/dbdir/security/passwd.adjunct -nosingle
-noshell -nogecos -m passwd.adjunct > /dev/console
echo -n ' yppasswdd'
fi
En realidad, las opciones -noshell y -nogecos evitan que los usuarios puedan cambiar su shell y su nombre, pero no son mandatarios.
9.Finalmente, hay que correr los
mapas. Hay que correr make en el master, lo que actualiza el mapa y lo empuja,
si se tienen esclavos puede fallar porque los esclavos no conocen el mapa nuevo.
Habria que cancelar el proceso y empujar el mapa manualmente o hacer ypinit
-s en cada master para reinicializar y sincronizarse con el master.
10.Probarlo. Si no funciona, lo mejor que se puede hacer es volver a lo viejo usando los backups, los cuales se hicieron, ¿no?.
RESTRINGIENDO EL ACCESO
Es buena idea ir restringiendo el
acceso al servidor NIS para que solo los usuarios administrativos lo utilicen.
No sería bueno que los archivos y mapas de NIS estén protegidos
mientras que los archivos de texto plano no lo estén.
NIS EN EL LDC
Ésta es la estructura de los servidores de NIS en el LDC. (Soon!)
En cuanto a los potenciales problemas de seguridad que pudimos observar anteriormente, se puede ver que algunas de las medidas ya fueron tomadas, en harkonnen ya existe un directorio /var/yp/security donde están los mapas de passwords asegurados, y es un directorio donde sólo puede entrar el root. Sin embargo, no se consiguió en ningún lado el demonio rpc.pwdauthd encargado de pasar los passwords de forma segura, quizás se autentifique de otra manera. (Nota mental: Conseguir esto)
En el mismo host, el comando ypserv se encuentra en /usr/lib/netsvc/yp/ypserv, para los interesados, y en general, se encuentran todos los comandos para manejar NIS.
Para mayor comodidad, se ha hecho tambien un archivo llamado nicknames el cual contiene nombres cortos de los mapas de NIS que se utilizan frecuentemente.
COMANDOS Y DEMONIOS
El siguiente grupo de archivos son de uso general, casi siempre se utilizan para scripts y cosas por el estilo.
- ypwhich: Busca cual es el servidor
de NIS que el host esta usando, sea master o esclavo.
- ypcat: Muestra el mapa de NIS que se le especifique. Se puede especificar
por su nombre o por su alias.
- ypmatch: Busca algun match dentro de los mapas de NIS. Se podría comparar
con el 'grep' nuestro de cada día.
- yppasswd: Cambia el password del usuario con el que estemos ejecutando el
comando en el mapa de passwords de NIS.
Este, en cambio, por lo general sólo se utiliza para hacer cambios en el servidor, y otros son usados solamente por el programa.
- ypserv: el demonio encargado de
tramitar las peticiones de los clientes.
- ypbind: demonio encargado de localizar un servidor NIS, master o esclavo.
- domainname: Comando con el
cual se le da un nombre al dominio de la computadora, sirve para ir agrupando
las computadoras y darles una configuración única.
- ypxfr: Comando que se debe correr en cada servidor esclavo para importar los
mapas.
- ypxfrd: Corre en el Master para responder las peticiones de ypxfr.
- yppush: Encargado de transferir los mapas a un servidor esclavo.
- makedbm: Construye un mapa dbm de un archivo de texto. En realidad es un script,
por lo tanto construye todos los mapas. Lo que es el formato dbm ya fue explicado
anteriormente.
- ypinit: Con este comando determinamos si el servidor será un master
o un esclavo. También está encargado de inicializar los archivos
y directorios para correr el demonio ypserv.
- ypset: Hace que ypbind se conecte a un servidor en particular, suele usarse
cuando el cliente y el master están en redes de IPs distintas.
SITIOS PARA AVERIGUAR MAS SOBRE NIS
- Securing NIS (Con scripts de automatizacion)- http://www.eng.auburn.edu/users/doug/nis.html
- The Linux NIS(YP)-NYS-NIS+ HOWTO - http://www.ibiblio.org/mdw/HOWTO/NIS-HOWTO/
- The Network Administrator´s Guide - http://www.linuxdoc.org/LDP/nag/nag.html