У меня есть сервер Centos 7.9, работающий с Apache и Git, однако, если я сделаю
[root@a]# git status
fatal: Out of memory? mmap failed: Permission denied
Но если отключить или разрешить SE-Linux с помощью приведенных ниже команд, то все начнет работать нормально.
setenforce Permissive
Есть идеи, как решить эту проблему навсегда при включенном SELinux?
В журнале аудита говорится:
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
решение1
Проблема в этом файле, который вы сопоставляете:
/www/site/.git/index
Однако этот файл имеет тип httpd_t
, который на самом деле не является допустимым типом файла, а представляет собой процесс (или тип домена, как его называют).
Вероятно, вам следует установить контекст /www
как , httpd_sys_content_t
или если вы хотите разрешить веб-серверу писать в него httpd_sys_content_rw_t
.
Если бы мне пришлось угадывать, я бы предположил, что вы сделали это chcon -t httpd_t
по /www
ошибке.
Лучшим способом исправить это будет сброс и восстановление контекстов файлов:
# semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?'
# restorecon -rv /www
Это должно задать правильный контекст и предотвратить будущие контекстные ошибки.
Затем проверьте git status
еще раз, чтобы убедиться, что все работает.