SELinux-Problem – Git-Status fatal: Nicht genügend Arbeitsspeicher? mmap fehlgeschlagen: Berechtigung verweigert

SELinux-Problem – Git-Status fatal: Nicht genügend Arbeitsspeicher? mmap fehlgeschlagen: Berechtigung verweigert

Ich habe einen Centos 7.9 Server mit Apache und Git am Laufen, aber wenn ich

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

Wenn Sie SE-Linux jedoch mit den folgenden Befehlen deaktivieren oder zulassen, funktioniert es einwandfrei.

setenforce Permissive

Irgendeine Idee, wie dieses Problem bei aktiviertem SELinux dauerhaft behoben werden kann?

Das Überwachungsprotokoll besagt

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

Antwort1

Das Problem ist diese Datei, die Sie zuordnen:

/www/site/.git/index

Dieser Dateityp ist httpd_tjedoch kein wirklich gültiger Dateityp, sondern ein Prozess (oder Domänentyp, wie er genannt wird).

Sie sollten den Kontext wahrscheinlich auf oder festlegen, /wwwwenn httpd_sys_content_tSie dem Webserver das Schreiben dort erlauben möchten httpd_sys_content_rw_t.

Wenn ich raten müsste, würde ich davon ausgehen, dass Sie versehentlich einen Fehler gemacht chcon -t httpd_thaben /www.

Der beste Ansatz zum Beheben dieses Problems besteht im Zurücksetzen und Wiederherstellen der Dateikontexte:

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

Dadurch sollte der richtige Kontext festgelegt und zukünftigen Kontextfehlern vorgebeugt werden.

Testen Sie es dann git statuserneut, um zu überprüfen, ob es funktioniert hat.

verwandte Informationen