오늘은 Apache 서버에서 사용자 디렉터리를 구성해 보겠습니다. 어려운 문제가 발생했습니다. 구성 프로세스, 문제 및 해결 방법은 다음과 같습니다.
1. 기존 구성:
사용자 웹 추가:
추가 사용자 웹
암호 웹
웹 사용자 디렉터리에 public_html 디렉터리를 만들고 권한을 755로 설정합니다.
mkdir public_html
chmod 755 public_html -R
/etc/http/httpd.conf를 수정합니다.
#
# UserDir: 사용자의 홈에 추가되는 디렉토리의 이름
# ~user 요청이 수신되면 디렉토리.
#
# 최종 사용자 계정 'public_html' 디렉터리의 경로는 다음과 같아야 합니다.
# 웹서버 사용자 ID에 액세스할 수 있습니다. 이는 일반적으로 ~userid를 의미합니다.
# 711 권한이 있어야 하며, ~userid/public_html에는 권한이 있어야 합니다.
#/755개 및 여기에 포함된 문서는 누구나 읽을 수 있어야 합니다.
# 그렇지 않으면 클라이언트는 "403 Forbidden" 메시지만 받게 됩니다.
#
# 참고: http://httpd.apache.org/docs/misc/FAQ.html#forbidden
#
<IfModule mod_userdir.c>
#
# UserDir은 존재 여부를 확인할 수 있으므로 기본적으로 비활성화되어 있습니다.
시스템의 사용자 이름 #(홈 디렉터리에 따라 다름)
# 권한).
#
#UserDir 비활성화
#
# 사용자의 public_html을 제공하기 위해 /~user/에 대한 요청을 활성화하려면
# 디렉토리에서 위의 "UserDir 비활성화" 행을 제거하고 주석 처리를 제거합니다.
# 대신 다음 줄을 사용하세요:
#
사용자 디렉터리 public_html
</If모듈>
2. 테스트 및 문제 발생:
http://127.0.0.1/~웹
====================================================
금지됨
이 서버의 /~web에 액세스할 수 있는 권한이 없습니다.
또한 ErrorDocument를 사용하여 요청을 처리하는 동안 403 Forbidden 오류가 발생했습니다.
------------------------------------- ----------------------------------
Apache/2.0.54(Fedora) 서버(127.0.0.1 포트 80)
일반적으로 이런 문제가 발생하면 떠오르는 문제는 해당 디렉터리의 접근 권한 문제입니다. 오랜 시간 동안 확인하고 조정한 후에도 문제가 해결되지 않았습니다. 이 기간 동안 혹시 Selinux에 문제가 있는 것은 아닌가 하고 들어가서 둘러보았지만 딱히 바꿀 점은 없었습니다. (나중에 사실은 때로는 직관이 매우 정확하다는 것을 증명합니다. 답을 찾을 수 있는지 여부의 차이는 직관에 더 깊이 들어가는지 여부에 따라 결정되는 경우가 많습니다.)
3. 문제 해결 Google에서 오랫동안 Apache 403을 검색한 후 마침내 블로그에서 작성자가 나와 똑같은 문제에 직면했다는 것을 확인했습니다. Apache의 구성과 디렉토리는 괜찮았지만 페이지가 표시되지 않습니다. 해결책은 Selinux의 액세스 제어를 public_html로 수정하는 것입니다.
폴더 보안 속성을 수정하려면 다음 명령을 사용하십시오.
chcon -R -t httpd_user_content_t public_html/
4. 관련 지식 요약:
Fedora Core 5 SELinux FAQ
http://fedora.redhat.com/docs/selinux-faq-fc5/#faq-entry-public_html Q: SELinux에서 사용자 public_html 디렉토리가 작동하도록 하려면 어떻게 해야 합니까?
A: 이 프로세스에서는 Apache 구성 파일 /etc/httpd/conf/httpd.conf에서 사용자 공개 HTML 디렉터리를 활성화했다고 가정합니다. 이 프로세스에서는 Apache HTTP 및 SELinux에 대한 자세한 내용을 참조하세요. http://fedora.redhat.com/docs/selinux-apache-fc3/.
~/public_html 디렉터리가 아직 없는 경우 해당 디렉터리를 만들고 제공할 파일과 폴더로 채웁니다.
cd ~mkdir public_htmlcp /path/to/content ~/public_html
이 시점에서 httpd는 콘텐츠를 제공하도록 구성되었지만 여전히 403 금지 오류가 발생합니다. 이는 httpd가 사용자의 홈 디렉터리에 생성된 디렉터리 및 파일에 대한 보안 유형을 읽을 수 없기 때문입니다. -R 옵션을 사용하여 폴더와 해당 내용의 보안 컨텍스트를 재귀적으로 사용합니다.
ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:user_home_t public_htmlchcon -R -t httpd_user_content_t public_html/ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:httpd_user_content_t public_html/ls -Z public_html/- rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t bar.html-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t baz.html-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t foo.html
나중에 여기서 user_u로 설정된 사용자 필드가 system_u로 변경되는 것을 확인할 수 있습니다. 이는 대상 정책의 작동 방식에 영향을 미치지 않습니다. 중요한 필드는 유형 필드입니다.
이제 정적 웹페이지가 올바르게 제공됩니다. 오류가 계속 발생하면 system-config-securitylevel을 사용하여 설정할 수 있는지 확인하고 SELinux 수정을 선택하세요. 정책 영역에서 HTTPD가 홈 디렉터리를 읽도록 허용을 선택합니다. 변경 사항은 즉시 적용됩니다.
사용된 명령 분석:
ls -Z -d public_html/
#파일/디렉토리의 보안 컨텍스트 표시 -Z, --context
대부분의 디스플레이에 맞도록 보안 컨텍스트를 표시합니다. 모드, 사용자, 그룹, 보안 컨텍스트 및 파일 이름만 표시합니다.-d, --directory
내용 대신 디렉토리 항목을 나열하고 기호 링크를 역참조하지 않습니다.
chcon -R -t httpd_user_content_t public_html/
#파일/디렉터리의 보안 컨텍스트 수정 -R, --recursive
파일과 디렉터리를 재귀적으로 변경합니다.-t, --type
대상 보안 컨텍스트에서 유형 유형을 설정하십시오.