open_basedir 설정하여 PHP 보안 강화 곰팡네나는 도서관/공부-서버-돌겠따2009/04/24 18:05
로빈아빠
본문
open_basedir 설정하여 PHP 보안 강화곰팡네나는 도서관/공부-서버-돌겠따2009/04/24 18:05
아직까지도 내부보안에 매우 약한 모습을 보이는 PHP이기에 PHPer로써 항상 이런 문제에 신경을 쓰게 마련입니다. 그중 항상 설치중 간과하기 쉬운 php.ini 옵션중의 하나인 open_basedir에 대해서 짚고 넘어가고자(까먹기 전에~ 에헤라 디야~!) 끄적거려 봅니다.
사실 PHP를 호스팅하는 입장에서는 내부 보안이 매우 신경쓰이게 됩니다. fopen이라던지, include 라던지 gzopen() 함수 등 내부적으로 매우 위험한 함수들이 많습니다. 게다가 이런 함수들을 disable_functions에 등록시켜 놓아 버리면 웹어플리케이션들이 모두 꽥~ 소리도 못내고 잠적들을 하시게 됩니다.(에러메세지라도 내보이게 해놓으면 다행~)
그냥 혼자서 사용하는 서버라면 신경안써도 되겠지만, 그렇지 못한 경우에는 어쩔 수 없이 fopen , fread 등등 많은 부분을 허용해야 하는 경우가 생깁니다. 서비스냐 보안이냐라는 문제가 나오게 되는 것이죠. 주로 include 는 include_path와 더불어 세팅하게 되고, 여기서 언급하게 되는 open_basedir은 fopen, fread 등의 위험한 함수들을 조금이나마 안전하게 사용할 수 있습니다.
★ 설정법
php.ini 옵션에서 찾아서 설정만 하시면 됩니다. 하나의 디렉토리 또는 다수의 디렉토리를 설정하실 수 있으며, 윈도우즈 OS에서는 각각의 디렉토리를 ;(세미콜론)으로 구분하며, 그외 유닉스 계열에서는 :(콜론)으로 구분합니다.
사용예) open_basedir = "d:/WebRoot;d/:/Temp;d:/TempSession/"
조심해야 할 점은 디렉토리명이 /(슬래시)로 끝나지 않을 경우 prefix(앞첨자)로 인식된다는 점입니다. 즉 /WebRoot 라고 지정하였을 경우 /WebRootAdmin , /WebRootArial 등도 해당된다는 것입니다. 특정 디렉토리(하위 디렉토리 포함)만 특정지을 경우에는 반드시 /(슬래시)로 끝나도록 지정하셔야 합니다.
다수의 웹호스팅 또는 보안을 강화하기 위한 옵션으로 open_basedir 설정 및 disable_functions, include_path 등을 이용하시면 적절한 PHP 내부 보안을 유지할 수 있을 것입니다.
사실 PHP를 호스팅하는 입장에서는 내부 보안이 매우 신경쓰이게 됩니다. fopen이라던지, include 라던지 gzopen() 함수 등 내부적으로 매우 위험한 함수들이 많습니다. 게다가 이런 함수들을 disable_functions에 등록시켜 놓아 버리면 웹어플리케이션들이 모두 꽥~ 소리도 못내고 잠적들을 하시게 됩니다.(에러메세지라도 내보이게 해놓으면 다행~)
그냥 혼자서 사용하는 서버라면 신경안써도 되겠지만, 그렇지 못한 경우에는 어쩔 수 없이 fopen , fread 등등 많은 부분을 허용해야 하는 경우가 생깁니다. 서비스냐 보안이냐라는 문제가 나오게 되는 것이죠. 주로 include 는 include_path와 더불어 세팅하게 되고, 여기서 언급하게 되는 open_basedir은 fopen, fread 등의 위험한 함수들을 조금이나마 안전하게 사용할 수 있습니다.
open_basedir을 설정하시게 되면 해당하는 디렉토리 및 하위 디렉토리에서만 파일을 열 수 있도록 제한됩니다. 안전모드와는 관계없이 사용가능하며, 심볼릭 링크도 영향을 받습니다. 즉 심볼릭 링크를 걸어 지정된 디렉토리외의 파일을 가져올 수도 없다는 의미입니다. 그리고 php.ini 가 아닌 httpd.conf 에서 php_admin_value 옵션으로 끄거나 설정할 수 있습니다. ini_set()을 이용하시면 범위를 더 강화(실질적으로 사용가능한 디렉토리를 좀더 제한한다는 의미)할 수도 있습니다.
PHP사이트의 매뉴얼中 ... http://php.benscom.com/manual/kr/ini.sect.safe-mode.php
PHP사이트의 매뉴얼中 ... http://php.benscom.com/manual/kr/ini.sect.safe-mode.php
★ 설정법
php.ini 옵션에서 찾아서 설정만 하시면 됩니다. 하나의 디렉토리 또는 다수의 디렉토리를 설정하실 수 있으며, 윈도우즈 OS에서는 각각의 디렉토리를 ;(세미콜론)으로 구분하며, 그외 유닉스 계열에서는 :(콜론)으로 구분합니다.
사용예) open_basedir = "d:/WebRoot;d/:/Temp;d:/TempSession/"
조심해야 할 점은 디렉토리명이 /(슬래시)로 끝나지 않을 경우 prefix(앞첨자)로 인식된다는 점입니다. 즉 /WebRoot 라고 지정하였을 경우 /WebRootAdmin , /WebRootArial 등도 해당된다는 것입니다. 특정 디렉토리(하위 디렉토리 포함)만 특정지을 경우에는 반드시 /(슬래시)로 끝나도록 지정하셔야 합니다.
다수의 웹호스팅 또는 보안을 강화하기 위한 옵션으로 open_basedir 설정 및 disable_functions, include_path 등을 이용하시면 적절한 PHP 내부 보안을 유지할 수 있을 것입니다.
-------------------------------------------
PHP 기본값은 open_basedir 처리 안되어 있기때문에 웹에서
타 계정 절대경로로 호출 할 수 있죠 (보안 허술)
<-- httpd.conf -->
생략
User apache
Group apache
생략
<-- End -->
abc 라는 계정이 있다면 (\ 한줄)
예제)
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@domain.com
DocumentRoot /home/abc/www
ServerName domain.com
ErrorLog /home/abc/logs/domain.com-error_log
CustomLog /home/abc/logs/domain.com-access_log \
combined
php_admin_value open_basedir /home/abc:\
/tmp:/var/tmp:/var/lib/php:/dev/shm
php_flag short_open_tag on
php_flag register_globals on
# Turn spelling support off \
(which would break URL shortcuts)
<IfModule mod_speling.c>
CheckSpelling Off
</IfModule>
</VirtualHost>
---------------------------------------------------------
# chmod 701 /home/abc
# chmod 710 /home/abc/www
# chown abc.apache /home/abc/www
---------------------------------------------------------
open_basedir 허용 디렉토리만 접근 가능
php_flag short_open_tag on
php_flag register_globals on
off 상태에서 사이트를 개발해야 하는데 그렇치 않은 소스가
많기 때문에 특정 유저를 on 으로 하시던가 아니면
.htaccess 로 조절
그 외 Safe Mode 도 신경 쓰셔야 할 겁니다.
PS. SELinux 사용 하신다면 chcon 명령어로 해당 디렉토리
접근 할 수 있도록 해 주셔야 할 겁니다.
타 계정 절대경로로 호출 할 수 있죠 (보안 허술)
<-- httpd.conf -->
생략
User apache
Group apache
생략
<-- End -->
abc 라는 계정이 있다면 (\ 한줄)
예제)
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@domain.com
DocumentRoot /home/abc/www
ServerName domain.com
ErrorLog /home/abc/logs/domain.com-error_log
CustomLog /home/abc/logs/domain.com-access_log \
combined
php_admin_value open_basedir /home/abc:\
/tmp:/var/tmp:/var/lib/php:/dev/shm
php_flag short_open_tag on
php_flag register_globals on
# Turn spelling support off \
(which would break URL shortcuts)
<IfModule mod_speling.c>
CheckSpelling Off
</IfModule>
</VirtualHost>
---------------------------------------------------------
# chmod 701 /home/abc
# chmod 710 /home/abc/www
# chown abc.apache /home/abc/www
---------------------------------------------------------
open_basedir 허용 디렉토리만 접근 가능
php_flag short_open_tag on
php_flag register_globals on
off 상태에서 사이트를 개발해야 하는데 그렇치 않은 소스가
많기 때문에 특정 유저를 on 으로 하시던가 아니면
.htaccess 로 조절
그 외 Safe Mode 도 신경 쓰셔야 할 겁니다.
PS. SELinux 사용 하신다면 chcon 명령어로 해당 디렉토리
접근 할 수 있도록 해 주셔야 할 겁니다.
관련링크
댓글목록
등록된 댓글이 없습니다.