Webmin을 사용하여 다음 가상 호스트를 작성했습니다.
<VirtualHost *:80>
DocumentRoot "/var/www/whatever"
ServerName whatever.ourdomain
<Directory "/var/www/whatever">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
그리고 Apache를 다시 시작할 때
Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist
문제는 디렉토리가 절대적으로 존재한다는 것입니다. 나는 똑바로보고있다. pwd
그것이 현재 디렉토리 등을 보여줍니다. 철자를 정확하게 입력하는 것은 어렵지 않습니다. httpd 로그에서 다른 오류나 경고를 찾을 수 없습니다. apache : apache는 디렉토리와 모든 서브 디렉토리 / 파일을 소유합니다. 여기에 관련된 심볼릭 링크 또는 아무것도 없습니다. 이것이 무엇인지, 왜 이것이 아닌지 판단하기 위해 무엇을 봐야합니까?
OS는 CentOS 6.0입니다
답변
내 마음에 떠오른 첫 번째 것은 Apache가 해당 디렉토리에 액세스 할 수있는 권한이 있습니까?
또한 이것은 /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist
답변
다음은 SELinux 사례에 대한 자습서 접근 방식입니다.
SELinux가 활성화되어 있는지 확인하십시오.
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
그렇다면 일부 비교 검사가 도움이 될 수 있습니다. 예를 들어 서버의 기본 DocumentRoot는 /var/www/html
에 있지만 다른 곳에서는 원합니다 /path/to/document/root
.
SELinux가 자원을 적극적으로 망쳐 놓지 않으면 ls -dZ
디렉토리에 다음과 같이 표시됩니다.
$ ls -dZ /path/to/document/root
? /path/to/document/root/
반면에 SELinux 컨텍스트가 적용되면 ls -dZ
다음과 같습니다.
$ ls -dZ /path/to/document/root
drwxrws--x+ cfgadm cfgadmin system_u:object_r:file_t:s0 /path/to/document/root
작동하는 DocumentRoot와 비교하면 다음과 같습니다.
$ ls -dZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
_r
와 _t
관련 -r
( --role
및 -t
( --type
인수) chcon
여기에 컷 다운 사람의 페이지입니다. :
NAME
chcon - change file security context
SYNOPSIS
chcon [OPTION]... CONTEXT FILE...
chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
DESCRIPTION
Change the security context of each FILE to CONTEXT. With --reference,
change the security context of each FILE to that of RFILE.
--reference=RFILE
use RFILE's security context rather than specifying a CONTEXT value
-R, --recursive
operate on files and directories recursively
처음에는 다음과 같이 작동하지만 보이지 않을 수 있습니다.
$ sudo chcon -R -t httpd_sys_content_t /path/to/document/root
웹 서버가 여전히 DocumentRoot를 볼 수없는 경우 컨텍스트는 루트로 거슬러 올라갑니다.
$ sudo chcon -R -t httpd_sys_content_t /path/to/document
$ sudo chcon -R -t httpd_sys_content_t /path/to
$ sudo chcon -R -t httpd_sys_content_t /path
이 시점에서 웹 서버는 디렉토리를 볼 수 있습니다.
네, 오늘 밤 어려운 길을 배웠습니다.
참고 : chcon 사용은 개념적으로 RedHat 문서 ( 5.6.1. 임시 변경 : chcon )에 따라 다음과 같은 단점 이 있습니다.
The chcon command changes the SELinux context for files. However, changes
made with the chcon command do not survive a file system relabel, or the
execution of the restorecon command.
보다 영구적으로 변경 하려면 semanage 및 restorecon 을 사용하십시오 . 간단한 예 :
$ sudo semanage fcontext --add -t httpd_sys_content_t -s system_u \
"/path/to/document/root(/.*)?"
$ sudo restorecon -FR /path/to/document/root
에 관해서 restorecon , 참고 -F가 필요합니다 전체 컨텍스트 (즉, 사용자와 유형)에 영향을 줄 수 있습니다. 또한 -R 은 재귀 적으로 변경하는 것을 의미합니다. 인수 -v 또는 -p 는 자세한 방식 또는 간결한 방식으로 진행 상황을 표시 할 수 있습니다. 실제로 변경하지 않고 어떤 일이 발생하는지 보려면 -FRnv 를 사용하십시오 .
이러한 방식으로 semanage 를 사용 하면 다음 과 같은 명령으로 로컬 보안 변경 사항을 볼 수 있습니다.
$ sudo semanage export
의미 체계 내보내기 의 출력은 의미 체계 가져 오기 에 의해 저장되고 사용되어 다양한 시스템에 일련의 변경 사항을 쉽게 적용 할 수 있습니다.
참고 :이 답변은 사이트에 대한 가장 기본적인 유형 컨텍스트를 제공합니다. 보안은 훨씬 세분화 될 수 있습니다. 예를 들어, 다음과 같은 명령을 사용하여 웹 서버 페이지에 적용 할 수있는 유형 목록을 참조하십시오.
$ seinfo -t | grep http
참고 : semanage 및 seinfo 와 같은 유틸리티 는 기본적으로 설치되지 않을 수 있습니다. 최소한 일부 배포판에서 필요한 패키지의 이름은 다음과 같습니다.
policycoreutils-python
setools-console
답변
SELinux처럼 들리므로 작업을 제안합니다. / var / log / audit 디렉토리에서 확인하십시오.
최악의 경우, 앞서 언급 한 것처럼 항상 selinux를 끌 수 있지만 대신 작업 해 보는 것이 좋습니다. 예를 들어, Apache와 함께 사용할 디렉토리를 작성하는 경우 여기에 언급 된대로 올바른 컨텍스트가 없습니다.
[root@amp23140 www]# ls -Z
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 whatever
그래서 그런 일이 발생하면 다른 디렉토리의 컨텍스트를 적용합니다.이 경우 html입니다.
[root@amp23140 www]# chcon whatever --reference=html
[root@amp23140 www]# ls -lZ
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 whatever
답변
Apache에서 실행할 수있는“httpd_sys_content_t”의 보안 컨텍스트를 변경하려면 루트에서이 명령을 사용하십시오.
chcon -R -h -t httpd_sys_content_t /var/www/whatever
ls -dZ /var/www/whatever
세부 사항 보안 역할을 보는 데 사용