php 5.4 paser error

php 5.4 이후부터는 php.ini 에서 E_ALL 을 설정하더라도 paser fatal 오류를 표기 하지 않는다.

보안적인 측면이라고 생각된다. 다만 이부분은 php 개발자를 괴롭힐 것이다 ‘ㅅ’a

 

이때 php.ini 를 수정하거나 php 문안에 ini_set 을 넣어도 동작하지 않는다.
(php.ini 직접 설정은 기본적으로 표시하지 않도록 되었고,
php문서에서의 ini_set 설정은 fatal 에러시 입력한 ini_set역시 무시되기 때문.)

아래와 같은 내용을 .htaccess 파일에 넣으면 fatal 오류를 볼수 있다.

모든 에러표시는 위와 같이 설정한다.

E_ALL  (32767)

 

일반적인 서비스제공용 설정의 설정값은 22519이다.

E_ALL & ~E_STRICT & ~E_NOTICE & ~E_DEPRECATED
E_ALL  (32767) – E_STRICT (2048) – E_NOTICE (8) – E_DEPRECATED(8120) = 22519

 

아래는 Error Level Constants 별 번호 이다.
E_WARNING(2)
E_NOTICE(8)
E_STRICT(2048)
E_DEPRECATED(8192)
E_ERROR(1)

E_PARSE(4)
E_CORE_ERROR(16)
E_CORE_WARNING(32)
E_COMPILE_ERROR(64)
E_COMPILE_WARNING(128)
E_USER_ERROR(256)
E_USER_WARNING(512)
E_USER_NOTICE(1024)
E_RECOVERABLE_ERROR(4096)
E_USER_DEPRECATED(16384)
계산기 : http://www.bx.com.au/tools/ultimate-php-error-reporting-wizard

shellshock 취약점 패치

명령어 실행으로 테스트를 진행한다.

 

 

위와 같이 나온다면 shellshock 취약 하다고 나오면 update가 필요 하겠다 ‘ㅅ’a

 

 

설치 완료후 재 테스트를 하자 ‘ㅅ’a

 

 

CentOS 4 에서는 yum update가 안될것이다 ‘ㅅ’a (OS 버전 확인 ~]# cat /etc/redhat-release )

아래 오라클 사이트에서 배포하는걸 받아서 rpm 명령어로 설치한댜 ‘ㅅ’a
32비트

 

64비트

 

xtables-addons 설치 (GeoIP-iptables, CentOS6)

CENTOS 6 이상
=> xtables-addons 의 요구사항이 iptables 1.4.3 이상 커널-devel 2.6.32 이상임

설치된 리눅스 버전 확인을 하자.!

 

 

http://pkgs.repoforge.org/rpmforge-release 에서 CentOS 6 x64 비공식 Repository 를 추가한다.
위 사이트에서 최신 버전 및 맞는 버전을 찾아 아래의 명령어로 설치한다.

 

 

YUM 을 이용하여 필수 라이브러리를 설치하자 ‘ㅅ’a

GEOIP 도 설치하쟈.

 

그다음 적당한 곳에 xtables-addons 을 다운 받아 압축해제 하고 설치 진행을 한다.

 

그다음은 설치된 xtables 에서 사용할 GEOIP 데이터를 만들어야 한다.

xtables 맥스마인드에서 기본 제공하는 GeoIP.dat, GeoIPv6.dat 를 이용하지 못하므로 만들어 줘야 한다.

데이터 베이스 위치는 /usr/share/xt_geoip/LE ,  /usr/share/xt_geoip/BE 폴더 이다.

만드는 툴은 설치본에서 geoip 폴더안의 xt_geoip_build 스크립트를 이용한다.

 

만들때 문제가 있다. 각 csv 로 생성할때 GeoIPCountryWhois.csv 으로 만들면 v6 데이터가 안나온다 ‘ㅅ’a

GeoIPv6.csv로 만들면 v4 데이터가 안나온다 ‘ㅅ’a

그래서 아래와 같이 만들고 해당것을 옴기는 작업을 한다.

 

==============================================================================

캄파일 트러블 슈팅.

