Tag Archives: 서버관리

PHP 취약점의 마지막 보루 Suhosin(수호신)

사용자 삽입 이미지  사실 제목처럼 마지막 보루는 조금 오버인것 같고, 아무튼 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()명령으로 설치가 정상적으로 되었는지 확인해 보자
사용자 삽입 이미지

리눅스에서 HDD 추가하기


사용자 삽입 이미지이 작업은 2U Rackmount 서버기반의 SATA-II HDD로 이루어졌습니다.

오늘 서버에 하드디스크를 추가하는 작업이 생겨, 기록을 남겨둘까 한다.

알아서 서버에 HDD를 잘 설치하고 CMOS SETUP에 들어가서 하드디스크를 설정하도록 한다.

또는 RAID기반의 서버일경우 필요한 만큼의 HDD를 묶는다. 하나만 있다면 그냥 Stripe(0)으로 설정해 주면 된다.

리눅스로 부팅한다. 하드디스크는 순서대로 /dev/sda, /dev/sdb, /dev/sdc … 순으로 나열된다.

3번째 하드디스크(또는 3번째 RAID 구성 묶음)를 방금 추가하였다면 새로이 추가할 서버의 디바이스명은 /dev/sdc가 된다.

fdisk를 실행하여 하드디스크 파티션을 설정하자.

[code] # fdisk /dev/sdc[/code]

p를 눌러 현재의 파티션 구성을 볼수 있다. 새로운 하드이므로 아무것도 없다.
[code]Command (m for help): p

Disk /dev/sdc: 318.9 GB, 318999887872 bytes
255 heads, 63 sectors/track, 38782 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System[/code]

n을 눌러 새로운 파티션을 생성하여 보자.
[code]Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-38782, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-38782, default 38782):
Using default value 38782[/code]

파티션의 종류에 primary와 extended의 차이점에 대해서는 대부분이 알고 계실것이라 판단하고 넘어가겠다.

Partition number은 primary에는 총 4개의 파티션을 가질수 있으므로 몇번째로 설정할것인지에 대한것이고, 이후는 파티션의 사이즈에 대한 질문이다.
나는 하드 하나를 전체로 하여 하나의 파티션으로 잡을 계획을 가지고 있으므로 엔터만 눌러 디폴트설정을 따르도록 한다.

다시한번 p를 눌러 확인하여 보자, 방금전에 설정한 내용이 추가되어있다.
[code]Command (m for help): p

Disk /dev/sdc: 318.9 GB, 318999887872 bytes
255 heads, 63 sectors/track, 38782 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       38782   311516383+  83  Linux[/code]

w를 눌러 저장하고 나가도록 하자.
[code]Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.[/code]

이제 mkfs로 포맷을 하도록 하자, 나는 ext3로 하도록 하겠다.
[code]# mkfs -t ext3 /dev/sdc1[/code]

또는 다음과 같은 명령어를 사용해도 된다.
[code]# mkfs.ext3 /dev/sdc1[/code]

이제 특정 디렉토리를 만들어 마운트를 해보도록 하자.
[code]# mkdir /opt
# mount /dev/sdc1 /opt[/code]

잘되는지 확인한후에 /etc/fstab에 추가하도록 하자.