Upload
dcontrerasr7509
View
1.358
Download
3
Embed Size (px)
Citation preview
MANUAL DE INTRODUCCIÓN , INSTALACIÓN Y CONFIGURACIÓN DE UN SERVIDOR NFS EN
DEBIAN
Existen varias formas y/o servicios de compartir archivos a través de la red.
Entre ellos hallamos:
En Internet/LAN FTP
Con otros Linux NFS
Con equipos Windows SMB
Para empezar a hablar de NFS hablemos un poco sobre los Sistemas distribuidos.
Un sistema distribuido es un conjunto de hosts conectados en red que dan la sensación de
ser una sola computadora. Este tipo de sistema brinda ventajas tales como: compartición de
recursos, la concurrencia, alta escalabilidad, y tolerancia a fallos.
A pesar que agregar complejidad al software y disminuir los niveles de seguridad, los
sistemas de procesamiento distribuidos brindan una buena relación precio-desempeño y
pueden aumentar su tamaño de manera gradual al aumentar la carga de trabajo.
NFSBasado en el protocolo RPC (Remote Procedure Call), sistema de fichero de red
creado originalmente por Sun Mycrosystems en los años 1980’s para compartir archivos
sobre sistemas Unix.
NFS es una implementación Cliente/Servidor que transparentemente dispone volúmenes
remotos en un cliente local. Usa varios demonios y archivos de configuración para el hecho
de compartir de archivos.
Por defecto, este proceso es llevado a cabo sin ningún tipo de autenticación por separado, lo
que hace a NFS un riesgo en la seguridad.
Cómo funciona NFS?
NFS corre sobre el protocolo UDP, el cual es no orientado a la conexión ya que no requiere
conocimiento de la entrega de paquetes. NFS intenta hacer esto para obligar un
reconocimiento da cada comando que se envía. Si el reconocimiento ocurre, continua
enviando datos. Sino recibe en una determinada cantidad de tiempo, entonces los datos son
retransmitidos.
NFS envuelve no sólo el protocolo NFS, sino también el protocolo MOUNT. Estos
protocolos son implementados por NFS como demonios: rpc.mountd, nfsd y portmap en el
servidor.
Mountd le dice a nfsd que sistemas de ficheros están disponibles para ser montados en
los equipos locales.
Portmap maneja los servicos RPC.
Nfsd corre en el servidor atendiendo las peticiones NFS de los clientes (manipulación de
archivos). Pueden levantarse más de un demonio para atender eficientemente las llamadas
(8 es el estándar) #nfd 8
En el cliente final, nfs es empleado a través de los demonios biod, rpc.statd y rpc.lockd.
Biod corre en el servidor manejando las opeaciones de entrada y salida en un sistemas
NFS. Al igual que en el servidor, pueden levantarse más de un demonio; 8 es el estándar.
#biod 8
rpc.lockd para no acceder al mismo archivo al mismo tiempo, los clientes bloquean los
archivos que usan y los servidores requiera desbloquearlos.
Rpc.statd demonio que realiza el monitoreo del estado de la red. Es llamado por el
rpc.lockd para monitorear los servicios. Corre tanto en clientes como en servidores.
Referencia http://www.riuady.uady.mx/riuady/cursos/linux_serviciostxt/manual/cap2/nfs.html
Los archivos de Key incluyen el archivo “/etc/exports”, el cual define que compartidos
están disponibles y a quien, y el archivo “/etc/fstab”, el cual mantiene la lista de sistemas
de ficheros montados para el cliente.
NFS, es útil y fácil de usar, sin embargo se apoda "No File Security". NFS no utiliza un
sistema de contraseñas como el SAMBA, solo una lista de control de acceso determinada
por direcciones IP o nombres.
Es por esto que es importante entender que el servidor NFS puede ser un verdadero e
inmenso agujero de seguridad si este no es configurado apropiadamente e implementado
detrás de un firewall.
El protocolo NFS se implementa con arquitectura cliente-servidor, por lo que necesita:
un servidor NFS en la máquina remota, la que exporta el directorio.
un cliente NFS en la máquina local, la que monta el directorio.
NFS TRABAJA SOBRE RPC
El servidor NFS trabaja sobre RPC (Remote Procedure Call), protocolo que utiliza como
capa de transporte UDP.
Los servidores que trabajan sobre RPC (como NFS), no tienen puertos asignados
oficialmente, por lo que cuando arrancan, contactan con el daemon portmap y le
informan qué puerto usan.
Cuando un cliente quiere contactar con un servidor RPC, contacta primero con
portmap (que escucha en el puerto 111 TCP) y le pregunta cuál es el puerto
correspondiente al servidor en cuestión. Una vez que conoce ese dato, el cliente ya
puede contactar directamente con el servidor.
RPC RPC es una tecnología, tradicionalmente empleada en ambiente UNIX, que permite
el desarrollo de sistemas de procesamiento distribuido. Con el advenimiento de
implementaciones para plataformas Windows, así como para Java, es posible pensar en
RPC como un mecanismo de integración de software heterogéneo.
Una llamada a un procedimiento remoto el sistema local invoca, a través de la red, a una
función alojada en otro sistema.
Según el modelo OSI, RPC cae en algún lado entre las capas de transporte y aplicación.
Usualmente es considerada parte de la capa de presentación, ya que RPC le oculta a la capa
de aplicación los detalles de la red, que incluye una especificación de algún formato
estándar para el intercambio de argumentos y resultados entre cliente-servidor.
Algunas implementaciones de RPC serían:
ONC-RPC (Open Network Computing) desarrollada por Sun Mycrosystems,
distribuida en casi todas las distros UNIX.
DCE (Distributed Computing Enviroment) desarrollado por Microsoft y definida
por la Open Software Foundation. Está incluida en los SO Windows.
Un ejemplo de esta tecnología sería el NFS, que se haya disponible en la mayoría de las
plataformas UNIX.
Ok, empecemos ahora si implementando nuestro servidor NFS.
Algunos detalles primero.
Si deseamos ver los servicios RPC que están activos y su respectivo puerto, haremos lo siguiente:
#rpcinfo –p
Instalaremos los paquetes necesarios para esta prueba.
Pero antes deberé editar mi lista de repositorios para lograr mi cometido de conseguir los
paquetes.
Para mi caso especifico estoy usando una máquina de Debian 5.0 Lenny, por lo que
#nano /etc/apt/sources.list
/*esta es la línea que agrego a mi lista*/
deb http://http.us.debian.org/debian lenny main contrib non-free
/*Salvo los cambio y actualize*/
#apt-get update
Ahora sí instalo los paquetes:
#apt-get install portmap /*usualmente viene con la distro instalado*/
/*El servicio “portmap” es un demonio de asignación de puertos dinámico para servicios
RPC tales como NIS y NFS. Tiene mecanismos de autenticación débiles y la habilidad de asignar un
amplio rango de puertos para los servicios que controla. Por esto es difícil de controlar.
/****Al asegurar “portmap” solamente afecta a las implementaciones de NFSv2 y NFSv3, ya que
NFSv4 ya no lo requiere. Para usar un servidor NFSv2 o NFSv3, se requiere usar portmap.
Hay formas de proteger portmap, ya sea por TCP Wrappers o IPTables
Url protección portmap http://web.mit.edu/rhel-doc/OldFiles/4/RH-DOCS/rhel-sg-es-4/s1-
server-port.html ****/
#apt-get install unfs3 /*usualmente viene con la distro instalado*/
/*UNFS3 es una implementación de usuario de la especificación del servidor NFSv3.
Provee un demonio para los protocolos MOUNT y NFS, los cuales son usados por clientes NFS para
acceder a archivos en el servidor.
Los principales objetivos de UNFS3 serían:
Corrección se aplica la semántica de NFSv3 muy estrechamente.
Portabilidad debería funcionar sobre cualquier sistema operativo UNIX, ya sea Linux
y/o SunOS /Solaris.
Integridad apoyar todos los aspectos de la especificación NFSv3, dentro de los
límites posibles.
Rendimientodebe ser lo más rápido posible. */
Url UNFS3 http://unfs3.sourceforge.net/
#apt-get install nfs-user-server /*Contiene todos los paquetes necesarios para hacer que
tu máquina Linux actue como un servidor NFS, siendo un demonio NFS (rpc.nfsd), un
demonio mount (rpc.mountd). Corre enteramente en el espacio del usuario, es más lento
que otras implementaciones pero es más presentable y fácil de depurar que el “nfs-kernel-
server”.*/
Url nfs-user-server http://packages.ubuntu.com/dapper/nfs-user-server
#apt-get install nfs-kernel-server /*Se usa usualmente si poseemos un kernel reciente
(2.2.13 o superior) y si desea usar el servidor NFS en modo kernel*/
url nfs-kernel-server http://linux.about.com/cs/linux101/g/nfskernelserver.htm
Cuando estemos instalando este último nos pedirá si deseamos “mantener la versión local
actualmente instalada” refiriéndose al fichero de “exports” que es donde definiremos lo que se
desea compartir.
El servidor NFS tiene varios demonios, siendo los principales “nfsd, rpc.mountd, rpc.statd, y lockd”
Miremos los servicios RPC activos mediante la instalación del NFS.
#rpcinfo –p
Muy bien, ahora debemos decidir que deseamos compartir. Una vez decidido esto, que para mi
caso será un directorio alojado en /mnt llamado “nfstest” que contendrá archivos de prueba nada
más.
Para esto deberemos editar el fichero “/etc/exports”
#nano /etc/exports
/*añadiendo al final del archivo las siguientes líneas*/
/mnt/nfstest
192.168.0.0/255.255.255.0(rw,sync,no_subtree_check,no_root_squash)
/****Definimos con esto
###192.168.0.0/255.255.255.0 a quien deseamos compartir los archives, en este
caso será el rango de red clase C con su respectiva máscara.
###rwpermiso de lecto-escritura; si usamos “ro” será de sólo lectura.
###sync el servidor será síncrono en las peticiones que lo hará más lento pero
más seguro, además NFs notifica al usuario los cambios (escritura) en los archivos cuando se
hayan ejecutado; si deseamos que sea más rápido podríamos usar “async” asíncrona pero ,más
insegura, además no espera la confirmación por parte del servidor para comunicar al usuario los
cambios. Esta opción es peligrosa ya que si hay varios usuarios trabajando simultáneamente sobre
un mismo archivo se pueden generar archivos corruptos.
###no_subtree_checkdirectiva que le restringe ciertos derechos al cliente en
cuanto al volumen compartido, es decir, si solo se comparte una parte de una partición del disco el
cliente no tendrá privilegios de acceder al directorio raíz.
###subtree_check permite al cliente los privilegios no dados en el anterior.
###no_root_squashpor defecto los archivos compartidos por NFS cambian el
usuario “root” por el usuario “nfsnobody”, una cuenta de usuario sin privilegios.
Pero con esta opción “no_root_squash” los usuarios remotos podrán cambiar cualquier archivo en
el sistema de archivos compartido y dejar aplicaciones con troyanos para que otros usuarios los
ejecuten.
###root_squash los accesos con el UID=0 (root) se convierten en el servidor en
accesos con UID de un usuario anónimo (opción por defecto).
Otros valores
### () opción que establece los valores por defecto del NFS.
###All_squashtodos los accesos desde el cliente (con cualquier UID) se
transforman en acceso anónimo.
###anoniud, anongid Cuando se activa la opción root_squash all_squash, los
accesos anónimos utilizan normalmente el UID y GID primario del usuario denominado nobody, si
éste existe en el servidor (opción por defecto). Si se desean utilizar otras credenciales, los
parámetros anonuid y anongid establecen, respectivamente, qué uid y gid tendrá la cuenta
anónima que el servidor utilizará para acceder contenido del directorio.
###noaccessimpide el acceso al directorio especificado.
Habiendo hecho esto deberemos actualizar el fichero de “exports”
#exportfs –ra
Reiniciaremos ahora el servidor NFS
#/etc/init.d/nfs-kernel-server restart
Si queremos reiniciamos el “portmap”
/etc/init.d/portmap restart
Podremos ver los directorios compartidos mediante
#exportfs
Podremos ver también los clientes NFS que se conecten, mediante
# cat /var/lib/nfs/rmtab
Ahora enfoquémonos en acceder desde el cliente a los archivos compartidos.
Como cliente se está usando Ubuntu 9.04 (jaunty) para el proceso.
Instalaremos el paquete “nfs-common”
#apt-get install nfs-common/*Sirve para montar unidades NFS*/.
Referencia http://www.debian.org/releases/stable/ia64/release-notes/ch-
information.es.html
Ahora podemos montar la unidad NFS compartida, mediante
#mount –t nfs IPNFSserver:/ruta_archivos_compartidos /ruta_a_montar /*hay que
tener en cuenta que para montarlo en algún lugar local deberemos crear el directorio donde se va
a montar.
###para mi caso sería
#mount –t nfs 192.168.0.144:/mnt/nfstest /mnt/nfstest
Ahora, también se podría montar el archivo compartido desde el arranque, editando el fichero
/etc/fstab
#nano /etc/fstab /*y agregamos las líneas correspondientes
###192.168.0.144:/mnt/nfstest /mnt/nfstest nfs rw,hard,intr 0 1
/*****Entendamos un poquito esto
192.168.0.144 IP servidor NFS
/mnt/nfstest volumen que deseamos compartir
/mnt/nfstest Donde queremos almacenar/montar el volumen compartido
nfs tipo de sistema de fichero, en nuestro caso será nfs
rw monta el volumen con permisos de lecto-escritura.
0es la opción dump, que especifica si desea hacer un backup del sistema de archivo o no, en el
caso de cero (0) se omite y no se hace backup.
1es la columna de fsck, que chequea si el sistema de ficheros debe ser chequeado o no, si es
cero (0) no se chequeará.
Bueno espero les haya servido este manual básico.
Enjoy!!!!
Referencia http://www.tuxfiles.org/linuxhelp/fstab.html****/
Administración NFS http://www.it.uc3m.es/aat/Lab4/
VOCABULARIO
Concurrencia El sistema permite que múltiples procesos sean ejecutados al mismo tiempo.
Referencia http://www.alegsa.com.ar/Dic/concurrencia.php
Troyano A primera vista parece ser un programa útil pero en realidad hará daño una vez
instalado o ejecutado en tu ordenador.
Referencia http://www.masadelante.com/faq-que-es-un-troyano.htm