Apache 2.4가 포함된 CentOS 7은 루트 웹 디렉터리를 변경한 후 콘텐츠를 제공하지 않습니다.

Apache 2.4가 포함된 CentOS 7은 루트 웹 디렉터리를 변경한 후 콘텐츠를 제공하지 않습니다.

/var/www/htmlApache 웹 서비스의 루트 웹 디렉터리를 내 사용자 정의 디렉터리로 변경하려고 합니다 /mnt/webfiles. 그러나 /etc/httpd/conf/httpd.conf매개변수를 구성하고 재부팅한 후에도 httpd내 테스트 디렉터리/파일을 여전히 웹에서 탐색할 수 없습니다.

환경은 다음과 같습니다.
운영체제: CentOS 7.9.2009
Apache 버전: 2.4.6
운영체제 설치 유형: 기본 웹서버

Apache 웹을 사용하는 목적은 단지 테스트를 위한 것입니다. 서버에는 웹 페이지를 탐색하는 데 클라이언트의 IP 주소만 필요합니다.

/var/www/html간단한 웹 페이지 역할을 하는 간단한 .txt나 download다운로드 페이지를 시뮬레이션하기 위해 파일이 포함된 하위 디렉터리 와 같은 기본 디렉터리를 사용하여 테스트 파일을 배치하면 모든 것이 잘 작동합니다. 브라우저를 통해 웹을 탐색할 수 있습니다.

그러나 내 특정 디렉토리로 변경한 후에는 DocumentRoot "/var/www/html"아래 테스트 파일/디렉토리에 Directory "/var/www"액세스할 수 없으며 브라우저에 다음 오류 메시지가 나타납니다./mnt/webfiles/mnt/webfiles

Forbidden
You don't have permission to access /download/ on this server.

기본 Apache 웹페이지만 탐색할 수 있으며 영향을 받지 않습니다.

내가 한 일은 아래 지침을 따르는 것이었습니다.이 게시물그리고이것,

그런데 아파치 웹 루트 디렉터리의 파일/디렉터리 권한은 모두 root:root775, 입니다 /var/www/html.
이것이 근본 원인은 아닌 것 같습니다.

왜 이런 일이 일어나는지 아는 사람이 있나요?

답변1

가능한 대답 중 하나는 SELinux가 새로운 Webroot를 거부한다는 것입니다.

SELinux가 활성화되어 있는지 확인하십시오.

$ getenforce
Enforcing

EnforcingSELinux가 활성화되어 있고 규칙이 시행된다는 의미입니다. SElinux가 있는지 빠르게 확인하세요.진짜 문제는 일시적으로 비활성화하는 것입니다.

$ setenforce 0

웹페이지를 다시 로드하고 이제 작동한다면 SELinux가 원인일 가능성이 높습니다.

하지만 이 문제를 영구적으로 해결하는 방법아니요SELinux를 비활성화해야 합니까?

조사하다옳은네트워크 루트의 컨텍스트:

$ ll -Z /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 .
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 ..

라벨 에 주의하세요 httpd_sys_content_t!

이는 현재 사용 중인 새 Webroot와 다를 수 있습니다 /mnt/webfiles.

SELinux 정책에서 새 웹 루트에 대한 올바른 컨텍스트를 정의해야 합니다. 이 작업을 수행:

# This sets correct context in the policy
$ semanage fcontext -a -t httpd_sys_content_t "/mnt/webfiles(/.*)?" 

# This applies the context to the webroot
$ restorecon -v /mnt/webfiles

그런 다음 작동하는지 확인하십시오. SELinux를 다시 활성화해야 합니다. 그렇지 않으면 실제로 테스트할 수 없습니다. :-)

$ setenforce 1

거부를 확인하려면 다음과 같이 SELinux AVC 거부 로그를 볼 수 있습니다.

$ ausearch -ts recent -m avc

또한 웹 루트에 대한 쓰기 액세스가 필요한 경우 컨텍스트를 에서 로 변경 httpd_sys_content_t하거나 SELinux 부울을 다음으로 httpd_sys_rw_content_t설정 해야 할 수도 있습니다 .httpd_unifiedtrue

$ setsebool -P httpd_unified 1

관련 정보