1. 컴파일 해도 인식이 안되는 경우

위명령어로 링크가 깨진경우 – 이는 현재 설치된 kernel 과 kernel-devel 버전이 맞지 않을 경우 나올 수 있다.
맞추어 주도록 하자. 맞춘후에는 리부팅이 필요하다.

2. xtables-addons 를 configure 후에 오류 발생시.

이러한 에러가 발생했다면 아래 파일을 수정해야 한다.

이는 최초 커널에서 나오는 문제는 아니고 커널 업데이트를 한 경우 발생할 수 있다.
#define CONFIG_IP6_NF_IPTABLES_MODULE 1 부분을 찾아서 /* */ 으로 주석처리를 한뒤에 컴파일 한다.

Linux IO 튜닝

파일을 읽을때 리눅스는 access 타임을 write 를 한다.

때문에 파일을 읽을때 단순히 read 가 하는게 아니라 일부 write를 하고 read 를 한다.

아래와 같이 stat 명령어로 파일의 자세한 정보를 보면 확인할 수 있다.

 

이 access write 기능을 끔으로서 read 성능을 대폭으로 끌어올릴 수 있다. (약 2.5배 에서 3배)

바로 nodiratime 과 noatime 옵션 이다.

 

/etc/fstab 에서 아래와 같이 수정을 한다.

/etc/fstab 에 입력된 정보로 재부팅 하지 않고 적용하는 명령어는 다음과 같다.

 

dicard 옵션(저널링 off)는 이 게시물에서 설명.
http://www.enteroa.com/2014/09/24/Linux-에서-TRIM-활성화/

 

임의 마운트 시에는 아래와 같은 명령어로 마운트 한다.

 

 

PHP 5.2.17 NTS모드로 설치

일반적으로 php 는 아파치의 설치 옵션(MPM)에 따라 NTS(Non Thread Safety) 모드 혹은 TS(Thread Safety) 모드로 설치가 된다.

php 5.2.x 는 설치할때 버그가 있다 ‘ㅅ’a

* 정확히는 아파치2 (apxs2) 나온시기 보다 이전 버전의 php를 설치할때인듯 하다. *

* 현재 까지 테스트 결과로는 php 5.2.x 를 포함한 이전버전 *

때문에 apache 를 prefork 방식으로 설치하더라도 실제 php 는 TS 모드로 설치가 된다.

 

이는 php extention 설치시 문제를 발생시킨다 (대표적으로 zend optimizer 설치를 진행할경우 인식이 안됨)

때문에 Zend manager 를 이용하여 올리는 방법등이 있다.

 

이유는 다음과 같다 configure 스크립트에서

APXS_MPM=$APXS -q MPM_NAME 으로 아파치의 mpm 을 인식해서 설치 진행을 한다 ‘ㅅ’a

문제는 위와 같이 없는 명령어로 인식해서 아파치가 무엇으로 깔려 있든 TS 모드로 설치 진행이 된다.

(apache 1 버전에서는 당연히 저 명령어로 mpm 구분을 할수 있다.)

 

여기서는 configure 파일을 수정해서 NTS 모드로 설치 진행하기위해 따라할 수 있는 부분이다 ‘ㅅ’aa

php 압축파일 다운로드 를 하시공.

/ 5621번째줄 6469번째줄을 아래와 같이 수정한다 /

 

그후 configure -> make -> make install 로 NTS 모드로 설치가 된다.

설치 이후 확인을 해보는 명령어 ‘ㅅ’aa

 

zend optimizer+ 최신버전인 3.3.9도 정상 동작이 된다 ‘ㅅ’a

 

혹여 아파치 2.4 와 함께 설치할때는 압축해제 후

php-5.2.17/sapi/apache2handler/php_functions.c 파일의

내장 함수 unixd_config 을 ap_unixd_config 으로 수정해야 된다.

386번째 줄에 1개 , 417번째 줄에 3개 가 있다.

 

음 추가로 64bit linux 에서 설치할때에는 아래와 같이 심볼링 링크를 생성해줘야 잘 설치가 된다 ‘ㅅ’a