/var/www/html
Apache 웹 서비스의 루트 웹 디렉터리를 내 사용자 정의 디렉터리로 변경하려고 합니다 /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:root
및 775
, 입니다 /var/www/html
.
이것이 근본 원인은 아닌 것 같습니다.
왜 이런 일이 일어나는지 아는 사람이 있나요?
답변1
가능한 대답 중 하나는 SELinux가 새로운 Webroot를 거부한다는 것입니다.
SELinux가 활성화되어 있는지 확인하십시오.
$ getenforce
Enforcing
Enforcing
SELinux가 활성화되어 있고 규칙이 시행된다는 의미입니다. 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_unified
true
$ setsebool -P httpd_unified 1