6.10.2010

nfs service whit selinux

Ok, inicio mi aprendizaje de linux con nfs, Selinux no permite en nfs compartir files by default.
El ip de mi server nfs sera 172.24.254.254 y el cliente station18 172.24.0.10
El servicio nfs se instala con el paquete nfs-utils (al menos en rhel54), luego en la configuracion:

[root@server ~]# cat /etc/exports 
/pruebas/nfs            172.24.0.0/255.255.0.0(rw,sync)

[root@server ~]# showmount -e
Export list for server.example.com:
/pruebas/nfs    172.24.0.0/255.255.0.0

[root@server ~]# getenforce 
Enforcing

[root@server ~]# ls -l /pruebas/
total 8
drwxr-xr-x 2 root root 4096 Jun 10 19:01 nfs
[root@server ~]#



Revisemos el valor del boolean nfs_export_all_rw en el server :

[root@server ~]# getsebool nfs_export_all_rw
nfs_export_all_rw --> off

Haciendo pruebas desde station18 para montar la carpeta /pruebas/nfs  publicada por el server:
[root@station18 /]# showmount -e 172.24.254.254
Export list for 172.24.254.254:
/pruebas/nfs    172.24.0.0/255.255.0.0
Bien, "al parecer" el servicio nfs esta en el server esta OK como servicio (para fines de aprendizaje de selinux aun la politica por default en el firewall del server es ACCEPT)
Ahora intentare montar el recurso compartido por el server en mi station18 en la ruta /mnt/nfs
[root@station18 /]# mount  172.24.254.254:/pruebas/nfs /mnt/nfs/
mount: 172.24.254.254:/pruebas/nfs failed, reason given by server: Permission denied
Ajaaa !!! el selinux del server no me deja ...ademas el log registro esto :
Jun 10 19:22:57 server kernel: type=1400 audit(1276215777.400:40): avc:  denied  { search } for  pid=2173 comm="rpc.mountd" name="pruebas" dev=dm-0 ino=1265473 scontext=system_u:system_r:nfsd_t:s0 tcontext=root:object_r:default_t:s0 tclass=dir

Bien, entonces en el server activaremos el valor del boolean requerido nfs_export_all_rw  a  1:
[root@server ~]# setsebool nfs_export_all_rw 1
Entonces ya vamos teniendo una mejor relacion con /var/log/messages de nuestro server :
Jun 10 19:29:30 server kernel: type=1405 audit(1276216170.802:41): bool=nfs_export_all_rw val=1 old_val=0 auid=4294967295 ses=4294967295
Jun 10 19:29:30 server kernel: type=1107 audit(1276216170.805:42): user pid=1948 uid=81 auid=4294967295 subj=system_u:system_r:system_dbusd_t:s0 msg='avc:  received policyload notice (seqno=4)
Jun 10 19:29:30 server kernel: : exe="?" (sauid=81, hostname=?, addr=?, terminal=?)'
Jun 10 19:29:31 server setsebool: The nfs_export_all_rw policy boolean was changed to 1 by root

Vemos que ahora ya podemos montar desde nuestro cliente station18.
[root@station18 /]# mount  172.24.254.254:/pruebas/nfs /mnt/nfs/
[root@station18 /]#  

El log de nuestro server dice que el cliente station18 monto el recurso publicado en el server /pruebas/nfs  :
Jun 10 19:49:50 server mountd[2173]: authenticated mount request from 172.24.0.10:908 for /pruebas/nfs (/pruebas/nfs)

Podemos tambien verificar que desde nuestro cliente station18 podemos mirar que existia un archivo de nombre "algo" publicado en el server nfs el cual hemos montado en nuestro /mnt/nfs
[root@station18 /]# ls -lZ /mnt/nfs/*
-rw-r--r--  root root system_u:object_r:nfs_t          /mnt/nfs/algo
[root@station18 /]# 

Desde station18 tratemos de crear (osea escribir) un archivo "nuevo" 
[root@station18 /]# touch /mnt/nfs/nuevo
touch: cannot touch `/mnt/nfs/otro': Permission denied

Upss, al inicio de este post indicamos detalles de la carpeta compartida en el server no ?
[root@server ~]# ls -l /pruebas/
total 8
drwxr-xr-x 2 root root 4096 Jun 10 19:01 nfs

Ok, en el server las politicas de acceso discresionales (DAC) estan denegando por cuestiones de permisos, ya esto lo manejamos con mejor experiencia, agregamos a "otros" permisos de escritura sobre /pruebas/nfs
[root@server ~]# chmod o+w /pruebas/nfs/
[root@server ~]# ls -lZ /pruebas/
drwxr-xrwx  root root root:object_r:default_t          nfs

Ahora ya podriamos crear (escribir) el archivo de nombre "nuevo" en el server desde station18 :
[root@station18 /]# touch /mnt/nfs/nuevo
[root@station18 /]# echo "montamos el primer nfs con selinux, activando el boolean nfs_export_all_rw" >> /mnt/nfs/nuevo 
[root@station18 /]# cat /mnt/nfs/nuevo 
montamos el primer nfs con selinux, activando el boolean nfs_export_all_rw
[root@station18 /]# 

Si en nuestro server, selinux inicia en modo enforcing ya no tenendriamos por que tener problemas si el server es reiniciado por ejemplo... Probemos !!!!  detalle valioso para el rhce !!
[root@server ~]# service nfs status
rpc.mountd (pid 2162) is running...
nfsd (pid 2159 2158 2157 2156 2155 2154 2153 2152) is running...
[root@server ~]# getsebool nfs_export_all_rw
nfs_export_all_rw --> on
[root@server /]# ls -lZ /pruebas/nfs/
-rw-r--r--  root      root      root:object_r:default_t          algo
-rw-r--r--  nfsnobody nfsnobody system_u:object_r:default_t      nuevo
-rw-r--r--  nfsnobody nfsnobody system_u:object_r:default_t      nuevo2
-rw-r--r--  nfsnobody nfsnobody system_u:object_r:default_t      otro
[root@server /]# 

El archivo nuevo2 fue creado desde station18 despues que el server reinicio ..
Espero que este primer post incluyendo selinux sirva para ya iniciar mi aprendizaje ..con selinux con miras a mi rhce !!! caraxo ...jajaja ...!

PD: Esto no es un manual oficial ni perfecto, ..solo estoy practicando y tratando de aprender .. si tu encuentras algun error o tienes alguna sugerencia ...favor ..te agradecere mucho la indiques. 

















No hay comentarios.:

Publicar un comentario