Problema do SELinux - git status fatal: Sem memória? mmap falhou: permissão negada

Problema do SELinux - git status fatal: Sem memória? mmap falhou: permissão negada

Tenho o servidor Centos 7.9 rodando com Apache e Git, porém se eu fizer um

[root@a]# git status
fatal: Out of memory? mmap failed: Permission denied

Mas se desabilitar ou permitir o SE-Linux por meio dos comandos abaixo, ele começará a funcionar bem.

setenforce Permissive

Alguma ideia de como corrigir esse problema permanentemente com o SELinux habilitado?

O registro de auditoria diz

node=a type=PROCTITLE msg=audit(1630636505.296:37076): proctitle=67697400737461747573
node=a type=MMAP msg=audit(1630636505.296:37076): fd=3 flags=0x2
node=a type=SYSCALL msg=audit(1630636505.296:37076): arch=c000003e syscall=9 success=no exit=-13 a0=0 a1=3ebd0 a2=3 a3=2 items=0 ppid=8008 pid=8156 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=570 comm="git" exe="/usr/bin/git" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
node=a type=AVC msg=audit(1630636505.296:37076): avc:  denied  { map } for  pid=8156 comm="git" path="/www/site/.git/index" dev="sda2" ino=540400 scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:httpd_t:s0 tclass=file permissive=0

Responder1

O problema é este arquivo que você está mapeando:

/www/site/.git/index

Este arquivo tem um tipo httpd_tque, na verdade, não é um tipo de arquivo legítimo, mas sim um processo (ou tipo de domínio, como é conhecido).

Você provavelmente deve definir o contexto /wwwcomo sendo httpd_sys_content_tou se deseja permitir que o servidor web grave nele httpd_sys_content_rw_t.

Se eu tivesse que adivinhar, presumiria que você cometeu um chcon -t httpd_terro /www.

A melhor abordagem para corrigir isso corretamente será redefinir e restaurar os contextos dos arquivos:

# semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?'
# restorecon -rv /www

Isto deve definir o contexto correto e evitar futuros contratempos de contexto.

Em seguida, teste git statusnovamente para verificar se funcionou.

informação relacionada