[server] 아파치에 의하면 DocumentRoot는 존재하지 않을 때

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.

보다 영구적으로 변경 하려면 semanagerestorecon 을 사용하십시오 . 간단한 예 :

 $ 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

참고 : semanageseinfo 와 같은 유틸리티 는 기본적으로 설치되지 않을 수 있습니다. 최소한 일부 배포판에서 필요한 패키지의 이름은 다음과 같습니다.

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세부 사항 보안 역할을 보는 데 사용


답변