CentOS에서 gitweb.cgi에 대한 권한이 거부되었습니다.

CentOS에서 gitweb.cgi에 대한 권한이 거부되었습니다.

내 웹 서버에 gitweb을 설정했습니다. 서버에 프로젝트를 만들었습니다. 여기에 커밋을 추가하고 원격으로 복제할 수도 있습니다.

git.website를 방문하면 gitweb "홈페이지"가 ​​표시되고 CSS, 로고, 파비콘과 같은 정적 파일이 로드됩니다.

문제는 다음 메시지만 표시된다는 것입니다. 해당 프로젝트를 찾을 수 없습니다.발견.. 웹페이지를 새로 고칠 때마다 /var/log/httpd/error_log에 다음이 표시됩니다.

[Wed Aug 04 00:39:32.321352 2021] [cgid:error] [pid 44346:tid 140132795492096] [client MY_HOME_IP:37700] fatal: mmap failed: Permission denied: /var/www/git/gitweb.cgi, referer: https://git.mydomain.abc/

나는 httpd가 apache 사용자로 실행되고 있고 /var/www의 소유권도 apache로 설정되어 있음을 확인했습니다. 권한이 올바르게 설정되었다고 생각합니다.

[root@git ~]# ps auxw | grep httpd
root       44780  0.2  1.6 281804 13828 ?        Ss   00:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache     44782  0.0  1.0 295684  8876 ?        S    00:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache     44783  0.0  1.7 1484604 14712 ?       Sl   00:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache     44784  0.0  2.2 1353476 18956 ?       Sl   00:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache     44785  0.0  2.0 1353476 16760 ?       Sl   00:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache     45019  0.0  1.7 1353476 14708 ?       Sl   00:48   0:00 /usr/sbin/httpd -DFOREGROUND
root       45141  0.0  0.1 221928  1140 pts/0    S+   00:48   0:00 grep --color=auto httpd
[root@git ~]# ls -ld /var/ /var/www/ /var/www/git/ ; ls -lZ /var/www/git/gitweb.cgi 
drwxr-xr-x. 21 root   root   4096 Aug  2 18:16 /var/
drwxr-xr-x.  5 apache apache   44 Aug  2 18:23 /var/www/
drwxr-xr-x.  8 apache apache  179 Aug  4 00:18 /var/www/git/
-rwxr-xr-x. 1 apache apache system_u:object_r:git_script_exec_t:s0 253816 Jul 20  2020 /var/www/git/gitweb.cgi
[root@git ~]# 

/etc/gitweb.conf

$projectroot = '/var/www/git/';
$git_temp = "/tmp";
$stylesheet = "static/gitweb.css";
$logo = "static/git-logo.png";
$favicon = "static/git-favicon.png";

/etc/httpd/conf.d/gitweb-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName git.mydomain.abc 
    DocumentRoot /var/www/git
    <Directory /var/www/git>
        SetEnv  GITWEB_CONFIG  /etc/gitweb.conf
        Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride All
        order allow,deny
        Allow from all
        AddHandler cgi-script .cgi
        DirectoryIndex gitweb.cgi
    </Directory>
    <Files gitweb.cgi>
        SetHandler cgi-script
    </Files>
SSLCertificateFile /etc/letsencrypt/live/git.mydomain.abc/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/git.mydomain.abc/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

누군가 내가 잘못한 것을 본다면 조언을 해주시면 정말 감사하겠습니다. 감사합니다!

편집1: 그리고 여기에 audit.log가 있습니다.

type=SYSCALL msg=audit(1628072069.412:134): arch=c000003e syscall=9 success=no exit=-13 a0=0 a1=b9 a2=1 a3=2 items=0 ppid=2911 pid=2917 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="git" exe="/usr/bin/git" subj=system_u:system_r:git_script_t:s0 key=(null)ARCH=x86_64 SYSCALL=mmap AUID="unset" UID="apache" GID="apache" EUID="apache" SUID="apache" FSUID="apache" EGID="apache" SGID="apache" FSGID="apache"
type=PROCTITLE msg=audit(1628072069.412:134): proctitle=2F7573722F62696E2F676974002D2D6769742D6469723D2F7661722F7777772F6769742F2F796F75747562652D646C2D62617463682E67697400666F722D656163682D726566002D2D666F726D61743D2528636F6D6D697474657229002D2D736F72743D2D636F6D6D697474657264617465002D2D636F756E743D3100726566
type=AVC msg=audit(1628072069.433:135): avc:  denied  { map } for  pid=2919 comm="git" path="/var/www/git/myrepo01.git/objects/1c/1c5ca1a07da5187a696cd1661d6b2a734ad98c" dev="vda1" ino=36639 scontext=system_u:system_r:git_script_t:s0 tcontext=unconfined_u:object_r:git_content_t:s0 tclass=file permissive=0

편집2 문제는 제가 전문가가 아닌 SELinux로 귀결됩니다. 모드를 다음으로 변경합니다.허용적이제 내 저장소를 모두 볼 수 있습니다. 하지만 어떻게 작동하게 만들 것인지 알아내야 합니다.시행방법..

답변1

좋습니다. 제가 몰랐던 것은 audit2why 및 audit2allow 명령이었습니다. 다음과 같이 문제 범위를 좁힌 후편집2SELinux로 이동하고 로그를 audit2로 전달한 이유는 다음과 같습니다.

The boolean domain_can_mmap_files was set incorrectly.

그리고 나는 다음을 수행해야 합니다:

Allow access by executing:
# setsebool -P domain_can_mmap_files 1

참조:https://forums.centos.org/viewtopic.php?t=71917

이제 이 문제가 해결되었습니다. 감사해요

관련 정보