svnserve con selinux en el montaje nfs no puede iniciarse (Centos8)

svnserve con selinux en el montaje nfs no puede iniciarse (Centos8)

Puede que sea una pregunta tonta. Luchando con mi servidor Subversion en un Centos8 con Selinux aplicado. Disponemos de un montaje NFS para almacenar los datos ( /mnt/data/svn).

El problema (cuando selinux está en modo de cumplimiento) es que el servicio no se inicia porque no tiene permisos para acceder /mnt/data/svn:

> service svnserve start # error
> journalctl -xe

systemd[1]: Starting Subversion protocol daemon...
-- Subject: Unit svnserve.service has begun start-up
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
-- 
-- Unit svnserve.service has begun starting up.
... svnserve[2445049]: svnserve: E000013: Can't check path '/mnt/data/svn': Permission denied
... systemd[1]: svnserve.service: Control process exited, code=exited status=1
... systemd[1]: svnserve.service: Failed with result 'exit-code'.
... systemd[1]: Failed to start Subversion protocol daemon.

entorno SVN: /etc/sysconfig/svnserve:

OPTIONS="-r /mnt/data/svn"

permisos de directorio: Recursivo...

drwxr-xr-x. 36 svn svn 4096 Nov 17 16:40 /mnt/data/svn

configuración SE: vía semanage

> semanage fcontext -l | egrep "/mnt/data/svn"
/mnt/data/svn           all files          system_u:object_r:svnserve_content_t:s0 
/mnt/data/svn(/.*)?    all files          system_u:object_r:svnserve_content_t:s0 

Tipo de contexto SE

> ls -ldaZ /mnt/data/svn
drwxr-xr-x. 36 svn svn system_u:object_r:nfs_t:s0 4096 Nov 17 16:40 /mnt/data/svn

Sin selinux enforcedtodo funciona como se esperaba. El problema: no se puede agregar svnserve_content_ttipo a /mnt/data/svntravés de semanage:

chcon -Rv --user system_u /mnt/data/svn             # fine
chcon -Rv --type svnserve_content_t /mnt/data/svn   # fails

Parece snvserve_content_tno válido o no puedo asignarlo nfs_ty svnserve_content_tal mismo tiempo. Soy el fin de las buenas ideas. Es muy probable que haya una solución súper simple y ya estoy muy feliz con cualquier idea (deshabilitar la aplicación de Selinux no es una opción).

Muchas gracias por adelantado,

R

Respuesta1

Mi solución

De hecho, el registro de auditoría muestra lo que iba mal:

type=AVC msg=audit(1606892987.322:161301): avc:  denied  { search } for  pid=2570843 comm="svnserve" name="/" dev="0:46" ino=2131353823 scontext=system_u:system_r:svnserve_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir permissive=0

Sin permiso para searchlos directorios. Mi solución fue escribir un módulo/regla de política de Selinux personalizado:

module svnserve_nfs 1.0;

require {
        type svnserve_t;
        type nfs_t;
        class dir { getattr search read write };
        class file { getattr unlink append open read setattr write lock create rename };
}

#============= svnserve_t ==============
allow svnserve_t nfs_t:dir { getattr search read write };
allow svnserve_t nfs_t:file { getattr unlink append open read setattr write lock create rename };

... comprobado, compilado, instalado, funciona. Puede que sea un poco más restrictivo, pero por el momento estoy contento de que funcione como se esperaba.

información relacionada