NFS en Debian
O obxetivo será montar un servidor NFS en Debian, e a compartición de arquivos pola a través do sistema Net File System NFS.
NFS é un sistema de compartición de arquivos que pode supoñer un gran risco de seguridade da rede, pois entre outros contras dispón dos seguintes:
- Non usa cifrado nas súas conexión.
- Por defecto non usa autenticación nas conexións, o acceso o restrinxe según a IP ou nome do host dos equipos que se conectan.
- NFS agarda que a identificación de nome de usuario e grupo, sexan as mesmas no equipo servidor e cliente. Mais isto se pode configurar pra que non sexa así.
A maior vantaxe, é poder compartir arquivos non privados na rede local sen ter que configurar contas de acceso, por exemplo distribuir software ou outros arquivos que non requiran de protección.
Instalación
No lado do servidor temos que instalar o seguinte:
sudo apt-get install nfs-kernel-server nfs-common
No lado do cliente se temos un fedora 21 teremos nfs instalado por defecto, se temos un Debian instalamos o seguinte:
sudo apt-get install nfs-common
Configurando directorio para NFS
Creamos un directorio para compartir por NFS:
sudo mkdir /home/nfs_compartidos
sudo chown nobody:nogroup /home/nfs_compartidos
sudo chmod 755 /home/nfs_compartidos
Para ver como configurar o arquivo exports usamos o seguinte:
man 5 exports
Unha vez teñamos claro o que queremos compartir e como, editamos /etc/exports
sudo vi /etc/exports
Para a edición do arquivo se sigue o seguinte esquema:
RECURSO_A_COMPARTIR EQUIPOS_COS_QUE_COMPARITLO (PERMISOS_DA_COMPARTICIÓN)
Opcións de permisos (a maioria ):
| Opción: | Explicación: |
|---|---|
| rw | Para permitir a escritura/lectura do volume. |
| ro | Para permitir só a lectura do volume. |
| async | Permite máis optimización da escritura, pero pode producir erros de escritura en caso de reinicio do server, etc… Xa que confirma a recepción dos datos antes de comprobrar que están ben escritos na unidade. |
| sync | Fai que o servidor responda as peticións de escritura unha vez que os cambios han sido comiteados e están ben gardados na unidade. |
| no_subtree_check | Esta opción deshabilita a comprobración de rutas dos arquivos. |
| root_squash | Pasa as UID/GID ao anonymous UID/GID. |
| no_root_squash | Anula o root_squash esta opción é útil para os clientes sen disco. |
| all_squash | Mapea todas as UID/GID ao usuario anónimo. Útil para a exportación de directorios NFS para FTP públicos, etc… O oposto a esta opción sería no_all_squash, esta é a opción por defecto. |
Crear taboas extra pra exports
Se queremos definir máis normas podemos facelas en arquivos separados, en /etc/exports.d.
Arquivo de exemplo do exports:
# sample /etc/exports file
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub *(ro,insecure,all_squash)
/srv/www -sync,rw server @trusted @external(ro)
/foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
/build buildhost[0-9].local.domain(rw)
| Liña: | Explicación: |
|---|---|
| 2 | Exporta o sistema de arquivos enteiro as máquinas master e trusty. Engade acceso de escritura, todas as comprobacións de UID están deshabilitadas para o host trusty. (Obviamente non é recomendable usar esta configuración xD ) |
| 3,4 | Amosa o exemplo pra nomes incompletos de nomes de host e nomes de grupos ( é a entrada ‘@trusted’). |
| 5 | Amosa a entrada aplicada pra ese host pc001, donde se mapean os usuarios, e teñen que ter a uid equivalente a 150 e o gid 100. |
| 6 | Exporta o directorio público FTP para calquer host no mundo, executando tódalas peticións baixo a conta “nobody”. A opción insecure nesta entrada permite a clientes con NFS non usar o porto reservado para NFS. |
| 7 | Exporta o directorio de escritura e lectura a máquina “server” mentres esté no grupo “@trusted”, e só lectura o grupo “@external”, nos tres montaxes coa opción “sync” activa. |
| 8 | Exporta o directorio a un rango de ipv6 e un rango de ipv4 para as suas subnets. |
| 9 | Mostra como compartir con un nome de host con variables. |
Exemplo práctico de uso
Compartir un directorio coa rede local
Para a compartición dun directorio nunha rede local podemos usar:
/home/shares 192.168.0.0/24(rw)
Onde poremos o directorio /home/shares compartido cos equipos da rede 192.168.0.0, quenes podrán leer e escribir o directorio.
Montalo directorio remoto NFS
Agora como clientes se nos interesa montar o directorio remoto dun server NFS, temos que facer o seguinte:
mount <ip_server>:/ruta/no/server/do/directorio /ruta/no/host/onde/montar
Con iso montaría o directorio remoto nese directorio, permitíndonos dipoñer del coma se de un directorio local se tratase.
Automontar un directorio remoto por NFS dende o arrinque
Nun fedora podemos poñer no /etc/fstab o seguinte:
# ...
<ip_nome_ou_nomehost_server_nfs>:<ruta_do_directorio> <ruta/local/para/montar/o/directorio> nfs4 soft,x-systemd.device,timeout=2,udp 0 0
# ...
- Onde o tipo de sistema de arquivos se trataría de nfs4 (a versión do server ).
- Tipo de montaxe soft, garante que non se espere a montaxe do directorio para poder iniciar o sistema, o contrarío sería hard.
- Como o sistema usa systemd, se indica que é un dispositivo.
- timeout, sirve para indicar o tempo a esperar para poder montar o directorio.
- udp, o tipo de protocolo a usar, pode ser tcp ou udp, con udp saturamos menos a rede, e é máis rápido, máis pode dar erros, xa que non confirma a correcta recepción dos paquetes, o protocolo TCP sí.
Para aplicar os cambios no fstab ou probalos, usamos:
# mount -a
Con isto xa teríamos tódolo preciso pra usar un directorio en rede a través de NFS, se procuras algo máis seguro é mellor usar sshfs, mais ese xa sería outro tema pra un novo post.