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


12

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입니다


아파치 사용자에게 su을 액세스 DocumentRoot하여 웹 서버에 표시되는 내용에 대한 통찰력을 얻을 수 있는지 확인하십시오. 당신은 또한 경로를 따라 다른 디렉토리를 확인하고 싶을 수도 있지만, 만약 실제로 /var/www/그 아래에 있다면 문제가되지 않아야합니다
voretaq7

답변:


8

내 마음에 떠오른 첫 번째 것은 Apache가 해당 디렉토리에 액세스 할 수있는 권한이 있습니까?

또한 이것은 /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist


1
내가 말했듯이, 예는 디렉토리가 소유하고 apache:apache있지만 그 링크 (어떤 이유로 SO에 있습니까?)를 따라 갔으며 실제로 SELinux가 문제였습니다. SELinux는 좋은 imo보다 더 많은 문제를 일으 킵니다.
Jake Wilson

selinux는 처음에는 성가신 일이지만 액세스 관리 명령을 알고 있다면 실제로 어려운 일이 아닙니다. 익숙해지면 사용하기에 좋은 도구입니다.
Rilindo

나는 같은 문제가 있었으며 (symlink에 존재하지 않음) setenforce 0그것을 실행하여 수정했지만 권한 ls-laZ을 보면 symlink는 chmod를 제외하고 액세스 할 수있는 다른 파일과 동일한 권한을 갖습니다. 파일은 -rw-r--r--이고 심볼릭 링크는 lrwxrwxrwx입니다. 이것이 setenforce 1에서 작동하지 않는 이유 일 수 있습니까?
TMH

@JakeWilson SELinux는 처음 익숙해지면 실망합니다. 사용 방법을 많이 배울수록 훨씬 더 감사하겠습니다.
스펜서 윌리엄스

16

다음은 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

상세하고 작동하며 많은 시간을 절약합니다. 감사합니다!
NorthBridge

6

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

0

Apache에서 실행할 수있는“httpd_sys_content_t”의 보안 컨텍스트를 변경하려면 루트에서이 명령을 사용하십시오.

chcon -R -h -t httpd_sys_content_t /var/www/whatever

ls -dZ /var/www/whatever세부 사항 보안 역할을 보는 데 사용

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.