Configuración NFS

De Wikillano

Configuración NFS

Per a fer aquesta practica he utilitzat dues màquines una que fa de servidor i l'altre de client

  • neptuno es la màquina servidora.
  • rea: es la màquina client.

Primerament hem d'instal·lar el servei portmap:

Quan un servidor RPC (NFS,NIS..) arrenca, es comunica amb el servei portmap i li diu quins ports està utilitzant per escoltar, i quins son els ports que ofereix, d'aquesta manera quan un client vol fer una RPC call a un dels servidors, primer contacta amb el portmap de la màquina servidora i determina el port on els paquets RPC deurien de ser enviats.

Després d'aquesta explicació passo ha instal·lar el servei portmap a la màquina servidora:

neptuno:~# apt-cache search portmap
portmap - The RPC portmapper
neptuno:~# apt-get install portmap


Després de la correcta instal·lació de portmap passem ha instal·lar el servidor NFS, a Debian he trobat que els paquets que necessito són:

1. nfs-common (ja instal·lat a la meva màquina) 2. nfs-kernel-server

neptuno:~# apt-get install nfs-common nfs-kernel-server
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
nfs-common ya está en su versión más reciente.
Se instalarán los siguientes paquetes NUEVOS:
  nfs-kernel-server
0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 91,5kB de archivos.
Se utilizarán 274kB de espacio de disco adicional después de desempaquetar.
Des:1 http://ftp.rediris.es stable/main nfs-kernel-server 1:1.0.6-3.1 [91,5kB]
Descargados 91,5kB en 0s (105kB/s)
Seleccionando el paquete nfs-kernel-server previamente no seleccionado.

(Leyendo la base de datos ...

31296 ficheros y directorios instalados actualmente.)
Desempaquetando nfs-kernel-server (de .../nfs-kernel-server_1%3a1.0.6-3.1_i386.deb) ...
Configurando nfs-kernel-server (1.0.6-3.1) ...
Not starting NFS kernel daemon: No exports.

Com es pot veure el servei NFS no ha pogut ser engegat degut a que no te el fitxer /etc/exports configurat, en aquest fitxer configurarem els recursos que el nostre servidor exportarà i quines màquina hi tindran accés.

Aquest fitxer es compon de path host(opcions)

  • path es el path absolut del directori que volem compartir.
  • host es el nom o ip (o rang ip's) que podran accedir al recurs.
  • opcions son les opcions del recurs tal com
  • [ro,rw] ro només lectura, rw escriptura
  • [sync,async] sync respecte el protocol NFS , async no, millor rendiment però risc de corrupció de dades
  • [root_squash,no_root_squash,all_squash] root_squash indica que les connexions que es facin com a root seran identificades com un usuari anònim, no_root_squash evitarem la degradació esmentada

abans, amb all_squash aplicarem la regla abans esmentada però a tots el usuaris no només a root.

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
 
/home rea(ro,sync,root_squash)
/tmp rea(rw,sync,no_root_squash)

Una vegada estigui configurat el fitxer, ens ocuparem de la seguretat per al servei RPC portmap com per al servidor NFS, lo mes fàcil es utilitzar tcp wrappers, per això modificarem els fitxers /etc/hosts.allow /etc/hosts.deny per a indicar les maquines o xarxa que tindran accés aquests serveis.

En el meu cas a /etc/hosts.allow he donat permís a la meva xarxa.(també podem ficar ip's de màquines en concret)

# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5), hosts_options(5)
#                   and /usr/doc/netbase/portmapper.txt.gz
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8), rpc.mountd(8) and
# /usr/share/doc/portmap/portmapper.txt.gz for further information.
#
portmap:192.168.1.0/255.255.255.0
nfsd:192.168.1.0/255.255.255.0

A /etc/hosts.deny  denegarem el servei a tots els que no estiguin explícitament a hosts.allow

# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5), hosts_options(5)
#                  and /usr/doc/netbase/portmapper.txt.gz
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper. See portmap(8)
# and /usr/doc/portmap/portmapper.txt.gz for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address. 

# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID
portmap:ALL
nfsd:ALL

Reiniciem els dos serveis:

neptuno:~# /etc/init.d/nfs-kernel-server stop
Stopping NFS kernel daemon: mountd nfsd.
Unexporting directories for NFS kernel daemon...done.
neptuno:~# /etc/init.d/nfs-kernel-server start
Exporting directories for NFS kernel daemon...done.
Starting NFS kernel daemon: nfsd mountd.

Amb la comanda rpcinfo -p podem verificar que NFS està funcionant ja que ens mostra quins serveis esta oferint portmap

neptuno:/tmp# rpcinfo -p
  programa vers proto   puerto
   100000    2   tcp    111  portmapper
   100000    2   udp    111  portmapper
   100024    1   udp    791  status
   100024    1   tcp    794  status
   100003    2   udp   2049  nfs
   100003    3   udp   2049  nfs
   100003    4   udp   2049  nfs
   100003    2   tcp   2049  nfs
   100003    3   tcp   2049  nfs
   100003    4   tcp   2049  nfs
   100021    1   udp  32779  nlockmgr
   100021    3   udp  32779  nlockmgr
   100021    4   udp  32779  nlockmgr
   100021    1   tcp  32781  nlockmgr
   100021    3   tcp  32781  nlockmgr
   100021    4   tcp  32781  nlockmgr
   100005    1   udp    770  mountd
   100005    1   tcp    773  mountd
   100005    2   udp    770  mountd
   100005    2   tcp    773  mountd

Proves:

Mitjançant showmount -e i la ip del servidor NFS podem veure el recursos compartits de la mateixa

rea:~# showmount -e 192.168.1.2
Export list for 192.168.1.2:
/tmp  rea
/home rea
rea:~#

Al client crearem els directoris per a muntar desprès els recursos,

rea:~# mkdir /mnt/nfshome

I muntem el recurs

rea:~# mount -t nfs 192.168.1.2:/home /mnt/nfshome

Ens fiquem al directori

rea:~# cd /mnt/nfshome/
rea:/mnt/nfshome# ls -lrt
total 8
drwxr-xr-x  2   1001 edonkey 4096 Nov  2 22:21 estela
drwxr-xr-x  2 donkey donkey  4096 Nov  3 19:51 david

Intentem crear un fitxer però no ens deixa ja que no tenim permisos d'escriptura.

rea:/mnt/nfshome/david# touch x
touch: cannot touch `x': Read-only file system

Per l'altre directori fem lo mateix però en aquest cas si podem escriure.

rea:/mnt/nfshome/david# mkdir /mnt/nfstmp
rea:/mnt/nfshome/david# mount -t nfs 192.168.1.2:/tmp /mnt/nfstmp
rea:/mnt/nfshome/david# cd /mnt/nfstmp
rea:/mnt/nfstmp# touch x
rea:/mnt/nfstmp# ls -lrt
total 0
-rw-r--r--  1 root root 0 Nov 20 22:40 x
rea:/mnt/nfstmp#

Com es pot veure el fitxer s'ha creat. ( a la maquina servidora)

neptuno:~# cd /tmp
neptuno:/tmp# ls -lrt
total 0
-rw-r--r--  1 root root 0 2006-11-20 22:40 x
neptuno:/tmp#
Herramientas personales