사실 제목처럼 마지막 보루는 조금 오버인것 같고, 아무튼 PHP에 관심 있는 분들이라면 한번쯤은 들어봤을 Suhosin(수호신)에 대하여 이야기 해 보겠다.
자세한 이야기는 KLDP 에서 볼수 있다. Stefan Esser라는 PHP의 보안관련 리포팅을 담당하던 사람이 PHP내부에서 어떠한 일이 있었는지는 확실하지 않지만 내부에서 좋은 소리를 듣지 못하던 사람이(현재는 PHP를 나와서 보안상 문제점을 까발리고 있다) 만든 패치이다.
이사람은 한국을 좋아하는 모양이다. 외국인이 만든 프로그램의 이름이 수호신이라니. 홈페이지에도 보면 한국영화와 음식을 사랑하는 독일인이라고 적혀있다. 반가워요~♥
패치와, 익스텐션의 총 2가지 형태로 제공되어지고 있으며, 한가지만 사용하거나 혹은 조합하여 사용할수 있다.
홈페이지에서는 수호신을 다음과 같이 소개하고 있다.
매우 허접하게 번역해 보았다. 이정도로 독해를 할수 있다는것만으로도 나 자신에게 감사하며 다음으로 넘어가자.
Suhosin is an advanced protection system for PHP installations. It was designed to protect servers and users from known and unknown flaws in PHP applications and the PHP core. Suhosin comes in two independent parts, that can be used separately or in combination.
The first part is a small patch against the PHP core, that implements a few low-level protections against bufferoverflows or format string vulnerabilities and the second part is a powerful PHP extension that implements all the other protections.
Suhosin는 PHP를 위한 진보된 보안 시스템이다.
이것은 서버와 사용자로 하여금 알려진 또는 알려지지 않은 PHP 어플리케이션 및 PHP 코어의 결함을 보호하기 위해 디자인 되었다.
Suhosin은 2개의 독립적인 부분으로 나누어진다, 이것은 따로 사용되거나 조합되어 사용될 수 있다.
첫번째 부분은 PHP의 코어에 대한 작은 패치이다. 이것은 버퍼 오버플로우나 포맷 스트링 취약점에 대한 낮은 레벨의 보호를 제공한다.
그리고 두번째 부분은 다른 모든 보호를 제공하는 매우 강력한 PHP 익스텐션이다.
수호신의 익스텐션과 패치는 다음의 링크에서 다운받을수 있다.
http://www.hardened-php.net/suhosin/download.html
보면 알겠지만, 패치의 경우 자신이 사용하고 있는 PHP의 버젼에 맞게 사용하면 된다.
자, 이제 설치를 해보자.
1. 수호신 패치 설치
[code]# tar -zxvf php-5.2.1.tar.gz
# gzip -d suhosin-patch-5.2.1-0.9.6.2.patch.gz
# cd php-5.2.1
# patch -p1 -i ../suhosin-patch-5.2.1-0.9.6.2.patch.gz[/code]
위와같이 php에 패치를 적용한후에 정상적인 방법으로 php를 컴파일 하면 된다.
만약 rpm으로 설치를 하는 경우, srpm을 구하여 patch를 추가하도록 하자.
예를 들어 rpm -ivh 명령어를 이용해 srpm을 spec파일로 변환후에 다음의 내용을 추가하여 rpmbuild -bb로 재컴파일 하자.
[code]Patch9000: suhosin-patch-5.2.1-0.9.6.2.patch.gz
%patch9000 -p1[/code]
2. 수호신 익스텐션 설치
[code]# tar -zxvf suhosin-0.9.18.tar
# cd suhosin-0.9.18
# phpize
# ./configure
# make
# make install[/code]
이후에 php의 익스텐션으로 모듈을 등록한다.
[code]extension=suhosin.so[/code]
3. 설치 결과 확인
phpinfo()명령으로 설치가 정상적으로 되었는지 확인해 보자