인터넷서버 학습
아파치는 1995 년 그 당시에 가장 인기 있었던 웹 서버중의 하나인 NCSA HTTPD 1.3 버전을 기반으로
탄생하였다.
그 후 기존의 NCSA 웹 서버에 더욱 향상된 기능들을 탑재하여 Apache 웹 서버를 발표하였다.
현재는 인터넷 웹 서버 중에서 최고의 인기를 구가하고 있는 이른바 '잘 나가는 ' 소프트웨어 중의 하나이다.
그 이유를 들자면 지속적으로 패치파일을 제공하고 최고의 퍼포먼스를 내고 있기 때문이다.
물론 무료로 제공된다는 점과 많은 마켓쉐어의 점유로 인하여 안정성을 인정받았다는 점도 한 이유가 된다.
아파치는 현재까지 2.2.4 버전까지(2007.7월 현재 apache.org에서 확인) 나와있다.
2.2.x 대의 버전이 나온 지 시간이 꽤 지나긴 했지만 아직도 1.3.x 버전의 아파치를 사용하는 곳이 많다.
여기서 우리는 아파치 2.2.2를 사용하도록 하겠다.
서버를 설치하게 되면 보통 운영체제 설치시 같이 설치해버리곤 한다.
편하긴 하지만 한가지 취약점을 가지게 된다.
그것은 불필요한 기능들을 가지고 설치되거나 혹은 필요한 기능을 제외시키고 설치해야 한다.
여기서 아파치도 마찬가지로 소스 코드를 이용하여 직접 컴파일하는 과정을 알아보도록 하겠다.
보안상 필요한 모듈들을 추가하고 기본으로 설치되는 모듈 중 필요치 않은 것은 삭제해서 설치하도록 하겠다.
설치에 앞서 알아두어야 할 것이 있다.
아파치의 설치 방식은 두 가지가 있다.
하나는 DSO(Dynamic Shared Object) 동적 모듈 적재 방식이고 하나는 static Object 라고 하는 방식이다.
DSO 방식은 아파치를 먼저 컴파일하고 다른 모듈들을 추가로 설치할 때는 아파치를 재 컴파일 하지 않고
한번 설정되어 컴파일 된 아파치를 계속 사용하는 것이다.
즉, DSO방식은 아파치를 단 한번만 컴파일 한다는 것이다.
이점은 관리, 설치 면에서 커다란 장점이다.
Static 방식은 설치 면에서 추가로 모듈을 설치하려고 하면 설정하려는 모듈만 설정하고 컴파일 하는 과정이
필요할 뿐만 아니라 아파치 또한 그에 따라 컴파일을 하여야 한다. 이는 관리 면에서 단점이 될 수 있다.
시스템 측면에서 이 두 가지의 차이점이 있다.
먼저 DSO는 아파치에 설치된 모듈이 필요할 때 시스템에 적재된다. 이는 클라이언트의 요청에 응답하는
요청시간이 다소 느릴 수 있지만, 하드웨어의 속도가 뒷받침된다면 어느 정도 해결이 될 수 있는 부분이다.
여하튼 이런 방식(DSO)은 시스템의 리소스(메모리,CPU)들을 적절하게 효율적으로 사용한다고 볼 수 있다.
이 방식은 아파치의 1.3.x 버전의 후반 버전에 나온 실험적인 성격을 가졌지만,
이젠 거의 안정 수준에 올라온 것으로 보고 있다.
또 다른 방식인 Static 방식은 이전 방식(DSO)와는 다소 차이가 있다. 이 방식은 아파치에 추가된 모듈이
아파치의 기동과 함께 모든 모듈을 포함하여 시스템에 적재한다. 만약 아파치의 기동과 함께 적재된 어떤 모듈이
클라이언트에 의해 거의 쓰지 않는다면 쓸데없이 시스템 리소스를 점유하고 있으므로 이는 비효율적이라 볼 수
있다. 또한 아파치와 각 모듈들은 설치시 복잡하다. 각 모듈과 설정된 아파치에 또 다시 모듈을 추가하려 할 때
아파치와 모듈을 다시 컴파일 하여야 한다.
여기서 우리는 DSO 방식을 사용하여 설치를 하도록 하겠다. 그리고 웹 어플리케이션이 지원되도록 PHP도
같이 설치할 것이다. 또한 게시판 사용을 하고 싶다면 데이터베이스도 같이 설치해 줄 수 있다. 리눅스에서는
공개용인 MySQL 을 많이 사용한다. 공개용이라는 장점과 빠르고 가볍다는 장점이 있기 때문이다.
아파치의 정보는 www.apache.org 에서 얻도록 하자.
PHP의 정보는 www.php.net 에서 얻도록 하자.
MySQL의 정보는 www.mysql.com > developer zone > download 에서 얻도록 하자.
currunt release (Recommended)
리눅스 전반의 정보는 www.kldp.org 에서 얻도록 하자.
APM을 깔기위해 애플리케이션을 깔기 위해 할당 했던 /usr/local/src를 활용한다.
# cd /usr/local/src
아파치 2.2.2 다운
# wget http://archive.apache.org/dist/httpd/httpd-2.2.2.tar.gz (아파치)
안 될 경우는 바로 밑에 주소로 다운 받자.
# wget http://apache.secsup.org/dist/httpd/httpd-2.2.2.tar.gz
PHP를 다운 받자.
# wget http://kr.php.net/get/php-5.1.4.tar.bz2/from/this/mirror (PHP)
MySQL을 다운 받자.
# wget http://ftp.superuser.co.kr/pub/mysql/mysql-5.0.21.tar.gz (MySQL)
다음과 같은 설치 순서로 진행 하겠다.
mysql > httpd(apache) > php
먼저 sql을 깔아 봅시다.
1. mysql
# cd /usr/local/src
cd /usr/local/src로 들어간다
# tar zxvf mysql-5.0.21.tar.gz
mysql-5.0.21의 압축과 묶음을 푼다.
# cd mysql-5.0.21
풀려서 만들어진 디렉토리에 들어가자
# groupadd mysql
그룹 생성을 해준다
# useradd -g mysql mysql
mysql이라는 그룹안에 mysql 유저를 생성하자
# ./configure --prefix=/usr/local/mysql --with-charset=euckr
현재 디렉토리에 설치하고 한국어 sql 옵션을 같이 설정하자.
# make && make install
컴파일을 하자
# /usr/local/mysql/bin/mysql_install_db
db를 인스톨하자
# chown -R root /usr/local/mysql
# chown -R mysql /usr/local/mysql/var
# chgrp -R mysql /usr/local/mysql
이 세가지는 각각 해당 디렉토리에 소유권을 부여하는 것
# vi /usr/local/mysql/share/mysql/mysql.server
에디터를 열어 수정하자
파일을 열어서 281번 라인 수정
281 라인 ==> set nu로 라인번호 볼 수 있습니다.
$bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file --language=korean >/dev/null 2>&1 &
# chmod 755 /usr/local/mysql/share/mysql/mysql.server
# cp -p /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
/usr/local/mysql/share/mysql/mysql.server 있는 모든것을
/etc/rc.d/init.d/mysqld 로 복사
# cp support-files/my-medium.cnf /etc/my.cnf
# vi /etc/ld.so.conf (엘디.에스오)
마지막 부분에 추가
/usr/local/lib
/usr/local/mysql/lib/mysql
# ldconfig -v (엘디콘피그)
# /etc/rc.d/init.d/mysqld start
성공 하면 SUCCESS! 라고 뜬다.
# ps -ef | grep mysql --> mysql 데몬이 실행되었는지 확인

