kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

OS

Apache Permission 문제 (403 Forbidden error)

까마기 2014. 9. 12. 14:37
반응형

1. httpd.conf 의 권한 설정

실수인지 어쩐지는 모르지만 아래와 같이 <Directory> 설정 지시 부분에 "Deny from all"이란 내용이 있는 경우가 있다. 당연히 모든 접근을 제한한다는 것이니 403 Forbidden 이 발생하겠지.
<Directory /home/...>
     .
     .
     .
    Order deny, allow
    Deny from all
</Directory>



아래와 같이 "Allow from all"로 표시하면 모든 접근이 정상적으로 이뤄질 것이며,
<Directory /home/...>
     .
     .
     .
    Order allow, deny
    Allow from all
</Directory>



특정한 IP 만 접근을 제한한다면 아래와 같이 특정한 IP를 deny 시키면 된다.

<Directory /home/...>

     .

     .

     .
    Order deny,allow
    deny from 125.165.169.111 114.124.12.
    allow from all
</Directory>

httpd.conf 파일 설정 
===================================================== 
ServerName apple.test.com:80 
DocumentRoot    "/home/apple/html" 
<Directory "/home/apple/html"> 
  # 
    # Possible values for the Options directive are "None", "All", 
    # or any combination of: 
    #  Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews 
    # 
    # Note that "MultiViews" must be named *explicitly* --- "Options All" 
    # doesn't give it to you. 
    # 
    # The Options directive is both complicated and important.  Please see 
    # http://httpd.apache.org/docs/2.2/mod/core.html#options 
    # for more information. 
    # 
    Options Indexes FollowSymLinks 
    # 
    # AllowOverride controls what directives may be placed in .htaccess files. 
    # It can be "All", "None", or any combination of the keywords: 
    #  Options FileInfo AuthConfig Limit 
    # 
    AllowOverride None 
    # 
    # Controls who can get stuff from this server. 
    # 
    Order allow,deny 
    Allow from all 
</Directory> 
# Virtual hosts 
Include conf/extra/httpd-vhosts.conf //주석 제거 
===================================================== 
conf/extra/httpd-vhosts.conf 파일 설정 
===================================================== 
NameVirtualHost 192.168.10.3 
<VirtualHost apple.test.com:80> 
        ServerAdmin webdev@test.com 
        DocumentRoot "/home/apple/html" 
        ServerName apple.test.com 
</VirtualHost> 
<VirtualHost banana.test.com:80> 
        ServerAdmin webdev@test.com 
        DocumentRoot "/home/banana/html" 
        ServerName banana.test.com 
<Directory "/home/banana/html"> 
        Options Indexes FollowSymLinks 
        AllowOverride None 
        Order allow,deny 
        Allow from all 
</Directory> 
</VirtualHost> 
===================================================== 




<Directory "/home/paint/vhost">

    Options FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

</Directory>




2. 디렉터리 퍼미션(Directory Permission)

httpd.conf 의 설정에 문제가 없다면, 디렉터리 퍼미션을 확인해 보자.

웹브라우저로 홈페이지를 본다는 것은 웹서버가 실행되는 계정(nobody 또는 apache 등)으로 해당 디렉터리를 읽는는 것이다.

즉, 웹서버가 실행되는 계정으로 해당 디렉터리에 접근이 되지 않으면 당연히 403 Forbidden 이 발생하겠지.
# chmod o+x /home/...
or
# chmod 711 /home/...
# ls -al /home/...
drwx--x--x 21 abcd     abcd     4096 Mar 24 10:44 /home/...


디렉터리를 위와 같이 했는데도 같은 문제가 있다면 하위 디렉터리 및 파일들을 살펴보자.

웹루트 디렉터리를 위와 같이 설정하듯이 하위 디렉터리나 파일도 웹서버가 실행되는 계정으로 읽을 수 있어야 문제가 발생하지 않는다.



참고로 특정디렉터리의 하위 모든 파일 및 디렉터리의 권한을 변경하는 방법은...
* 모든 디렉터리의 권한을 711로 변경
# find /home/... -type d -exec chmod 711 {} \;

* 모든 파일의 권한을 644로 변경
# find /home/... -type f -exec chmod 644 {} \;

이것은 간편하긴 하나, 검색할 디렉터리(/home/...)를 잘못 지정하면 낭패를 볼 수 있으므로 주의해야 한다. "/" 에서 실행했다가는...



3. SELinux와 아파치 HTTP의 디렉토리 접근 설정

SELinux는 리눅스의 보안을 담당하는 프로그램이다. 최근에 나온 리눅스에는 대부분 SELinux가 구동되고 있다고 생각해도 된다. 이전에는 단순히 chmod를 통한 owner+group+others의 권한 만 제한하면 되었지만 SELinux는 그 이상의 접근 제어를 하게 되므로 잘 모르면 당황하게 된다.



잘 모르면 SELinux 설정에서 SELINUX=disabled 하여 구동을 중지할 수 있지만 그만큼 보안에 취약해지므로 권장하지는 않는다.

SELinux 설정 파일 : /etc/selinux/config



Shell에서 'ls -Z'를 해 보면 아래와 같이 파일이나 디렉터리의 보안 환경을 볼 수 있다.
# ls -Z /home/... 
drwx--x--x  abcd   abcd   user_u:object_r:user_home_dir_t  abcd
drwx--x--x  efgh    efgh    user_u:object_r:httpd_sys_content_t efgh

보안 환경에서 세번째 요소가 중요한 부분이다. HTTP 웹서버는 httpd_sys_content_t 타입 만 파일과 디렉토리 읽는 것을 허용한다. 위에서 보면 'abcd'는 user_home_dir_t로 되어 있기 때문에 웹서버에서 접근을 하면 403 Forbidden을 표시하고, 'efgh'는 httpd_sys_content_t로 되어 있기 때문에 접근이 가능하다.



이를 변경하는 방법은...
* 하나의 파일이나 디렉터리를 변경할 경우
# chcon -t httpd_sys_content_t /home/...

* chmod와 같이 하위 파일이나 디렉터리를 모두 변경할 경우
# chcon -R -h -t httpd_sys_content_t /home/...
-R : 하위 모든 파일과 디렉터리의 보안사항을 변경한다.
-h : 심볼릭링크를 따르지 않도록 한다.


반응형

'OS' 카테고리의 다른 글

Tomcat 8 설치  (0) 2014.09.12
Apache 동시 접속자 수 확인  (0) 2014.09.12
Apache 부하 체크 쉘 스크립트  (0) 2014.09.12
Apache SSL 패스워드 자동 실행  (0) 2014.09.12
Apache VirtualHost에 도메인 연결  (0) 2014.09.12