MANUAL DE INSTALACION NFS EN FEDORA 17 ERIKA ZULAY SANTIAGO MALDONAD CODIGO 1150196 PRESENTADO A: Ing.JEAN POLO CEQUEDA UNIVERSIDAD FRANCISCO DE PAULA SANTANDER FALCULTAD DE INGENIERIAS INGENIERIA DE SISTEMAS 2012 NFS es el sistema que utiliza Linux para compartir carpetas en una red. Mediante NFS, un servidor puede compartir sus carpetas en la red. Desde los PCs de los usuarios se puede acceder a dichas carpetas compartidas y el resultado es el mismo que si estuvieran en su propio disco duro. NFS son las siglas en inglés de Network File System que podríamos traducir como Sistema de Archivos en Red. Básicamente NFS permite, a PCs que utilizan Linux, compartir y conectarse a carpetas compartidas entre sí. Es el sistema nativo que utiliza Linux para compartir y acceder a carpetas compartidas en la red. INSTALACIÓN DE NFS Para poder disfrutar del servicio de compartir carpetas en la red mediante NFS, en el PC servidor es necesario instalar el paquete del servidor NFS. Lo normal es que todos los PCs dispongan del paquete servidor de NFS ya que en cualquier momento puede existir la necesidad de tener que compartir una carpeta desde cualquier PC, aunque lo habitual es que el único que comparta sea el servidor. Que un PC de un usuario tenga instalado el paquete del servidor NFS, no significa que automáticamente esté compartiendo su sistema de archivos en la red. Para ello es necesario configurar y arrancar el servicio. Este protocolo de red, permitirá compartir archivos y directorios en equipos remotos de forma transparente como si éstos fueran locales. El protocolo NFS está implementado bajo la arquitectura Cliente/Servidor, por lo que se necesita montar un 'Servidor NFS', en la máquina remota encargada de la exportación de directorios y archivos. También se debe instalar un 'Cliente NFS', en cada una de las máquinas locales, que serán las que importen aquellos directorios y archivos compartidos en la máquina remota. Para la instalación lo podemos hacer desde una consola de root: # yum -y install nfs-utils system-config-nfs nfs-utils El paquete nfs-utils proporciona un demonio para el servidor de NFS del núcleo y las herramientas relacionadas, lo que proporciona un nivel mucho más alto de rendimiento que el tradicional servidor Linux NFS utilizado por la mayoría de los usuarios. nfs-utils-libs bibliotecas de apoyo que son necesarios para los comandos y demonios de la RPM nfs-utils. system-config-nfs es una interfaz gráfica de usuario para crear, modificar y eliminar NFS acciones. CONFIGURACIÓN DEL SERVIDOR NFS Hay tres archivos de configuración principales que se necesitan para editar para configurar un servidor NFS: / etc / exports , / etc hosts.allow / y / etc / hosts.deny . / Etc / exports , el archivo de configuración principal / Etc / hosts.allow , alcanza para permitir el acceso / Etc / hosts.deny , HOSTS para evitar el acceso Antes de arrancar el servicio NFS, es necesario indicar qué directorios deseamos compartir y los permisos de acceso que se van a asignar a los usuarios. También existe la posibilidad de establecer desde qué PCs es posible conectarse. Estas opciones se configuran en el archivo /etc/exports Una vez instalado el servidor NFS, editamos el archivo de configuración 'exports' en el que especificamos aquellos directorios a exportar y que usuarios pueden acceder a ellos. # nano /etc/exports Ejemplo: /home/asor/Documents 192.168.0.0 (ro) 192.168.254.200(rw) 192.168.254.50 (rw) La sintaxis del archivo es: <directorio a exportar> <máquina que puede acceder> (opciones) En cada línea del archivo de configuración del servidor NFS /etc/exports, se puede especificar: La primera columna contiene la ruta completa en el equipo a la carpeta que desea compartir La segunda columna de las direcciones IP de los hosts que están compartiendo. Las letras entre paréntesis se refieren a los privilegios Las opciones utilizadas pueden ser las siguientes: ro y rw: Sólo lectura o lectura y escritura, respectivamente. Valor predeterminado es rw. link_relative y link_absolute: convertir los enlaces simbólicos absolutos en enlaces simbólicos relativos o bien dejar los enlaces simbólicos como están, respectivamente. Valor predeterminado es link_absolute. no_root_squash y root_squash: respeta el uid/gid 0 (root) o bien traslada uid/gid 0 hacia uid/gid del usuario anónimo de NFS. Valor predeterminado es root_squash. squash_uids y squash_gids: especifica una lista de uids o gids que se trasladarán al usuario anónimo utilizado por NFS. Ejemplo: squash_uids=0-15,20,25-50. all_squash: traslada todos los uid y gid hacia el uid y gid del usuario anónimo utilizado por NFS. Comúnmente utilizado para compartir directorios de acceso público, como el directorio /var/ftp/pub. anonuid y anongid: establecen en forma explícita el uid y gid del usuario anónimo utilizado por NFS. Ejemplo: anonuid=150,anongid=100. También podemos especificar las máquinas que tendrán acceso al servidor NFS, en vez de indicar un rango de direcciones. El manual que detalla el formato y opciones del archivo /etc/exports puede consultarse ejecutando : # man 5 exports Para ver la lista de clientes conectados al servidor NFS, se ejecuta el mandato showmount: # showmount Para ver la lista de clientes conectados al servidor NFS y los directorios utilizados por cada uno, se ejecuta: # showmount -a El manual que detalla las opciones del mandato showmount puede consultarse ejecutando #man 8 showmount # nano /etc/hosts.deny Este archivo es para la lista de hosts que no están autorizados a ver los archivos compartidos, para proporcionar un poco de seguridad, debemos editar y modificar los archivos de configuración siguientes: portmap:ALL lockd:ALL mountd:ALL rquotmaad:ALL statd:ALL # nano /etc/hosts.allow En el archivo se encuentra todo lo contrario, los hosts autorizados a acceder a a nuestros archivos. rpcbind:IP_A_PERMITIR (192.168.0.0/24) portmap:IP_A_PERMITIR (192.168.0.0/24) lockd:IP_A_PERMITIR (192.168.0.0/24) mountd:IP_A_PERMITIR (192.168.0.0/24) rquotad:IP_A_PERMITIR (192.168.0.0/24) statd: IP_A_PERMITIR (192.168.0.0/24) # nano/etc/sysconfig/nfs Habilite o bien modifique, los siguientes parámetros, estableciendo los valores mostrados a continuación: RQUOTAD_PORT=875 LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 STATD_PORT=662 Si el servidor NFS va a trabajar sin muro cortafuegos en una red de área local, este paso es innecesario. Con esto ya terminemos de configurar TODO el servicio #service nfs start SERVICIOS REQUERIDOS Linux utiliza una combinación de soporte a nivel del kernel y procesos demonio para proporcionar los archivos compartidos con NFS. NFSv2 y NFSv3 confía en las Llamadas de procedimientos remotos ((RPC)) para enrutar peticiones entre clientes y servidores. Los servicios RPC bajo Linux son controlados por el servicio portmap. Para compartir o montar sistemas de archivos NFS, los servicios siguientes funcionan juntos, dependiendo de cuál versión de NFS se tenga implementada: nfs — Inicia los procesos RPC apropiados para servir peticiones para los sistemas de archivos compartidos NFS. nfslock — Un servicio opcional que inicia los procesos RPC adecuados para permitir que clientes NFS bloqueen archivos en el servidor. portmap — El servicio RPC para Linux; responde a las peticiones para servicios RPC y configura las conexiones al servicio RPC solicitado. No se utiliza con NFSv4. Los siguientes procesos RPC facilitan los servicios NFS: rpc.mountd — Este proceso recibe las peticiones de montaje desde clientes NFS y verifica que el sistema de archivos solicitado esté actualmente exportado. Este proceso es iniciado automáticamente por el servicio nfs y no requiere de la configuración del usuario. No se utiliza con NFSv4. rpc.nfsd — Este proceso es el servidor NFS. Trabaja con el kernel Linux para satisfacer las demandas dinámicas de clientes NFS, tales como proporcionar hilos del servidor cada vez que se conecta un cliente NFS. Este proceso corresponde al servicio nfs. rpc.lockd — Un proceso opcional que permite a los clientes NFS bloquear archivos en el servidor. Esto corresponde al servicio nfslock. No se utiliza con NFSv4. rpc.statd — Este proceso implementa el protocolo RPC Network Status Monitor (NSM) el cual notifica a los clientes NFS cuando un servidor NFS es reiniciado luego de haber sido apagado abruptamente. Este proceso es iniciado automáticamente por el servicio nfslock y no requiere configuración por parte del usuario. No se utiliza con NFSv4. nano idmapd funcione con NFSv4, el /etc/idmapd.conf debe estar configurado. Se requiere este servicio para su uso con NFSv4. rpc.svcgssd — Este proceso proporciona al servidor los mecanismos de transporte para el proceso de autenticación con NFSv4. Se requiere este servicio para su uso con NFSv4. rpc.gssd — Este proceso proporciona al cliente los mecanismos de transporte para el proceso de autenticación. Se requiere este servicio para su uso con NFSv4 ARRANQUE Y PARADA DE NFS Arranque y parada manual Para que el servidor NFS funcione, es necesario que esté arrancado el servicio portmap, por lo tanto, la primera acción será iniciar portmap por si no estuviera arrancado: # /etc/init.d/portmap start Para poner en marcha el servicio NFS, o cada vez que modifiquemos el archivo /etc/exports, debemos reiniciar el servidor NFS, mediante el comando: # systemctl restart nfs.service Si deseamos detener el servidor NFS, debemos ejecutar: # systemctl stop nfs.service Si se realizó una instalación estándar, los servicios requeridos por nfs, es decir rpcbind y nfslock, estarán activos y funcionando. Sólo en el caso de haber realizado una instalación mínima, es necesario iniciar primero estos dos servicios, ejecutando lo siguiente: #service rpcbind start #service nfslock start De modo predeterminado los servicios rpcbind y nfslock estarán activos en los niveles de ejecución 3, 4 y 5. De modo predeterminado el servicio nfs estará inactivo. Para activar este servicio en los niveles de ejecución 3 y 5, es decir los niveles recomendados, ejecute lo siguiente: #chkconfig --level 35 nfs on Para iniciar el servicio por primera vez, sólo necesita ejecutar: #service nfs start Para volver a leer la configuración del servicio y aplicar los cambios, sin interrumpir las conexiones existentes, sólo se necesita ejecutar: #service nfs reload Para reiniciar el servicio sólo se necesita ejecutar: #service nfs restart Para detener el servicio, sólo necesita ejecutar: #service nfs stop Para verificar el estado del servicio, sólo necesita ejecutar: #service nfs status Para verificar el cortafuegos # rpcinfo –p Se apaga el cortafuegos # service iptables stop Verificación del servicio. El mandato rpcinfo se utiliza para verificar el estado de servidores NFS y otros servidores que funcionan sobre RPC. Para verificar el estado de los servicios en el anfitrión local, ejecute: # rpcinfo Para ver las estadísticas de uso en el anfitrión local: # rpcinfo -m Para mostrar una lista de todos los programas RPC en el anfitrión local: # rpcinfo -prpc Para mostrar una lista más concisa de todos los programas RPC en el anfitrión local: # rpcinfo -s Para mostrar los transportes soportados por el anfitrión local, ejecute el mandato rpcinfo con la opción T, udp, el nombre o dirección IP del anfitrión local y nfs como argumentos. # rpcinfo -T udp localexxhost nfs Para verificar el estado de los servicios en un anfitrión remoto, ejecute el mandato rpcinfo con el nombre o dirección IP de un servidor NFS remoto como argumento. # rpcinfo 192.168.1.64 Para ver las estadísticas de uso en un anfitrión remoto, ejecute el mandato rpcinfo con la opción -m y el nombre o dirección IP de un servidor NFS remoto como argumento. # rpcinfo –m 192.168.1.64 Para mostrar una lista de todos los programas RPC en un anfitrión remoto, ejecute el mandato rpcinfo con la opción -p y el nombre o dirección IP de un servidor NFS remoto como argumento. # rpcinfo -p 192.168.1.64 Para mostrar una lista más concisa de todos los programas RPC en un anfitrión remoto, ejecute el mandato rpcinfo con la opción -s y el nombre o dirección IP de un servidor NFS remoto como argumento. # rpcinfo -s 192.168.1.64 Para mostrar los transportes soportados por un anfitrión remoto, ejecute el mandato rpcinfo con la opción -T, udp, el nombre o dirección IP de un servidor NFS remoto y nfs como argumentos. # rpcinfo -T udp 192.168.1.64 nfs CONFIGURACION DE LOS CLIENTES El acceso a la carpeta compartida es exactamente igual que el acceso a cualquier otra carpeta de nuestro disco duro. Para que los usuarios puedan acceder desde sus clientes NFS a los directorios y archivos compartidos por el servidor NFS, debemos hacer lo siguiente en el cliente y como root ejecutando el comando: #exportfs (mostrar los dorectorios compartidos) # mount -t nfs <máquina-servidor>:<directorio-compartido> <punto de montaje> # umount <punto de montaje>' (desmontar) Ejemplo: # mount -t nfs 192.168.0.100: /home/asor/Documents ' # umount /mnt' (para desmontar) Para que nos funcione correctamente es necesario indicarle al firewall "iptables" que nos deje pasar todo el tráfico que venga desde la IP_A_PERMITIR. iptables -A INPUT -s IP_A_PERMITIR -j ACCEPT iptables -A INPUT -s NUESTRA_IP -j ACCEPT iptables -A OUTPUT -s IP_A_PERMITIR -j ACCEPT iptables -A OUTPUT -s NUESTRA_IP -j ACCEPT VERSIÓN CON DROP POR DEFECTO Si queremos que nuestra maquina sea inexcrutable y que solo tenga abierto un puerto imprescindible para dar determinado servicio. Con DROP por defecto se protege la maquina perfectamente, aunque hay que añadir algunas reglas para que la propia máquina sea capaz de salir a internet. ## FLUSH de reglas iptables –F iptables –X iptables –Z iptables -t nat -F ## Establecemos politica por defecto: DROP iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP ## Debemos decir de manera explicita qué es lo que queremos abrir # A nuestra IP le dejamos todo iptables -A INPUT -s IP_A_PERMITIR -j ACCEPT OTRA FORMA DE CONFIGURACION Después de la isntalacion del paquete nfs-utils Son utilizados dos equipos: un servidor NFS denominado nfs-srv, cuya dirección IP es 192.168.1.1. un cliente denominado nfs-client cuya dirección IP es 192.168.1.100. Ambos equipos se encuentran en la misma subred (192.168.1.0/24). Configuración del Servidor Los pasos 1 a 10 que ofrecemos a continuación deberían ser ejecutados en el servidor NFS, nfs-srv. Ejecute el comando setsebool para deshabilitar montajes de lectura y escritura sobre sistemas de archivos NFS: setsebool -P nfs_export_all_rw off Nota No se utiliza la opción -P si no desea que las modificaciones en setsebool continúen vigentes luego de haber reiniciado el sistema. Ejecute el comando rpm -q nfs-utils para verificar que el paquete nfs-utils se encuentre instalado. Este paquete ofrece programas de soporte para utilizar NFS y debería ser instalado sobre cualquier cliente que esté en uso. Si este paquete no se encuentra instalado, hágalo ejecutando el comando yum install nfs-utils como usuario root. Ejecute mkdir /compartir como usuario root para crear un directorio de nivel superior para compartir archivos usando NFS. Ejecute el comando touch /compartir/file1 como usuario root para crear un nuevo archivo vacío en el área compartida. El cliente accederá a este archivo más adelante. Para saber que SELinux aún se encuentra capacitado para bloquear accesos, aún cuando hayan sido otorgados permisos de Linux, otorgue al directorio /compartir derechos de accesos totales para todos los usuarios: # chmod -R 777 /compartir Edite el archivo /etc/exports y agregue la línea siguiente en la parte superior: /compartir 192.168.1.100(rw) Esta entrada muestra la ruta completa en el servidor a la carpeta compartida /compartir, el equipo o rango de red que nfs-srv compartirá con (en este caso la dirección IP de un único equipo, nfs-client en 192.168.1.100), y por último, los permisos para poder hacerlo. Se otorgan permisos de lectura y escritura, como es indicado en por (rw). Los puertos TCP y UDP utilizados por NFS son asignados dinámicamente por rpcbind, lo que puede generar problemas cuando se creen reglas de cortafuegos. Para simplificar el proceso de permiso de tráfico NFS a través del cortafuegos, en nuestro ejemplo edite el archivo /etc/sysconfig/nfs y descomente las variables MOUNTD_PORT, STATD_PORT, LOCKD_TCPPORT y LOCKD_UDPPORT. Asegúrese que se encuentren permitidas las conexiones entrantes de los puertos TCP 111, 892 y 2049, a través del cortafuegos del servidor. Esto puede ser hecho en Fedora mediante la utilización de la herramienta system-config-firewall. Ejecute el comando service nfs start como usuario root para iniciar NFS y los servicios relacionados: # service nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ] Para asegurarse que la tabla de exportación del subsistema NFS se encuentra actualizada, ejecute el comando exportfs -rv como usuario root: # exportfs -rv exporting 192.168.1.100:/compartir Ejecute el comando showmount -e como usuario root para conocer todos los sistemas de archivos exportados: # showmount -e Export list for nfs-srv: /compartir 192.168.1.100 En este momento, el servidor nfs-srv ha sido configurado para permitir comunicaciones NFS hacia nfsclient en 192.168.1.100, y se encuentran activos todos los permisos Linux de sistemas de archivos. Si SELinux estuviera deshabilitado, el cliente debería ser capaz de montar la porción compartida y de tener acceso total sobre ella. Sin embargo, como el Booleano nfs_export_all_rw se encuentra deshabilitado, el cliente no es capaz de montar este sistema de archivos, como puede observarse a continuación. Este paso debería ser realizado sobre el cliente, nfs-client: [nfs-client]# mkdir /compartir [nfs-client]# mount.nfs 192.168.1.1:/compartir /compartir mount.nfs: access denied by server while mounting 192.168.1.1:/compartir/ Habilite el Booleano de SELinux que fue deshabilitado anteriormente en el paso 1, y el cliente será capaz de montar exitosamente el sistema de archivos compartido. Este paso debería ser realizado sobre el servidor NFS, nfs-srv: [nfs-srv]# setsebool -P nfs_export_all_rw on Ahora, intente montar nuevamente el sistema de archivos NFS. Este paso debería ser realizado sobre el cliente NFS, nfs-client: [nfs-client]# mount.nfs 192.168.1.1:/compartir /compartir [nfs-client]# [nfs-client]# ls /compartir total 0 -rwxrwxrwx. 1 root root 0 2009-04-16 12:07 file1 [nfs-client]# El sistema de archivos ha sido montado exitosamente en el cliente. Este ejemplo demuestra de qué manera SELinux agrega otra capa de protección, y cómo pueden reforzarse los permisos de SELinux, aún cuando los permisos de Linux estaban definidos para otorgar derechos absolutos a todos los usuarios