[ERROR나 FAILED가 나올 경우]
1./usr/local/mysql/var : 디렉토리에는 실제 데이터베이스 내용이 입력되는
디렉토리 이 디렉토리의 소유자나 퍼미션이 잘못되었을 경우
소유자는 mysql 그룹도 mysql 퍼미션은 700
2.에러메세지 위치
/usr/local/mysql/var/hostname.err
3.mysql은 소켓 파일을 하나 생성 --> /tmp/mysql.sock
/tmp 디렉토리에 쓰기 권한이 있어야 되고
퍼미션은 1777(drwxrwxrwt)이 있어야 한다.
아파치 설치
2.httpd
# cd /usr/local/src
# tar zxf httpd-2.2.2.tar.gz
# cd httpd-2.2.2
# ./configure --prefix=/usr/local/httpd
--enable-so --enable-authn-dbm
--enable-authn-dbd --enable-auth-digest
--enable-ssl --with-ssl
/usr/local/httpd에 설치를 하는데 동적 모듈로 구성하고 사용자 이름과 패스워드를
DBM 파일에 저장할 수 있는 모듈과 다이제스트 인증과 ssl 모듈을 같이 설치한다.
# make && make install
컴파일 하자
# vi /usr/local/httpd/conf/httpd.conf
306라인에 추가
AddType application/x-httpd-php .php .php3
AddType application/x-https-php-source .phps
3.php
# cd /usr/local/src
# tar jxf php-5.1.4.tar.bz2
번집으로 압축되어 있다. j옵션으로 풀자.
# cd php-5.1.4
# ./configure --prefix=/usr/local/php
--with-apxs2=/usr/local/httpd/bin/apxs
--with-config-file-path=/usr/local/httpd/conf
--with-mysql=/usr/local/mysql --enable-sockets
--with-openssl=/usr --with-dbm --disable-all
/usr/local/php에 설치 하는데 --with-apxs2 옵션으로
아파치의 동적 모듈로 설치를 하는데 사용되는 프로그램의 경로인
/usr/local/httpd/bin/apxs 를 지정해주고
구성 파일의 경로는 /usr/local/httpd/conf로 지정해주고
뭐 그런것이다.
# cp -r /usr/kerberos/include/* /usr/include
/usr/kerberos/include밑의 모든것을 /usr/include로 복사
# make && make install
# cp php.ini-dist /usr/local/httpd/conf/php.ini
# grep LoadModule /usr/local/httpd/conf/httpd.conf
LoadModule php5_module modules/libphp5.so
위와 같이 나오면 설치가 되있는 것이다.
# ls -al /usr/local/httpd/modules
httpd.exp와 libphp5.so가 있어야 한다.
# /usr/local/httpd/bin/apachectl start
아파치. 즉, 웹서버를 실행시키는 것이다.
# ps -ef | grep httpd
웹서버가 실행되어 있는지 확인한다.
기본적으로 웹서버의 프로세스는 5개정도가 프로세싱되어 있다.

