2010년 2월 21일 일요일

CentOS에 AFS Client 설치하기

AFS는 Andrew File System의 약자로 분산 파일 시스템의 일종이다. AFS는 Carnegie Mellon University에서 먼저 사용하였고 Transarc Corporation 의하여 개발 및 유지되고 있다. 아래에 Linux 환경에서 AFS를 설치하는 것을 예로 설명하련다. 이 예에서는 단지 AFS Client 설치만 한다.

AFS 배포 공식 사이트인 http://www.openafs.org 에 접속하여 자신이 설치한 시스템에 맞는 RPM 배포버젼을 다운로드 받는다. tar로 압축된 소스파일을 받아 자체로 빌드하여 설치 할 수도 있지만, 그 과정이 복잡하여 여기서 생략하고 RPM과 SRPM 배포버젼을 설치하는것만 설명할가 한다.

만약 설치한 시스템 커널을 바꾸지 않고 원래 설치된 그대로 사용하고 있다면 필요한 RPM 배포버젼을 받아 rpm -Uvh 명령어를 이용하여 설치하면 된다.
하지만 나의 경우는 필요에 따라 시스템 커널을 커스터마이징 하였다. 그로 인하여 afs 공식사이트에서 제공해주는 RPM파일을 직접 받아서 설치 할 수 없었다.

새롭게 커스터마이징한 커널에서 새로 SRPM파일을 받아 RPM들을 빌드 해낸다.

일단 OpenAFS사이트에서 SRPM을 받는다.

wget http://dl.openafs.org/dl/openafs/1.4.11/openafs-1.4.11-1.1.1.src.rpm

다음 SRPM을 설치한다. 단 주의할 것은 이때 우리가 설치하는건 SRPM이지 RPM이 아니다. 그러므로 설치되는건 RPM빌드를 하기 위한 Source 일 뿐인 것이다.

rpm -Uvh openafs-1.4.11-1.1.1.src.rpm

설치가 끝나면 /usr/src/redhat 디텍토리 밑으로 가보자.

cd /usr/src/redhat/SPECS

SPECS 폴더 밑에 openafs.spec 이라는 SPEC파일 생겼음을 알 수 있다.
이 SPEC 파일에 마춰 RPM들을 재빌드 해보자.

rpmbuild -ba openafs.spec

시간이 좀 걸리니 느긋하게 커피나 한잔 하면서 기둘리자.
빌드가 완성되면 /usr/src/redhat/RPMS/i386/ 폴더로 이동하여 새롭게 빌드된 RPM파일들을 확인 하자.
나의 경우에는 아래와 같은 파일들이 빌드 되었다.

dkms-openafs-1.4.11-1.1.1.i386.rpm
openafs-compat-1.4.11-1.1.1.i386.rpm
openafs-kpasswd-1.4.11-1.1.1.i386.rpm
openafs-1.4.11-1.1.1.i386.rpm
openafs-debuginfo-1.4.11-1.1.1.i386.rpm
openafs-krb5-1.4.11-1.1.1.i386.rpm
openafs-authlibs-1.4.11-1.1.1.i386.rpm
openafs-devel-1.4.11-1.1.1.i386.rpm
openafs-server-1.4.11-1.1.1.i386.rpm
openafs-authlibs-devel-1.4.11-1.1.1.i386.rpm
openafs-docs-1.4.11-1.1.1.i386.rpm
openafs-client-1.4.11-1.1.1.i386.rpm
openafs-kernel-source-1.4.11-1.1.1.i386.rpm

필요로 하는 RPM들을 골라 설치 한다. 나의 경우는 client만 필요하므로 openafs와 openafs-client 및 기타 몇몇 의존하고 있는 RPM들을 설치했다. 하지만 여기서 끝이 아니다. 커널이 필요로 하는 모듈도 새로 빌드 해야 한다. 모듈을 새로 빌드하기 위하여 커널 소스가 필요한데, 별도로 얻을 필요는 없고 openafs-kernel-source-1.4.11-1.1.1.i386.rpm 이 RPM파일을 설치하면 되겠다.

rpm -Uvh openafs-1.4.11-1.1.1.i386.rpm openafs-krb5-1.4.11-1.1.1.i386.rpm openafs-kpasswd-1.4.11-1.1.1.i386.rpm openafs-authlibs-1.4.11-1.1.1.i386.rpm openafs-kernel-source-1.4.11-1.1.1.i386.rpm openafs-client-1.4.11-1.1.1.i386.rpm openafs-compat-1.4.11-1.1.1.i386.rpm

