Linux/CentOS2012. 4. 10. 18:42

최신 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>";
?>

 

 

Posted by iWithJoy