mysql :
/usr/local/mysql/bin/mysql -> mysql client 프로그램
/usr/local/mysql/share/mysql/mysql.server -> 서버를 구동하기 위한 스크립트
httpd : /usr/local/httpd/bin/httpd -> http server 프로그램
/usr/local/httpd/bin/apachectl -> 서버를 구동하기 위한 스크립트
시스템이 부팅되고 /etc/rc.d/init.d/ 밑에 있는 스크립트가 실행
# cp -p /usr/local/httpd/bin/apachectl /etc/rc.d/init.d/httpd
# ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc3.d/S90httpd
# ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc3.d/S91mysql
/usr/local/httpd/bin/apachectl == /etc/rc.d/init.d/httpd
apachectl 파일과 httpd 파일이 같다는 의미이다.
[PATH 설정]
# vi ~/.bash_profile
PATH= :/usr/local/mysql/bin:/usr/local/httpd/bin <== 추가한다.
=== PATH 는 우리가 절대경로나 상대경로를 쓰지 않아도
자동적으로 검색하여 명령어를 실행시킬수 있게 절대경로를 미리 지정하는것.
Group nobody : #-1일 경우 httpd 디렉토리에서 파일/디렉토리 생성시
setgid 속성 부여
아파치 설치가 끝났다면 다음 디렉토리를 확인해 보자.
cd /usr/local/httpd