다음 /usr/src/ 로 가보면 이미 openafs-kernel 폴더가 만들어져 있음을 발견 할 수 있는데 src폴더로 이동하여 ./configure 및 make를 날리여 커널 모듈들을 재컴파일 한다.

컴파일이 끝나면 /usr/src/openafs-kernel-1.4.11/src/src/libafs/MODLOAD-2.6.32.7-MP/ 경로에 우리가 필요로 하는 openafs 커널 모듈들이 만들어 진다. 이것을 /lib/modules/커널버젼/extra/openafs/ 폴더로 복사해준다. 폴더가 존재 하지 않으니 미리 만들어 주는 센스를 발휘해야겠다.

mkdir -p /lib/modules/커널버젼/extra/openafs
cp -R /usr/src/openafs-kernel-1.4.11/src/src/libafs/MODLOAD-커널버젼-MP/* /lib/modules/커널버젼/extra/openafs/

다음 떠있는 커널에 모듈을 인식 시키고 적재 시켜준다.
모듈을 적재하는 방법으로는 insmod와 modprobe 두가지가 있는데 modprobe는 의존성 체크까지 하여 모듈 적재를 하므로 비교적 안전하므로 이 방식으로 나는 추가 했다.

먼저 depmod 명령어를 날려 모듈 의존성 리스트를 만든다.

depmod -ae 커널버젼

다음 modprobe를 날려 openafs의존 모듈만 추가한다.

modprobe -a openafs

추가가 잘 되었는지는 아래 명령어를 확인해볼 수 있다.

lsmod | grep openafs

마지막으로 설치된 afs client를 실행해주면 끝~

service openafs-client start

2010년 2월 19일 금요일

CentOS에 Proftpd 설치하기

PROFTP 설치하기

proftpd 최신 소스 배포 파일을 받아 온다.
적절한 곳에 압축을 풀고 그 폴더 속으로 들어간다.

최신리눅스 부터는 passwd파일을 별도로 shadowing하여 저장하므로 FTP설치시 이것을 고려하여 적절한 옵션을 주어야 한다. 아니면 FTP 서버 설치후 유저 로그인시 인증이 안됨을 발견할 수 있다.

./configure --prefix=/usr/local/proftpd \
--enable-autoshadow \
--enable-shadow \
make && make install

기본적인 설정을 해주자.

 vi /usr/local/proftpd/etc/proftpd.conf

아래와 같은 부분을 찾아 바꿔준다.
User nobody
Group nogroup

 
User nobody
Group nobody
nogroup라는 그룹은 없기 때문에 안바꿔주면 대몬을 실행할 수 없다.
위 방법과 달리 nogroup이라는 그룹을 새로 생성해도 된다. 하지만 FTP에서만 사용하는 이런 좀비 그룹을 만들어도 크게 의미가 없으므로 첫자를 택했다.

conf 파일 안에는 DefaultRoot라는 항목의 주석을 제거하면 자신이 위치한 홈 디렉토리에서 벗어나지 못한다. FTP가 SFTP보다 좀 더 나아보이는 점이라고 볼 수 있겠다. SFTP는 자신의 홈디렉토리에서 벗어나는걸 막어 보려면 아주 삽질을 많이 해야 한다.

UseReverseDNS                off
IdentLookups                    off
이러면 기본 설치 및 설정이 끝난 상태이고, 보다 싶게 서비스를 start / stop 하기 위하여 별도 스크립트를 init.d에 등록해야겠다. 풀었던 소스 디렉토리 밑에 contrib/dist/rpm/proftpd.init.d 파일을 /etc/rc.d/init.d/ 밑으로 복사한다.
그리고 vi로 열고 PATH부분을 아래와 같이 수정해준다.

다음과 같이 PATH 수정

PATH="$PATH:/usr/local/proftpd/sbin"

chmod 755 /etc/rc.d/init.d/proftpd

퍼미션도 적절히 설정하는 것 잊지 말아야 한다.

/etc/rc.d/init.d/proftpd start
OK라고 나오면 설치 완료!

혹시 아주 엄격한 방화벽 룰을 설정하고 방화벽을 운영하고 있다면

vi /etc/sysconfig/iptables

iptables 파일을 열고 아래 내용 추가한다. 아래 iptable룰은 대체적으로 21포트로 들오오는 모든 tcp 새로운 상태의 request를 받아들이겠다는 것이다.

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

iptable을 재시동 한다.

/etc/rc.d/init.d/iptables restart
or
service iptables restart

서버 재시동후에 자동으로 시동되게 하고 싶으면 chkconfig에 등록을 해야겠다.

/sbin/chkconfig --add proftpd

방화벽설정을 위에서 처럼 했음에도 불구하여 자주 끊기거나 디렉토리 목록 못가져오면 passive 모드 관련 문제인데 이때 별도 passive port를 명시해준다.

PassivePorts 60000 62000

그리고 iptable에 다음과 같이 포트를 허용하도록 한다.

-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 60000:62000 --tcp-flags SYN,RST,ACK SYN -j ACCEPT

2010년 1월 29일 금요일

GRUB의 fallback 기능 활용하기

원격으로 리눅스 서버의 커널을 업그레이드 할 경우 망설여지게 마련이다.
혹시라도 새 커널이 제대로 올라오지 않을경우 서버가 있는곳까지 가야하기 때문이다.
서버가 있는곳이 멀다면 낭패다.
lilo의 경우 lilo -R newkernel 로 안전하게 새로운 커널로 부팅해볼 수 있다.
하 지만 최근 추세는 lilo는 거의 사용하지 않고 GRUB을 많이 사용한다.
GRUB의 경우 fallback이라는 기능을 이용해서 새로운 커널로 테스트 부팅 할 수 있다.
여기서부터는 아래 사이트의 내용을 바탕으로 쓴 글이다.
http://www.gnu.org/software/grub/manual/html_node/Booting-fallback-systems.html
A, B, C 3개의 커널이 있다고 하자. A는 디폴트 커널이고 B는 안전하게 부팅 가능한 백업 커널이고 C는 B가 손상됐을 경우에 대비한 백업 커널이라 하자.
fallback 기능을 이용하기 위해서는 GRUB의 설정 파일을 다음과 같이 수정해야 한다.

default saved        # 이 부분이 중요!!!
timeout 10
fallback 1 2         # 이 부분이 중요!!!
   
title A
root (hd0,0)
kernel /kernel
savedefault fallback  # 이 부분이 중요!!!
title B
root (hd1,0)
kernel /kernel
savedefault fallback  # 이 부분이 중요!!!
title C
root (hd2,0)
kernel /kernel
savedefault

기존 설정과 다른 부분이 'default saved', 'fallback 1 2', 'savedefault fallback' 이렇게 3가지다.
default saved
보통 시스템이라면 default 부분이 숫자로 되어 있을것이다. 여기서는 saved로 바뀌었다. saved로 바뀌었을 경우 디폴트 부팅은
/boot/grub/default 라는 텍스트 파일에 기록된 숫자에 의해 결정된다.
fallback 1 2
처음 fallback은 1(B 커널) 다음 fallback은 2(C 커널)가 된다.
savedefault fallback
fallback에 설정된 커널로 디폴트 커널을 저장한다.
모든 설정이 완료 되었으면 grub-set-default 0 으로 디폴트 커널을 A으로 만들어 주자.
이제 재부팅을 하면 GRUB은 A 커널로 부팅을 시도한다. A 커널로 부팅을 시도하면 GRUB은 다음 부트 엔트리를 1(B 커널)로 설정한다.
GRUB이 A 커널을 읽어들이지 못할 경우 에러를 내면서 즉시 B 커널로 부팅을 시도한다.
만 약 A 커널로 부팅중 커널 패닉이 날 경우에는 2가지 방법이 있다. 하드웨어적으로 리셋을 시켜 주거나 GRUB 설정 파일에 panic=15
(15는 패닉이 났을 경우 15초 후에 재부팅을 한다는 말이다. 숫자는 자신에 원하는대로 바꿔주자)를 추가해준다. 이제 A 커널에서 커널패닉이
나면 15추 후에 재부팅된다는 메시지가 나오고 15초 후에 재부팅이 되면서 B커널로 부팅을 시도하게 된다.

title A
root (hd0,0)
kernel /kernel panic=15
savedefault fallback

A커널로 부팅하지 못해 B커널로 부팅을 했다고 하자. 이 경우 GRUB은 다음 부트 엔트리를 2(C 커널)로 설정한다. 앞에서와 마찬가지로
B 커널을 읽어들이지 못하면 C 커널로 부팅을 시도하게 된다.
A 커널의 문제를 바로잡았다면 grub-set-default 0으로 A 커널로 부팅되도록 한다.

앞에서 살펴본대로 fallback과 savedefault fallback에 의해서 GRUB은 항상 다음 부트 엔트리를 기록한다. 따라서 정상적으로 부팅이
되었다고 하더라도 다음 부팅은 fallback에 설정된 다른 커널로 시도하게 된다. 이제 A 커널에 문제가 없어서 항상 A 커널로 부팅을 원한다면
rc.local 파일에 grub-set-default 0을 추가해 준다.

CentOS일 경우 아래에서 처럼 직접 grub로 들어가서 default로 부팅 할 커널 인덱스를 넣는다. 뒤에 once옵션을 주어 한번만 부팅을 시도해본다, 만약 부팅에 문제 없으면 grub.conf에서 직접 default값을 1로 바꿔주면 되겠다.

# grub
grub> savedefault --default=1 --once
grub> quit

출처: http://www.gnu.org/software/grub/manual/html_node/Booting-fallback-systems.html

2010년 1월 25일 월요일

RSYNC를 이용하여 REMOTE SERVER FS 동기화 하기

간단한 서버 FS동기화 이제는 rsync로 해결하자

일반적으로 웹서비스를 시작하는 회사에서 사용자가 늘어감에 따라서 웹서버의 증설을 하는 경우 시스템 관리자가 첫번째로 맞닥뜨리는 문제중에 하나가, 각각의 웹서버에 있는 정보의 동기화이다. 웹서버가 한대일경우는 이러한 문제로 고민할 필요가 없겠지만, 트래픽증가로 웹서버를 증설했을경우 각각의 웹서버로 매일 업데이트되는 정보를 일일이 올려준다면 정말 귀찮은 작업이 아니다.

NT를 접해보신 분들이라면 미러링(mirroring)에 대해서 알고 있을 거다. 이는 로컬에서는 특정하드디스크나 파티션의 정보를 다른 하드디스크나 파티션으로 동일하게 복제해주는 기능이다. 미러링의 개념은 NT에만 국한된것은 아니다. NT에서 자체제공하는 옵션으로 미러링을 제공하듯이 리눅스에서도 rsync나 기타 다른 프로그램으로 미러링을 지원한다. 물론 rsync는 로컬에서 로컬로는 미러링을 할수없지만, 로컬과 원격지의 미러링을 지원한다. 보통 anonymous ftp서버나 웹서버의 미러링에 많이 쓰인다.

1. rsync 설치
rsync는 웬만한 리눅스 배포판에는 기본으로 설치가 되어져 나온다. 혹시나 설치가 안되었다면

# yum install rsync

를 이용하여 설치하기 바란다. 소스 컴파일 방식으로의 설치는 번거로우므로 일단 패스하겠다.

2. rsync와 ssh를 이용한 FS 동기화
보통 rsync로 파일 전송 시 여러가지 프로토콜을 골라 사용 할 수가 있다. 일반 적으로 rsh나 ssh를 많이 사용하는데, 이것을 사용하기를 원하지 않는 다면 873 포트를 이용할 수 도 있다. 허나 일반적으로 ssh는 쉘접속용으로 많이 사용하고 어느 서버에나 기본으로 다 깔려있으므로 이번 예제에서는 rsync + ssh 이러한 조합으로 시나리오를 적어볼가 한다.

ssh를 이용하면 한가지 걸리는 문제가 있는데 그것이 바로 "인증"이다. rsync를 주기적으로 실행 시키기 위하여서는 원격 서버의 일반유저나 슈퍼유저로 로그인하여 파일을 읽어야 하는 과정이 필요한데, 이때 ssh 원격 로그인시 비번을 요구하는 프롬프트가 자꾸 뜨면 cron으로 처리하기가 힘들어 질 것이다. 그렇다면 비밀번호로 인증을 안하면 어떤 방식으로 인증을 할 것인가? 예전 ssh BFA에서 이미 언급 했었는데, rsa 인증방식으로 사용하면 이런 문제를 깔끔히 해결 할 수 있겠다. 관련글은 아래 링크에 가서 참고하기 바란다.


실제 동기화 작업을 진행하기 이전에 해당 명령어를 좀 더 잘 이해하도록 하기 위하여 몇몇 변수들에 대한 선언을 하겠다. 가령 192.168.1.15가 목적 원격 서버이고 /var/www/htdocs 이 동기화를 할 폴더라고 가정한다면 아래 형식 대로 명령어를 쓰면 되겠다.

# rsync -avzP -e 'ssh -p 2020' user@192.168.1.15:/var/www/htdocs /var/www/

각 옵션들에 대하여 설명을 하자면

-a archive mode (심볼릭 링크, 속성, 퍼미션, 소유권 등을 보존한 상태)
-v verbose (싱크 내용을 보다 자세히 보여줌)
-z compress (동기화 할 때 전송 할 파일들을 압축하여 전송)
-e 어떤 프로토콜을 이용하여 파일 전송을 할지를 결정한다. ssh나 rsh사용시 조합하여 지정한다.
-e속의 -p ssh나 rsh포트가 바뀌었을 때 별도 조합하여 사용함

3. cron을 이용하여 특정 시간에 자동으로 실행 시키기
FS동기화는 백업과 마찬가지로 주기적으로 실행시켜야 한다. 일정 주기로 처리하는 배치 프로세스의 경우 시스템 crontab에 등록 하여 자동화 시킬 수 있다. 시스템의 최적화의 기법은 일정 시간 단위로 최대한의 성능을 발휘하도록 도와주는 것이다. 즉, 주기적으로 운영 중에 만들어진 필요하지 않는 임시 파일을 정리하거나, 운영체제 운영에 필요한 데이터를 갱신하는 등의 작업을 통해 리눅스가 최적의 상태를 유지할 수 있게 할 수 있다.

작업 설정 파일을 crontab 파일이라고 부르며, 이 파일의 위치는 OS별로 차이가 있다.
리눅스는 /var/spool/cron/ID, 솔라리스는 /var/spool/corn/crontabs/ID에 위치한다.
그럼 이 파일을 직접 수정해야 하는가? 그렇지 않다. crontab 명령을 통해 설정과 조회를 한다.
crontab 설정 파일을 새롭게 편집하고자 한다면 -e 옵션을 주고, 수정하기 전에 현재 등록된 내용을 보고자 한다면 -l 옵션을 사용하며, 등록된 내용을 삭제하려면 -d 옵션을 사용한다.

crontab 각 필드의 의미는 다음과 같다.
----------    ----------  ---------------------------------------------------
   필  드             의  미           범  위
----------    ----------  ---------------------------------------------------
첫 번째                    분               0-59
두 번째                    시               0-23
세 번째                    일               0-31
네 번째                    월               1-12
다섯 번째              요일             0-7 (0 또는 7=일요일, 1=월, 2=화, ...)
여섯 번째           명령어             실행할 명령을 한줄로 쓴다.
----------    ----------  ---------------------------------------------------

위 작업을 가령 5분에 한번씩 실행시키려면 어떻게 해야 할가?

0,5,10,15,20,25,30,35,40,45,50,55 * * * * rsync -avzP -e 'ssh -p 2020' user@192.168.1.15:/var/www/htdocs /var/www/ > /dev/null 2>&1

제일 마지막 부분 > /dev/null 2>&1은 cron작업 중 발생하는 표준출력, 표준 에러는 모두 무시하겠다는 것을 의미한다. 저 부분을 추가하지 않으면 root계정에 메일이 무한정 쌓이는 사태가 발생할 수 있다. >_<

마지막으로 cron이 정확히 작동하고 있는지 보려면 root계정으로 로그인 한 상태에서

# cat /var/log/cron

을 해보면 알수 있다.

Linux 각 서비스들에 대한 소개

Linux 설치시 기본으로 설치되는 각 데몬들에 대하여 알아보자

NetworkManager, NetworkManagerDispatcher

네트워크 인터페이스를 자동으로 관리하기 위한 데몬

acpid

ACPI(Advanced Configuration and Power Interface) 방식의 시스템 전력 관리를 위한 데몬
 
anacron

crond와 같은 작업 스케줄러 데몬이지만 crond와는 달리 시스템이 계속 켜져있지 않다고 가정하여 하루보다 작은 단위의 스케줄을 관리

apmd

APM(Advanced Power Management) 데몬 - 배터리를 필요로 하는 노트북 등 휴대용 데스크톱에서 필요

atd

crond와 같은 작업 스케줄러 데몬

autofs

파일 시스템을 자동으로 마운트하기 위한 데몬

avahi-daemon

네트워크 서비스를 인식하는 멀리캐스트 DNS 서비스 Avahi 데몬

avahi-dnsconfd

DNS 재설정 기능을 위한 데몬

bluetooth

블루투스 장치를 사용하기 위한 데몬

cpuspeed

CPU SPEED 데몬

crond

작업 스케줄러 cron 데몬

cups

리눅스의 기본 출력 시스템인 CUPS데몬

cups-config-daemon

CUPS 설정을 위한 데몬

dhcdbd

DHCP D-BUS 데몬(DHCP 클라이언트를 D-BUS로 관리하기 위해 필요)

dhcpd

동적 IP환경에서 인터넷을 사용하기 위한 DHCP 데몬

dhcrelay

DHCP 중계를 위한 데몬

diskdump

시스템에 문제가 생겼을 때 메모리에 있던 내용을 디스크 장치에 기록하기 위한 데몬

gpm

콘솔 환경에서 마우스 지원을 위해 필요한 데몬

haldaemon

장치를 자동으로 인식하기 위해 필요한 HAL 데몬

hidd

불루투스 장치를 사용할 때 필요한  불루투수 ID 데몬

hplip

HP사 제품의 출력을 위한 데몬

httpd

웹 서버 데몬

iptables

방화벽, 매스커레이드 설정을 위한 iptables 데몬

irda

적외선 통신을 위한 irda 데몬

irqbalance

멀티프로세서(둘 이상의 CPU를 사용하는 환경)에서 CPU간의 인터럽트를 분리하기 위한 데몬

isdn

ISDN 서비스를 위한 데몬

kudzu

새로운 하드웨어가 추가되었을 때 검색을 위한 데몬

lm_sensors

CPU 온도, 마더보드 온도, 팬 상태, 전압 등의 시스템의 상황을 실시간으로 알 수 있는 lm_sensors 데몬

mdmonitor

RAID상태를 모니터링하기 위한 데몬

mdmpd

다중 경로의 장치를 모니터링하고 관리하기 위한 데몬

messagebus

시스템 이벤트를 전송하기 위한 데몬

mysqld

MySQL 데이터베이스 데몬

named

DNS 서버 데몬

netdump

콘솔을 초기화하기 위한 데몬

netfs

삼바, NFS, NCP 등 네트워크 파일 시스템을 마운트하기 위한 데몬

netplugd

네트워크 케이블을 연결했을 때 접속 여부를 리눅스 커널에게 알리기 위한 데몬

network

네트워크 데몬(네트워크 접속을 위해 반드시 활성화되어야 함)

nfs

유닉스와 리눅스의 기본 네트워크 파일 시스템 NFS 데몬

nfslock

NFS를 통해 공유되는 파일을 클라이언트가 동시에 수정하는 것을 막기 위해 파일을 잠그는 데몬(NFS를 운영하는데 필요)

nscd

네밍 서비스에 대한 요청 결과를 캐시해서 다음 요청에 응답하기 위한 데몬 (NIS와 DNS를 운영하는데 필요)

ntpd

네트워크를 통해 리눅스 서버의 시간 정보를 동기화하기 위한 Network Time Protocol 데몬

portmap

원격 시스템 호출에 사용하는 데몬(NFS, NIS를 사요할 때 필요)

proftpd

FTP 서버 데몬

psacct

프로세스 통계를 확인하기 위한 psacct 데몬

rdisc

동적 라우팅에서 라우터를 자동으로 찾기 위한 RDISC 데몬

readahead

로그인 전에 특정 파일을 사용하기에 앞서 메모리에 미리 불러들여 속도를 높이기 위한 데몬

readahead_early

모든 데몬이 시작하기 전에 특정 파일을 사용하기에 앞서 메모리에 미리 불러들여 속도를 높이기 위한 데몬

rpcgssd

원격 인증을 위한 GSS(General Security Service) 데몬 (NFS version 4 클라이언트를 위해 필요)

rpcidmapd

원격 이름 매핑을 위한 idmap(IDmapping) 데몬 (NFS version 4를 위해 필요)

rpcsvcgssd

원격 인증을 위한 GSS(General Security Service) 데몬 (NFS version 4 서버를 위해 필요)

saslauthd

SASL(Simple Authentication and Security Layer)을 이용한 암호화된 사용자 인증을 위한 데몬

sendmail

메일 서버 Sendmail 데몬

smartd

시스템 모니터링을 위한(Self-Monitoring, Analysis and Reporting Technology) 데몬

smb

삼바 서버 데몬 (smbd와 nmbd를 동작시키기 위한 데몬)


snmpd

네트워크 관리를 위한 SNMP 데몬

snmptrapd

SNMP TRAP 데몬

spamassassin

스팸메일을 거르기 위한 스펨메일 필터 데몬

squid

프록시 서버 Squid 데몬

sshd

SSH 서버 데몬

syslog

시스템 로그를 관리하기 위한 syslog 데몬

vncserver

원격접속을 위한 VNC 서버 데몬

winbind

삼바 서버와 윈도우 간에 네트워크 공유를 위해 필요한 데몬

wpa_supplicant

무선 네트워크 접속에 사용되는 WPA(Wi-Fi proctedted access) 데몬

xfs

X윈도우의 폰트를 관리하기 위한 데몬

xinted

xinetd 방식의 네트워크 서비스를 관리하기 위한 슈퍼 데몬

ypbin

NIS 서버 데몬

yum

온라인 패키지 관리도구 yum 데몬

중지 권장 데몬들

acpid
apmd
atd
auditd
autofs
bluetooth
cups
firstboot
gpm
haldaemon
hidd
ip6tables
mcstrans
mdmonitor
messagebus
netfs
nfslock
pcscd
portmap
restorecond
rpcgssd
rpcidmapd
smartd
xfs

2010년 1월 21일 목요일

PHP - eAccelerator 및 suhosin 설치기

PHP 설치 후 보안 및 성능에도 신경 써보자?!

eAccelerator는 오픈소프 php 엑셀레이터 이다. 최적화 및 동적으로 컨텐츠를 캐쉬하는 기능을 포함하여 php로 작성된 웹페이지의 퍼포먼스를 향상시킨다.
 
APM(Apache + php + mysql)은 이미 설치 되어있다고 가정하고 진행하겠다.
APM은 수동방식인 - 소스컴파일 방식으로 설치 되었다고 가정한다.

1. eaccelerator 설치
공식홈페이지에서 자료를 다운 받아 설치한다. http://sourceforge.net/projects/eaccelerator/

# wget http://jaist.dl.sourceforge.net/sourceforge/eaccelerator/eaccelerator-0.9.5.2.tar.bz2

다운 받었으면 적절한 곳에 압축을 풀고 설치를 시도 하겠다.

# cd /usr/local/src
# tar xzvf eaccelerator-0.9.5.2.tar.bz2 && cd eaccelerator-0.9.5.2
# /usr/local/php/bin/phpize
# ./configure \
--enable-eaccelerator=shared \
--with-php-config=/usr/local/php/bin/php-config
# make && make test && make install

설치가 완료 되면 캐싱된 파일이 저장될 디렉토리를 지정 해줘야 한다.

# cd /var/tmp
# mkdir eaccelerator
# chown www eaccelerator
# chmod 700 eaccelerator

이로써 eaccelerator에 대한 설치 는 끝난다.

2. suhosin 설치
취약점 분석 등에서 뛰어난 재능을 보여주었을 뿐만 아니라 PHP 보안 강화를 위한 hardened php project 를 진행하고 있는 보안 전문가 Stefan Esser 가 PHP 보안 강화 솔루션인 수호신을 내놓았으며 영문으로 Suhosin 이라고 명명했다.

# cd /usr/local/src
# wget http://download.suhosin.org/suhosin-0.9.29.tgz
# tar xzvf suhosin-0.9.29.tgz
# cd suhosin-0.9.29
# /usr/local/php5/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install

마지막으로 php.ini를 수정하여 설치한 모듈들을 zend extension이나 일반 extension으로 로딩한다.

[suhosin]
extension="no-debug-non-zts-20060613/suhosin.so"

[eAccelerator]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

[Zend]
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.9
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.3
zend_optimizer.version=3.3.9
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so

어떤가? 간단하지 않는가?