.png)
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 enforced
todo funciona como se esperaba. El problema: no se puede agregar svnserve_content_t
tipo a /mnt/data/svn
travé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_t
no válido o no puedo asignarlo nfs_t
y svnserve_content_t
al 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 search
los 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.