주요 디렉토리의 기능과 파일들은 다음과 같다.
==============================================================================================================
이 름 기 능 파일
==============================================================================================================
conf 웹서버설정 httpd.conf , srm.conf, access.conf, php.ini
--------------------------------------------------------------------------------------------------------------
logs 웹서버로그 access_log, error_log
--------------------------------------------------------------------------------------------------------------
cgi-bin CGI 실행 파일들 printenv, test-cgi
--------------------------------------------------------------------------------------------------------------
bin 실행파일들 ab, apxs, dbmmanage, htpasswd, logresolve,
apachectl, checkgid, htdigest, httpd, retatelogs
--------------------------------------------------------------------------------------------------------------
htdocs 웹 문서들 index.html.* (국가별 초기화면 및 메뉴얼)
--------------------------------------------------------------------------------------------------------------
include 헤더 파일
--------------------------------------------------------------------------------------------------------------
man man 페이지
--------------------------------------------------------------------------------------------------------------
error 에러 페이지 HTTP_*.html.var
--------------------------------------------------------------------------------------------------------------
module 모듈 libphp4.so, mod_auth_dbm.so, mod_auth_digest.so,
mod_rewrite.so, mod_setenvif.so, mod_ssl.so
==============================================================================================================
웹서버를 실행시키기 전에 만약 서버가 재부팅 되었을 때도
자동적으로 웹 서버가 올라오도록 하기 위한 설정을 하였었다.
시작 스크립트들이 들어 있는 디렉토리는 /etc/rc.d/init.d 이다.
이 디렉토리 안에 아파치 시작스크립트를 넣어주고 런레벨별로 시작스크립트 링크파일을 생성해주면 된다.
APM 연동 구축 후편에서 쳤던 명령어
# cp /usr/local/httpd/bin/apachectl /etc/rc.d/init.d/httpd
# ln -s /etc/rc.d/init.d/httpd /etc/rc3.d/s99httpd
여기서는 rc3.d 디렉토리에 시작 스크립트의 링크를 생성했다.
rc5.d에 생성하지 않는 이유는 서버 시스템이 GUI환경을 쓰지 않기 때문이다.
물론 쓰기도 하지만 퍼포먼스 측면이나 보안적인 측면을 본다면 사용하지 않는 것을 권장한다.
필요한 모든 파일들을 생성했고 아파치 웹 서버를 시작하기 위해서 다음과 같은 명령을 내릴 수 있다.
# /etc/rc.d/init.d/httpd start
또는
# /usr/local/httpd/bin/apachectl start
실제로 위의 두 명령은 똑같은 기능을 한다. 본인에게 익숙한 명령을 내리면 좋다.
그리고 자신의 환경 변수 중 $PATH에 /usr/local/httpd/bin 이 추가되어 있다면 다음과 같이 간단하게 할 수도 있다.
# vi ~/.bash_profile

# apachectl start
# httpd -v
아파치 버전 확인은 다음과 같은 명령으로 확인할 수 있다.

# httpd -l
현재 아파치와 함께 설치된 모듈에 대한 정보를 보는 명령은 다음과 같다. 이 명령의 결과는 숙지해두는 것이 좋다.
외우기는 힘들기 때문에 보안정책 수립시 아파치 관련 사항에 적어 두는 것도 좋은 방법이다.

TIP
리눅스의 설치 과정이 아직 이해가 안된다면....
대부분의 프로그램 및 드라이버 등을 소스코드를 받아 설치할 때의
대략적인 순서이다.
1. 소스를 다운 받는다
2. 소스의 압축을 풀어준다
# tar jxf or tar zxf
3. 소스코드의 압축을 풀어준 디렉토리로 이동한다.
4. README 나 INSTALL 이라는 파일을 보고 설치 방법을 확인한다.
대부분의 소스코드 설치시에는 압축을 풀어주면 설치방법이
위의 2개의 파일에 설명이 되어 있는 경우가 많다.
보편적으로 별 다른 옵션이 없는 프로그램이나 드라이버 일 경우에는
# ./configure && make && make install
위의 명령을 사용하여 설치한다.
configure 는 설치를 위한 준비 과정이다.
도움말은 configure --help 라는 명령을 사용하여
설치를 위한 준비 도움말을 확인할수 있다.
보안상
웹서버는 단독으로 설치되어야 한다
.
웹서버가 사용하는 포트(80) 이나 사용자가 지정한 포트 이외에는
열려있지 않아야 한다.
다른 모든 서버도 마찬가지이다.
서버로 사용할 머신에는 해당 서버 하나만 설치되어 운영되는게 좋다.

