Configure o selinux para permitir o openldap no CentOS 6.4

2

Estou tentando executar um servidor OpenLDAP no CentOS 6.4 com o selinux habilitado, mas slapd está morrendo assim que é iniciado via /etc/init.d/slapd start . (o script de inicialização informa OK; tudo funciona bem depois de setenforce 0 .

encontrou essas mensagens em /var/log/audit/audit.log :

type=AVC msg=audit(1372888328.397:3262): avc:  denied  { write } for  pid=1492 comm="slapd" name="slapd.log" dev=dm-0 ino=4348 scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file
type=SYSCALL msg=audit(1372888328.397:3262): arch=40000003 syscall=5 success=no exit=-13 a0=1bd1018 a1=241 a2=1b6 a3=7ea191 items=0 ppid=1491 pid=1492 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=337 comm="slapd" exe="/usr/sbin/slapd" subj=unconfined_u:system_r:slapd_t:s0 key=(null)
type=AVC msg=audit(1372888328.408:3263): avc:  denied  { sys_nice } for  pid=1492 comm="slapd" capability=23  scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:system_r:slapd_t:s0 tclass=capability
type=SYSCALL msg=audit(1372888328.408:3263): arch=40000003 syscall=156 success=yes exit=0 a0=5d4 a1=0 a2=bfe64968 a3=b787a6c0 items=0 ppid=1491 pid=1492 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=337 comm="slapd" exe="/usr/sbin/slapd" subj=unconfined_u:system_r:slapd_t:s0 key=(null)
type=AVC msg=audit(1372888328.424:3264): avc:  denied  { read } for  pid=1493 comm="slapd" name="log.0000000001" dev=dm-0 ino=263969 scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file
type=SYSCALL msg=audit(1372888328.424:3264): arch=40000003 syscall=5 success=no exit=-13 a0=1c78270 a1=8000 a2=0 a3=0 items=0 ppid=1 pid=1493 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=337 comm="slapd" exe="/usr/sbin/slapd" subj=unconfined_u:system_r:slapd_t:s0 key=(null)

No entanto, isso me deixa sem ideia de como consertar isso. Como eu digo ao selinux para permitir que o daemon do LDAP seja executado?

Eu tentei

restorecon -v -F -R /etc/openldap
restorecon -v -F -R /var/lib/ldap

mas isso não funcionou (e, de fato, parece ter quebrado minha capacidade de iniciar o slapd mesmo com o selinux desativado ). Tenho um monte de mensagens como

restorecon reset /etc/openldap/cacerts context unconfined_u:object_r:etc_t:s0->system_u:object_r:etc_t:s0

    
por Brad Mace 05.07.2013 / 18:08

1 resposta

3

Se você filtrar os registros de auditoria por meio de audit2allow(1) e audit2why , terá uma ideia aproximada do que está acontecendo:

#============= slapd_t ==============
allow slapd_t self:capability sys_nice;
allow slapd_t var_log_t:file { write read };
------------------------------------

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1372888328.408:3263): avc:  denied  { sys_nice } for  pid=1492 comm=slapd capability=23  scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:system_r:slapd_t:s0 tclass=capability

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1372888328.424:3264): avc:  denied  { read } for  pid=1493 comm=slapd name=log.0000000001 dev=dm-0 ino=263969 scontext=unconfined_u:system_r:slapd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=file

    Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.

Verificação da rotulagem

É improvável que uma restauração de rótulo impeça que você inicie um serviço se o SELinux estiver em modo permissivo . Além disso, por que a opção -F ?

Para saber se você precisa restaurar a rotulagem de um diretório ou arquivo, primeiro descubra o contexto que um arquivo ou diretório deve ter:

# matchpathcon /etc/openldap/
/etc/openldap   system_u:object_r:etc_t:s0

Em seguida, liste seu contexto de segurança:

# ls -ldZ /etc/openldap/
drwxr-xr-x. root root system_u:object_r:etc_t:s0       /etc/openldap//

Neste exemplo, nenhuma ação adicional é necessária.

Com relação ao seu problema, o problema não é rotular per se , mas uma regra type enforcement ausente, ou seja, uma regra que permite que um processo rotulado seja transição de um domínio confinado para outro, ou para ler arquivos com um rótulo específico, por exemplo.

Criando um módulo SELinux

Você pode tentar criar um módulo que permita que o slapd_t realize as operações que apareceram no audit.log . É provável que você precise de mais ajustes no seu código. Use audit2allow e make para esta tarefa. Todos os comandos estão bem documentados em suas respectivas páginas de manual. O processo será mais ou menos assim (depois de copiar as mensagens relevantes em audit.txt ):

audit2allow -i audit.txt -m slapd -o slapd.te
make -f /usr/share/selinux/devel/Makefile load

Além disso, verifique se já existe um relatório de erros para a política do SELinux referente a este problema.

    
por 05.07.2013 / 19:05