최신 php 5.4.0을 설치하였다가 보안관계로 safe_mode 옵션항목 등이 삭제된 관계로
kcp에서 제공한 실행파일을 php에서 사용이 불가하여, 결국, php 5.3.10으로 다운그레이드 수행이 필요하였다.
@ 패키지 제거 및 설치
# rpm -qa httpd php mysql
# yum remove -y httpd php mysql
# rm -fR php
# rm /usr/local/lib/php.ini
@ PHP 설치
# cd /usr/local/src
# wget http://kr2.php.net/get/php-5.3.10.tar.gz/from/kr.php.net/mirror
# tar zxvf php-5.3.10.tar.gz
# cd php-5.3.10
# make clean ---> 처리 미존재(무처리)
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/lib --with-gd --with-freetype-dir=/usr/local/freetype --with-zlib --enable-sockets --enable-gd-native-ttf --with-png-dir=/usr/local/lib --with-jpeg-dir=/usr/local/lib --enable-sigchild --enable-magic-quotes --with-gettext --enable-mbstring --enable-inline-optimization --enable-bcmath --enable-shmop --enable-calendar --enable-ftp --with-gdbm --with-iconv=/usr/local --enable-mbregex --with-imap --with-imap-ssl --with-openssl --with-curl --enable-soap --disable-debug --with-mcrypt=/usr/local/libmcrypt --with-kerberos --with-mysqli=/usr/local/mysql/bin/mysql_config
# make -j4; make install
# cp php.ini-production /usr/local/lib/php.ini ---> 5.3.0 이후 버전
특정 디렉토리의 파일을 실행하려면,
# vi /usr/local/lib/php.ini
...
short_open_tag = On
으로 설정해야 <?인 경우에도 php로 인식한다.
...
또한,
safe_mode = off
로 처리하거나
safe_mode_exec_dir = 특정 디렉토리명
에 지정된 해당 디렉토리에 존재하는 실행 파일만 실행가능토록 수정 필요.
(미설정 시에는 root에 있는 파일만 참조)
설정 인자 |
권장값 |
요약 설명 |
register_globals |
Off |
On으로 하면 php가 입력으로 받아들이는 값을 전역변수로 다루게 되므로 Off로 설정 |
safe_mode |
On |
on으로 설정하면 시스템 중요 파일(/etc/passwd) 접근을 제한할 수 있으나, 웹 프로그램이 정상 작동하지 않을 수 있다. |
safe_mode_gid |
Off |
위 설정과 연관되어 시스템 중요 파일(/etc/passwd) 접근을 제한할 수 있으나, 웹 프로그램이 정상 작동하지 않을 수 있다. |
expose_php |
Off |
웹 브라우저의 요청에 대해 PHP 정보 노출을 방지한다. |
file_uploads |
Off |
파일 업로드를 사용하지 않을 경우 Off로 설정 한다. |
allow_url_fopen |
Off |
On으로 설정하면 파일 액세스 시 외부 사이트의 파일을 호출할 수 있다. 특히 include(), require() 계열의 함수 사용 시 심각한 보안상의 문제를 유발한다. |
magic_quotes_gpc |
On |
On으로 설정하면 PHP가 입력으로 받아들이는 값에 단일 인용부호, 이중 인용부호, 백슬래시, 널문자가 포함된 경우 자동으로 해당 문자앞에 백슬래시를 추가하여 특수문자 처리한다. |
magic_quotes_sybase |
Off |
Sybase 사용자의 정상적인 DB 접속을 위해 만들어진 기능. magic_quotes_gpc 설정을 무의미하게 만들 수 있으므로 Sybase 사용자가 아니면 Off로 설정한다. |
open_basedir |
디렉토리 |
해당 옵션에 특정 디렉토리를 설정하면, 지정된 디렉토리 내에서만 파일접근 가능 |
safe_mode_exec_dir |
디렉토리 |
해당 옵션을 사용하면 system(), exec(), passthru() 등 외부 명령어 실행 시 지정된 디렉토리에 존재하지 않는 프로그램은 실행할 수 없게 된다. 임의로 업로드한 공격도구나 wget, xterm 등 공격에 사용될 수 있는 명령어를 제한할 수 있다. |
display_errors |
Off |
PHP 실행 중 에러 정보 노출을 방지하는 역할, 필수적이므로 Off 설정 |
log_errors |
On |
On으로 설정하면 PHP 실행 중 발생하는 경고나 에러 정보를 error_log에서 지정한 파일에 기록, 의도적인 에러 발생 시도를 확인해 볼 수 있다. |
error_log |
파일명 |
PHP 실행 중 발생하는 경고나 에러 정보를 작성할 파일을 지정 |
gd library 설치
#yum install gd gd-devel php-gd
#vi /usr/local/lib/php.ini
...
display_errors=On
...
extension=php_gd2.dll
...
extension=php_mbstring.dll
extension=php_exif.dll ; Must be after mbstring as it depends on it
...
#service httpd restart
gd 설치여부 확인
<?
$Arr_Gd= @gd_info();
if(!$Arr_Gd["GD Version"])
echo "gd설치안됨";
else
echo $Arr_Gd["GD Version"];
?>
웹상에서 PHP.INI의 설정내용 보기
문법:ini_get("php.ini항목명");
설명:환경설정의 값(phpinfo())에서 정보를 공백(off) 또는 1(on)로 얻어옵니다.
주의점:phpinfo()에서 configuration php core 부분의 정보만 가져올수있습니다.
<?php
echo 'register_globals = ' . ini_get('register_globals') . "\n";
echo 'post_max_size = ' . ini_get('post_max_size') . "\n";
echo 'post_max_size+1 = ' . (ini_get('post_max_size')+1) . "\n";
?>
웹상에서 PHP.INI의 설정내용 바꾸기
문법:ini_set("php.ini항목명","0 또는1");
설명:환경설정의 값을 공백(off) 또는 1(on)로 사용한 페이지에서만 임시로 수정합니다.
ex)
현재 버전에서는 제대로 되지 않습니다.
기타 PHP관련 정보 얻어오기
ex)
<?
echo "php버전은 : ".phpversion()."<br>";
echo "zend버전은 : ".zend_version()."<br>";
echo "apache버전은 : ".apache_get_version()."<br> ";
echo "php전체 설정내용은 : ".phpinfo()."<br>";
?>
'Linux > CentOS' 카테고리의 다른 글
리눅스 서버에서 여러 개의 웹사이트를 서비스할 때 (0) | 2012.06.04 |
---|---|
Centos 5.x 서버에서 Windows XP로 rsync와 cwRsync를 이용해서 백업하기 (0) | 2012.04.11 |
php.ini 설정법 (0) | 2012.04.10 |
Apache,PHP,MySQL,Zend,OpenSSL,PEAR 설치 메모 (0) | 2012.04.09 |
Gmail for CentOS (0) | 2012.04.03 |