svnserve com selinux no nfs mount incapaz de iniciar (Centos8)

svnserve com selinux no nfs mount incapaz de iniciar (Centos8)

pode ser uma pergunta boba. Lutando com meu servidor Subversion em um Centos8 com selinux aplicado. Temos uma montagem NFS para armazenar os dados ( /mnt/data/svn).

O problema (quando o selinux está no modo de aplicação) é que o serviço não inicia porque não tem permissão para acessar /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.

Ambiente SVN: /etc/sysconfig/svnserve:

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

Permissões de diretório: Recursivo ...

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

Configuração SE: via 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

Sem o selinux enforcedtudo funciona conforme o esperado. O problema: não é possível adicionar svnserve_content_ttipo /mnt/data/svnvia semanage:

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

Parece snvserve_content_tinválido ou não consigo atribuir nfs_te svnserve_content_tao mesmo tempo. Sou o fim das boas ideias. Muito provavelmente existe uma solução super simples e já estou muito feliz com qualquer ideia (desativar a aplicação do selinux não é uma opção).

Muito obrigado antecipadamente,

R

Responder1

Minha solução

O log de auditoria realmente mostra o que estava errado:

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

Nenhuma permissão para searchos diretórios. Minha solução foi escrever um módulo/regra de política 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 };

... verificado, compilado, instalado, funciona. Pode ser um pouco mais restritivo, mas no momento estou feliz que funcione conforme o esperado.

informação relacionada