RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
Linux  2006/09/08 14:29
출처 블로그 > 행복한 이야기~^^
원본 http://blog.naver.com/hpystory/40014422127

http://blog.empas.com/killban


[로그 남기기]

* 정해진 날짜에 로그 파일명을 "logfile.년월일"로 바꾸고 싶을때.

mv logfile logfile.date +%Y.%m.%d

touch logfile

=> 일정한 주기를 설정하여 crontab에 등록함.


* 정기적으로 쉘 실행

#!/bin/sh

cd /var/log

mv logfile.2.gz logfile.3.gz

mv logfile.1.gz logfile.2.gz

mv logfile logfile

cat /dev/null > logfile

gzip 9 logfile.1


[시스템 관리 명령어]

ps aux|grep httpd

ps aux|egrep 'httpd|mysql'

* option

-i : 대소문자 구별을 하지 않는다.

-v : 패턴을 포함하지 않는 행만 출력한다.

-n : 행 번호를 출력한다.

-l : 파일명만 출력한다.

-c : 패턴과 일치하는 라인의 갯수만 보여준다.

grep -v "^[ ^l]*$" 파일명 : 공백을 제거한 파일 내용 살펴보기

grep -v "^#*$" 파일명 : 주석을 제거한 파일 내용 살펴보기

find . -exec grep "pattern" {} \; : 현재 디렉토리와 그 하위 디렉토리까지 grep 패턴 검색


[필터 역할 awk명령]

ls -al | awk '{print $1 $5 $9}' : 원하는 컬럼값만을 선택해서 출력

* awk의 연산기능

find /home/design -user design -ls | \

awk '{sum+=$7}; END {print "User design total disk use = " sum }'


User design total disk use = 8548335

=> 7번째 열의 합계를 누적(참고: sum/NR은 평균값, NR은 현재까지의 입력 라인수)


[find 명령]

-atime  n : 정확히 n 일 전에 access 된 파일

-mtime  n : 정확히 n 일 전에 수정된 파일

-newer [file] : file 보다 최근에 수정된 파일

-size n : 정확히 n x 512 byte의 길이를 갖는 파일

-type c : 파일의 종류를 기술. f : 파일, d : 디렉토리

-fstype [filesystem] : 파일 시스템 종류

-name [pattern] : 파일 이름 검색

-perm p : 파일 접근 퍼미션이 p인 경우

-user [user] : 파일 소유권이 user인 파일

-group [group] : 파일 그룹이 group인 파일

-nouser : 파일 소유자가 /etc/passwd에 없는 경우

-nogroup : 파일 소유 그룹이 /etc/group에 없는 경우

-uid n : 파일 uid가 n인 경우

-gid n : 파일 gid가 n인 경우


+ 는 ~~보다 큰 경우, - 는 ~~ 보다 작은 경우

-mtime +7 : 수정된 지 7일이 지난 파일

-mtime -7 : 수정된 지 7일이 안된 파일

-size +100 : 50kbyte 보다 큰 파일

-name 뒤엔 인용 부호(와일드 카드 문자)를 같이 사용할 수 있다.

-name *.dat : 확장자가 dat 인 모든 파일


find ./ -atime +60 -mtime 120

: AND 논리 연산으로 접근한지 60일 지난 파일 중 수정한 지 120일 지난 파일

find ./ \( -user design -o -group design \)

: OR 논리 연산으로 소유자나 그룹이 design인 경우

find ./ \( ! -user design -o ! -group design \)

: NOT 논리 연산으로 소유자나 그룹이 design이 아닌 경우


-perm 옵션은 숫자 형태의 특정 접근 모드를 이용하여 파일을 검색하는 옵션이다.

옵션별 사용 예

-perm 75 : permission = 755

-perm -002 : 모든 사람들이 기록할 수 있는 파일

-perm -4000 : SUID 액세스 설정

-perm -2000 : SGID 액세스 설정


-print : 대응되는 파일의 경로명을 출력

-ls : 대응되는 파일에 대한 긴 디렉토리 목록을 출력

-exec commands : 대응되는 파일에 대해 commands 명령 수행

-ok commands : 파일에 대한 commands 명령 수행 전에 입력 대기 상태

-xdev : 검색 시작 디렉토리가 속해 있는 파일 시스템에 대해서만 검색 제한

-mount : IRIX 와 SCO UNIX 에서 -xdev 옵션

-prune : 서브 디렉토리는 검색을 하지 않음

-print 옵션은 근래는 기본으로 들어간다. 굳이 붙일 필요는 없고, -exec, -ok 옵션 사용 시에는 반드시 마지막에 \; 으로 구문을 마감한다.


find ./ -name *.* -exec rm -f {} \;

: 검색한 파일을 지운다.


find / -type f -size +20480 -mtime +30 -ls

: 파일 크기가 20M 이상이며 30일 이상 동안 수정되지 않은 파일

find / -type f -size +20480 -mtime +30 -exec rm -f {} \;

: 대응되는 파일 삭제


find / -type f \( -perm -4000 -o -perm -2000 \)

: setuid, setgid검색

find / -type f \( -perm -4000 -o -perm -2000 \) | diff - setuidlist

=> 검색된 setuid, setgid를 기존에 작성한 목록과 비교하여 새로 추가 된 것이 있는지를 확인한다.)


2006/09/08 14:29 2006/09/08 14:29
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > okaydanky(오키도키)
원본 http://blog.naver.com/okaydanky/15549175

원격 네트워크 로그인의 중앙화와 보안

난이도 : 초급

Wei Zhang
IT 전문가, IBM
2005년 5 월 25 일

네트워크 관리자는 자신이 관리하고 있는 네트워크 장치의 사용자 정보를 관리해야 한다. 하지만 네트워크 장치는 제한된 기능만을 지원하기 때문에 사용자 관리를 잘 할 수가 없다. 외부 RADIUS 서버를 사용하여 사용자를 인증하고 특히 LDAP 서버에 대해서, LDAP 서버에 저장된 정보를 중앙화 하고 RADIUS 서버로 인증하여 사용자 관리에 필요한 작업 오버헤드를 줄이고 원격 로그인 프로세스를 보다 안전하게 수행할 수 있다.

데이터 보안은 시스템 보안 만큼 중요하다. 따라서 데이터를 보호하고 기밀성, 기밀성, 가용성을 확실히 보장하는 것은 관리자들에게는 중요한 문제이다.

이 글에서 데이터 보안의 기밀성에 대해 설명하겠다. 보호를 받고 있는 데이터는 권한을 받은 사용자 또는 시스템만이 접근할 수 있다. 리눅스 시스템에서 Remote Authentication Dial-In User Service server (RADIUS)를 설정 및 구성하여 사용자 인증, 권한, 계정 부여 (AAA)를 수행하는 방법을 설명하겠다.

소개
RADIUS 프로토콜에 대해 먼저 설명한 다음 AAA 컴포넌트와 이것의 작동방법 그리고 LDAP 프로토콜을 설명하겠다.

Remote Authentication Dial-In User Service 프로토콜은 IETF의 RFC 2865(참고자료)에서 정의된다. 이것은 네트워크 액세스 서버(NAS)로 사용자 인증, 권한 부여, 계정 설정 등을 수행한다. RADIUS는 UDP에 기반한 클라이언트/서버 프로토콜이다. RADIUS 클라이언트(네트워크 액세스 서버)는 일반적으로 라우터, 스위치 또는 무선 액세스 포인트이다. (액세스 포인트는 네트워크상의 노드에 설정된다; WAP은 무선 버전이다.) RADIUS 서버는 유닉스 또는 Windows 2000 서버상에서 실행되는 데몬 프로세스이다.

RADIUS와 AAA
NAS가 사용자 연결 요청을 받으면 NAS는 이것을 지정된 RADIUS 서버로 보낸다. RADIUS 서버는 사용자를 인증하고 사용자 설정 정보를 NAS로 리턴한다. 그런 다음, NAS는 연결 요청을 수락 또는 거절한다.

완전한 기능을 갖춘 RADIUS 서버는 LDAP 외에도 다양한 방식을 지원하여 사용자를 인증한다.

  • PAP (Password Authentication Protocol, 패스워드가 텍스트로 보내지는 곳에서 PPP와 함께 사용됨.);
  • CHAP (Challenge Handshake Authentication Protocol, PAP 보다 안전, 사용자 이름과 패스워드 사용.);
  • 로컬 UNIX/Linux 시스템 패스워드 데이터베이스 (/etc/passwd);
  • 기타 로컬 데이터베이스
  • 인증과 권한부여는 RADIUS에서 함께 결합된다. 사용자 이름이 맞고 패스워드가 정확하면 RADIUS 서버는 사용자의 접근을 허용하는 몇 가지 매개변수(애트리뷰트-값 쌍)을 포함하여 Access-Accept 응답을 리턴한다. 이 매개변수들은 RADIUS에서 설정되고 서비스 유형, 프로토콜 유형, 사용자를 할당하는 IP 주소, 액세스 제어 리스트(ACL) 또는 NAS에서 적용할 정적 라우트, 기타 값 등을 포함한다.

    RADIUS 계정 기능을 사용하면(참고자료), 보안 또는 빌링에 사용되는 세션동안 사용된 시간, 패킷, 바이트 같은 리소스의 양을 나타내면서 연결 세션의 시작과 끝에 데이터를 보낼 수 있다.

    Lightweight Directory Access Protocol
    Lightweight Directory Access Protocol (LDAP)은 X.500 계열 디렉토리의 정보에 접근하고 업데이트하는 방식을 정의한 오픈 표준이다. LDAP는 사용자 정보를 중앙 로케일에 저장하여 동일한 사용자 정보를 각 시스템에 저장하지 않아도 된다. 또한 일관성 있고 제어된 방식으로 정보를 관리하고 정보에 액세스하는데 사용되기도 한다.

    LDAP는 중앙 디렉토리에서 사용자를 관리하기 때문에 사용자 관리 태스크가 간단해진다. 사용자 정보를 저장하는 것 외에도, LDAP에서 사용자를 정의할 수 있다. 로그인의 수를 제한하는 것과 같은 선택 기능이 가능하다. 이 글에서 RADIUS 서버가 설정되어 LDAP에 대해 사용자를 인증하는 방법을 설명하겠다. 이 글은 RADIUS에 초점을 맞추었기 때문에 LDAP 서버 설정 및 설치에 대해서는 자세히 설명하지 않겠다.

    OpenLDAP는 LDAP의 오픈 소스 구현이다; OpenLDAP.org에서 자세한 정보를 참조하기 바란다.(참고자료)

    시나리오
    다음과 같은 시나리오를 상상해보자:

    • 집에 있는 사용자가 dial-up 인증을 사용하여 회사의 인트라넷에 접근할 수 있다.
    • 무선기능이 되는 랩탑이 무선 인증에 의해 캠퍼스 네트워크와 연결될 수 있다.
    • 관리자가 자신의 워크스테이션을 사용하여 텔넷이나 HTTP를 통해 관리자 인증으로 네트워크 장치에 로그인 할 수 있다.

    이 모든 인증 작업은 중앙 LDAP 서버에 대해 RADIUS 서버로 수행될 수 있다. (그림 1)

    그림 1. RADIUS와 LDAP를 통한 인증
    Authentication via RADIUS and LDAP

    이 글에서, 마지막 옵션을 구현해 보겠다. 먼저 RADIUS 서버를 설치하는 것으로 시작한다.

    RADIUS 설치
    RADIUS 서버 소프트웨어는 여러 소스들로 얻어질 수 있다. 이 글에서는 FreeRADIUS를 사용하겠지만(참고자료), Cisco Secure Access Control Server (ACS)도 중앙화 된 사용자 액세스 제어 프레임웍으로서 UNIX 와 Windows에서 실행되는 Cisco 장치를 통해 사용자 관리를 한다. 또한 Cisco 상용 프로토콜인 TACACS+도 지원한다. (이것은 TACACS+ 기능이 되는 장치에서 더 많은 사용자 관리 기능을 수행한다.)

    FreeRADIUS는 리눅스 상에서 실행되는 강력한 RADIUS 서버로서 오픈 소스 커뮤니티에서 만들어 졌으며 오늘날 분산 및 이종의 컴퓨팅 환경에 알맞다. FreeRADIUS 1.0.2는 LDAP, MySQL, PostgreSQL, Oracle 데이터베이스를 지원하고 EAP와 Cisco LEAP 같은 네트워크 프로토콜과 호환된다. FreeRADIUS는 현재 많은 대규모 네트워크 시스템에 전개되고 있다.

    다음 단계는 Red Hat Enterprise Linux Advanced Server 3.0에 FreeRADIUS 1.0.2를 설치 및 테스트 하는 방법을 설명한 것이다.:

    Listing 1. FreeRADIUS 설치와 테스트

    tar -zxvf freeradius-1.0.2.tar.gz         - extract it with gunzip and tar./configuremakemake install                              - run this command as rootradiusd or                                - start RADIUS serverradiusd -X                                - start RADIUS server in debug moderadtest test test localhost 0 testing123  - test RADIUS server

    radtest 응답을 받으면 FreeRADIUS 서버가 작동한다.

    또 다른 무료 툴인 NTRadPing(참고자료)을 소개하겠다. 이것은 Windows 클라이언트에서 온 인증 및 권한부여 요청을 테스트한다. RADIUS 서버에서 돌아온 애트리뷰트 값과 같은 자세한 응답을 디스플레이 할 수 있다.

    이제 FreeRADIUS를 설정한다.

    FreeRADIUS 설정하기
    RADIUS 서버 구성은 서버, 클라이언트, 사용자(권한부여와 인증용)를 설정하는 것이다. RADIUS 서버와는 다른 필요 때문에 다른 설정이 될 수도 있다. 다행히 대부분의 설정은 비슷하다.

    서버 설정하기
    FreeRADIUS 설정 파일은 /etc/raddb 폴더에 저장된다. radiusd.conf 파일을 변경해야 한다.

    Listing 2. radiusd.conf 변경하기

    1) Global settings:log_auth = yes                - log authentication requests to the log filelog_auth_badpass = no         - don't log passwords if request rejectedlog_auth_goodpass = no        - don't log passwords if request accepted2) LDAP Settings:modules {   ldap {      server = "bluepages.ibm.com"   - the hostname or IP address of the LDAP server      port = 636                     - encrypted communications      basedn = "ou=bluepages,o=ibm.com"   - define the base Distinguished Names (DN),                                          - under the Organization (O) "ibm.com",                                          - in the Organization Unit (OU) "bluepages"      filter = "(mail=%u)"                   - specify search criteria      base_filter = "(objectclass=person)"   - specify base search criteria   }authenticate {                - enable authentication against LDAP   Auth-Type LDAP {      ldap   }

    매개변수는 LDAP 서비스의 인스턴스인 IBM BluePages와 작동하도록 설정된다. 매개변수들은 다른 LDAP 서버들마다 달라진다.

    클라이언트 설정하기
    클라이언트는 /etc/raddb/clients.conf 에서 설정된다. RADIUS 클라이언트를 설정하는 두 가지 방식이 있다. IP 서브넷으로 NAS를 그룹핑하거나(Listing 3) 호스트 이름 또는 IP 주소로 NAS를 리스팅 할 수 있다. (Listing 4). 두 번째 방식을 따르면, shortnamenastype이 정의된다.

    Listing 3. IP 서브넷으로 NAS 그룹핑하기

    client 192.168.0.0/24 {   secret      = mysecret1   - the "secret" should be the same as configured on NAS   shortname   = mylan       - the "shortname" can be used for logging   nastype      = cisco      - the "nastype" is used for checkrad and is optional}

    Listing 4. 호스트네임과 IP 주소로 NAS 리스팅하기

    client 192.168.0.1 {   secret      = mysecret1   shortname   = myserver   nastype      = other}

    사용자 인증 설정
    /etc/raddb/user 파일에는 각 사용자에 대한 인증과 설정 정보가 포함되어 있다.

    Listing 5. /etc/raddb/user 파일

    1) Authentication type:Auth-Type := LDAP       - authenticate against LDAPAuth-Type := Local, User-Password == "mypasswd"                        - authenticate against the                        - password set in /etc/raddb/userAuth-Type := System     - authenticate against the system password file                        - /etc/passwd or /etc/shadow2) Service type:Service-Type = Login,   - for administrative login

    사용자 권한 설정
    다음 인증 서버 애트리뷰트 값(AV) 쌍은 사용자 권한을 위해 설정되어야 한다. 인증이 수락된 후 관리자 로그인 요청을 위해 NAS로 리턴된다.

    Cisco 라우터의 경우 다른 권한 레벨이 있다:

    • Level 1은 non-privileged이다. 프롬프트는 router>이고, 로그인용 기본 레벨이다.
    • Level 15는 privileged이다. 프롬프트는 router#이고, 사용 가능 모드로 들어간 후 레벨이다.
    • Levels 2에서 14는 기본 설정에는 사용되지 않는다.

    다음 명령어를 사용하면 네트워크 접근을 통한 사용자 로그인으로 EXEC 명령어에 즉시 접근할 수 있다.:

    cisco-avpair ="shell:priv-lvl=15"

    다음 코드는 CISCO 무선 액세스 포인트에 대해 같은 작업을 핸들한다.:

    Cisco:Avpair = "aironet:admin-capability=write+snmp+ident+firmware+admin"

    어떤 기능의 조합으로도 다음 애트리뷰트와 함께 리턴된다.:

    Cisco:Avpair = "aironet:admin-capability=ident+admin"
    Cisco:Avpair = "aironet:admin-capability=admin"

    Cisco에서 명령어에 관한 더 많은 정보를 숙지하기 바란다.

    네트워크 액세스 서버 설정하기
    다음에는 NAS를 설정한다. 우선 Cisco 라우터 그 다음에는 Cisco WAP이다.

    Cisco IOS 12.1 라우터의 경우 AAA를 실행한 다음 인증, 권한, 계정을 설정할 것이다.

    Listing 6. AAA 실행

    aaa new-modelradius-server host 192.168.0.100radius-server key mysecret1

    AAA는 라우터 상에서 실행되어야 한다. NAS에 AAA 서비스를 제공할 RADIUS 서버의 리스트가 설정된다. 암호화 키는 NAS와 RADIUS 서버 간 데이터 전송을 암호화하는데 사용된다. FreeRADIUS에서 설정된 것과 동일해야 한다.

    Listing 7. 인증 설정

    aaa authentication login default group radius localline vty 0 4login authentication default

    이 예제에서, 네트워크 관리자는 RADIUS 인증을 사용한다. RADIUS 서버를 사용할 수 없다면 NAS의 로컬 사용자 데이터베이스 패스워드를 사용하라.

    Listing 8. 권한 설정

    aaa authorization exec default group radius if-authenticated

    NAS에 로그인할 때, 사용자가 EXEC 쉘을 사용하도록 한다.

    Listing 9. 계정 설정

    aaa accounting system default start-stop group radiusaaa accounting network default start-stop group radiusaaa accounting connection default start-stop group radiusaaa accounting exec default stop-only group radiusaaa accounting commands 1 default stop-only group radiusaaa accounting commands 15 default wait-start group radius

    라우터는 RADIUS 서버에 계정 기록을 보내도록 설정되어야 한다. Listing 9의 명령어를 사용하여 NAS 시스템 이벤트, 네트워크 연결, 아웃바운드 연결, EXEC 연산, 레벨 1에서 15까지의 명령어에 대한 계정 정보를 기록한다.

    여기까지다. 이제 Cisco 무선 액세스 포인트 설정을 보도록 하자. 다음 설정은 Firmware 12.01T1과 함께 Cisco 1200 Series AP에 적용된다. (그림 2):

    • 서버 이름 또는 IP 주소, 공유 비밀을 입력한다.
    • 유형을 "Radius"로 선택하고, "User Authentication."를 체크한다.

    그림 2. WAP용 NAS 설정
    Configuring NAS for WAP

    실제로 EAP Authentication을 설정하여 FreeRADIUS가 일반 사용자들을 무선 LAN에 인증하도록 하는데 사용되도록 할 수 있다.

    계정: RADIUS 작동
    모든 설정이 완료되었기 때문에 FreeRADIUS 서버는 NAS에서 보내진 모든 정보를 기록하여 /var/log/radius/radius.log 파일에 저장할 수 있다.:

    Listing 10. /var/log/radius/radius.log 파일

    Thu Mar 3 21:37:32 2005 : Auth: Login OK: [David] (from client                                mylan port 1 cli 192.168.0.94)Mon Mar 7 23:39:53 2005 : Auth: Login incorrect: [John] (from                                client mylan port 1 cli 192.168.0.94)

    자세한 계정 정보는 /var/log/radius/radacct 디렉토리에 저장된다. Listing 11은 David가 2005년 3월 4일, 7시 40분에서 7시 51분 사이에 192.168.0.94에서 192.168.0.1로 로그인 했음을 나타내고 있다. 이렇게 자세한 정보는 관리자에게 매우 도움이 된다.

    Listing 11. RADIUS가 제공하는 계정 상세 샘플

    Fri Mar  4 19:40:12 2005        NAS-IP-Address = 192.168.0.1        NAS-Port = 1        NAS-Port-Type = Virtual        User-Name = "David"        Calling-Station-Id = "192.168.0.94"        Acct-Status-Type = Start        Acct-Authentic = RADIUS        Service-Type = NAS-Prompt-User        Acct-Session-Id = "00000026"        Acct-Delay-Time = 0        Client-IP-Address = 192.168.0.1        Acct-Unique-Session-Id = "913029a52dacb116"        Timestamp = 1109936412Fri Mar  4 19:51:17 2005        NAS-IP-Address = 192.168.0.1        NAS-Port = 1        NAS-Port-Type = Virtual        User-Name = "David"        Calling-Station-Id = "192.168.0.94"        Acct-Status-Type = Stop        Acct-Authentic = RADIUS        Service-Type = NAS-Prompt-User        Acct-Session-Id = "00000026"        Acct-Terminate-Cause = Idle-Timeout        Acct-Session-Time = 665        Acct-Delay-Time = 0        Client-IP-Address = 192.168.0.1        Acct-Unique-Session-Id = "913029a52dacb116"        Timestamp = 1109937077

    결론
    이 글에서 제시한 간단한 단계를 거치면 외부 LDAP 서버를 사용하는 Remote Authentication Dial-In User Service 서버를 설정하여 인증, 권한, 계정 등을 핸들 할 수 있다. 이 글을 다음과 같이 요약할 수 있다.:

  • RADIUS와 LDAP 서버 및 AAA 개념 소개.
  • 설치 및 구현 시나리오.
  • RADIUS 서버의 설치 및 설정.
  • 네트워크 액세스 서버 설정.
  • RADIUS가 제공하고 관리하는 상세 정보 샘플.
  • 이 글에서 제시한 것은 권한이 있는 엔터티에 의해서만 보안 데이터에 접근될 수 있도록 하기 위한 절차이다.

    참고자료

    필자소개
    Wei Zhang은 네트워크 및 정보 보안 전문가이다.

    2006/09/08 14:29 2006/09/08 14:29
    이 글에는 트랙백을 보낼 수 없습니다
    Linux  2006/09/08 14:28
    출처 블로그 > riveroad
    원본 http://blog.naver.com/lgk1217/40012170257

    Solaris에서 기본으로 설치되어 있는 swap공간을 늘리는 것은
    O/S를 다시 설치 하지 않고서는 불가능하고 swap  공간으로 사용할
    파일을 만들어서 추가 해주거나 사용하지 않은 파일시스템을 swap 공간으로

    추가해 줄수 있다.
             # swap -l                                        ; swap space 확인

             # mkfile 30m /swap/swap1       ; 30MB의 swap공간으로 사용할 파일 작성

             # swap -a /swap/swap1           ; swap 공간의 추가

             # vi /etc/vfstab                             ; 부팅시 자동으로 swap 공간이 추가 되도록 한다.

             /swap/swap1 - - swap - no -  

             # swap -d /swap/swap1              ; swap 공간의 제거

             #swap -a /dev/dsk/c0t1d0s7  

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

    howtosolaris

    1. "df -k" 명령을 사용하여 추가하고 싶은 swap file 크기 만큼의 free space를 가지고 있는

       file system이 있는지 확인한다.

    % df -k
    파일시스템 K바이트 사용 가용 용량 설치지점
    /dev/dsk/c0t0d0s0 962582 779074 87258 90% /
    /proc 0 0 0 0% /proc
    fd 0 0 0 0% /dev/fd
    /dev/dsk/c0t0d0s3 865774 731198 48006 94% /opt
    swap 67664 8408 59256 13% /tmp
    /dev/dsk/c0t1d0s3 8316189 933423 6551156 13% /doc
    /dev/dsk/c0t2d0s3 8316189 2529292 4955287 34% /export

    2. 위의 결과에 따라 /export file system에 50M의 swap file을 추가 한다면, root 로 login하여 아래와 같이 한다.

    # cd /export
    # /usr/sbin/mkfile 50m new-swap-file
    ^^^^^^^^^^^^^^ -> 새로운 swap file의 이름
    # /etc/swap -a

    3. 위와 같이 한후 "swap -l" 명령으로 새로 만든 swap file이 추가되었는지 확인한다.

    # swap -l
    swapfile dev swaplo blocks free
    /dev/dsk/c0t0d0s1 32,1 16 410384 371216
    /export/new-swap-file - 16 102384 102384

    4. 새로 추가한 swap file이 시스템 rebooting 후에도 사용되게 하려면 아래와 같은 내용을

    /etc/vfstab에 추가한다.

    # vi /etc/vfstab

    /export/new-swap-file - - swap - no -


    1block을 byte 단위로 환산시에는 1/512 (block/bytes)입니다.

    1024 block을 byte 단위로 환산하면,

    1024*512 = 524,288 byte이 되며,

    524288/1024 = 512 Kbyte 가 됩니다.

    1048576 Byte = 1024 Kbyte = 1 Mbyte
    --

    2006/09/08 14:28 2006/09/08 14:28
    이 글에는 트랙백을 보낼 수 없습니다
    Linux  2006/09/08 14:27
    출처 블로그 > 배배
    원본 http://blog.naver.com/balhea21/100005869286
    SUBJECT:   Awk 명령어 사용법


    o awk 명령어
      awk라는 이름은 이를 개발한 세 사람의 이름 Aho, Weinberger, Kernighan에서 유래된 것이다.
      awk명령어는 일련의 입력 화일을 읽어 지정된 패턴과 일치하는 패턴을 간직한 라인을 찾는다.
      패턴이 일치하면 지정된 연산이 실행된다. 여기서의 연산은 라인 내의 필드 조작이나 필드값을
      이용한 산술 연산을 의미한다. 이 awk는 shell programming과 bc 그리고 C 프로그래밍언어의 기능을 갖춘
      프로그래밍 언어로 bc와 같이 완벽하게 해독이 되며 쉘의 인수인 $1, $2, $3과 같은 이름을 가진
      필드 변수가 각 입력 라인에 사용될 수 있다. 또 C 언어와 유사한 프린팅, 제어 연산자도 가지고 있다.
      awk의 사용에는 두가지 방법이 있다. 한가지 방법은 다음 형식으로 타이프하는 것이다.
        # awk program filename  --> program: 명령어들로 이루어짐
                                    filename: awk가 작용할 화일의 명칭
        # awk -f file filename  --> file: 프로그램 명령어들을 포함하고 있는 화일의 명칭
      프로그램은 하나 또는 그 이상의 프로그램 라인들로 이루어진다. 프로그램 라인은 일반적으로
      패턴과 작용으로 이루어진다.
        /rotate/ {print}   --> 패턴은 rotate(단순한 문자열 패턴은 /들로 둘러싸임)
                               작용은 print이다.
      이것을 사용하면 , awk 프로그램은 문자열 rotate를 포함하고 있는 라인들을 발견하고 그것들을 프린트한다.
      그것은 grep rotate filename을 사용하는 것과 같다.
      필드들은 공백들에 의해 분리된 문자열들이다.
      awk 프로그램은 필드에 대한 레이블 시스템을 가지고 있다. $1은 첫 번째 필드이고 $2은 두 번째 필드이다.
      $0은 특수한 의미를 갖는바, 그것은 전체 라인을 나타낸다.
      ---------------------------------------------------------------------------------------------
         패  턴                    의     미
      ---------------------------------------------------------------------------------------------
        /fish/              문자열 fish를 포함하고 있는 라인
        $1 - /fish/         첫번째 필드가 문자열 fish를 포함하고 있는 라인
        $3 - /fish/         세번째   "                "
        $1! - /fish/        첫번째 필드가 문자열 fish를 포함하고 있지 않은 라인
      ---------------------------------------------------------------------------------------------
         
      ---------------------------------------------------------------------------------------------
         작  용                     의    미 
      ---------------------------------------------------------------------------------------------
        {print $2}          두번째 필드만을 프린트하라
        {print $4,$2}       네번째 필드의 내용을 프린트한 다음 두번째 필드의 내용을 프린트하라
        {print $2,$2+$4}    두번째 필드를 프린트한 다음 두번째 필드와 네번째 필드의 합을 프린트하라
        {s=$2+$4; print s}  두번째와 네번째 필드를 추가한 다음, 그 합을 프린트하라
      ---------------------------------------------------------------------------------------------
      패턴에서의 ~와 !사용에 주목하라. ~는 우측에 있는 패턴이 좌측에 있는 필드에 포함된다는 것을 의미한다.
      !~ 조합은 우측의 패턴이 좌측의 필드에 포함되지 않음을 의미한다.
      { }작용들을 세미콜론으로 분리시킴으로써 하나 이상의 작용들을 포함시킴 수 있다.

      몇가지 이러한 개념들을 사용하는 간단한 예를 고찰해보자. 화일 sales는 여섯 열의 정보를 가지고 있다.
      첫번째 열은 품목 명칭, 두번째 열은 품목의 판매가격 , 그리고 다음의 네 열들은 품목에 대한 분기별
      판매수이다.
         # vi sales
            carts     29.99  45  13  55  22
            corks      0.02  30  20  25  93
            doors     49.99  40  15  20  25
            geese     15.00   2   8   1 128
            nighties  50.00  11  23  15  82
      우리는 두 열을 추가하려 한다. 품목합계 그리고 현금 판매 합계.
      다음과 같은 addup이라는 화일을 작성한다.
         # vi addup
           {total=$3+$4+$5+$6;print $0, total, total*$2}
      이 작용은 ;에 의해 분리된 두 부분들을 가지고 있다. 첫 부분은 판매수를 합하고 영리하게도 합계를
      total이라 부른다. 두번째 부분은 원래의 라인($0)을 프린트하고, 그 뒤에 합계를 , 그 다음에는
      total*$2를 프린트하는데, 이것은 합계x두번째 열을 의미한다.
         # awk -f addup sales
            carts     29.99  45  13  55  22  135  4040.64
            corks      0.02  30  20  25  93   93  3.36
            doors     49.99  40  15  20  25  100  4999
            geese     15.00   2   8   1 128  139  2085
            nighties  50.00  11  23  15  82  131  6550


    o awk 입력 라인을 읽는 방법
      표준 입력이나 화일로부터 읽혀지는 각 라인은 공백문자로 구분된 필드를 가지고 있는 것으로 간주된다.
      -F(field)선택자 뒤에 임의의 문자를 입력하면 필드 구분자가 그 문자로 변경된다.
      예를 들어 :(콜론)을 구분자로 사용하려면 다음과 같이 입력한다.
        # awk -F: -f prog files
     
    o awk의 패턴과 연산
      awk가 읽어들이는 라인과 필드들에 대한 작업은 패턴-연산의 쌍으로 정의되며 이쌍은 다음과 같은
      형식을 갖는다.
         pattern {action}
      연산 부분을 중괄호로 둘러쌈으로써 패턴과 구분한다. 연산 부분이 생략되면 그 라인이 프린트된다.
      일반적으로 사용되는 연산에는 print가 있으며 이 연산은 인수를 표준 출력에 출력한다.
      다음연산은 입력 필드 개의 순서를 바꾸어 출력한다.
         { print $2, $1}
        # vi in.file
          hello goodbye again
          111 222
          thirty forty
        # vi awk.prog1
          {print $2, $1}
        # awk -f awk.prog1 in.file
          goodbye hello
          222 111
          forty thirty
      위의 예에서 print의 인수는 콤마로 구분되었으며 이로 인해 출력 데이터 사이에 현재의 필드 구분자가
      삽입되었다. 콤마가 생략되면 $1과 $2가 연속하여 출력된다.
      예를 들어 다음의 awk 프로그램은
        # vi awk.prog2
          /hello/ {print $2, $1}
        # awk -f awk.prog2 in.file  --> 입력 화일 내에서 패턴 /hello/과 일치하는 라인은 1개뿐이기
           goodbye hello                 때문에 그 라인에 대해서만 지정된 연산인 print가 실행되었다.
        # vi awk.prog3
          /hello/ {print $2, $1}
          /thirty/ {print $1, $2, "and more"}
        # awk -f awk.prog3 in.file  --> print명령어의 인수가 따옴표로 둘러싸여 제공되었으며 그 문자열이
           goodbye hello                 출력에 표시되었다.
           thirty forty and more
        # vi awk.prog4
          /hello/||/111/ {print "htt", $1, $2}
        # awk -f awk.prog4 in.file  --> ||연산자는 2개의 정규식 중 하나만 일치하면 지정된 연산을 실행하며
           hit hello goodbye            &&연산자는 2개의 정규식이 모두 일치애햐 지정 연산을 실행한다.
           hit 111 222                  !연산자는 정규식이 일치하지 않아야 지정된 연산을 실행하며
                                        정규식 앞에 기술된다.
        # vi awk.prog5
          /^[Hh1]/ {print "htt", $0}
        # awk -f awk.prog5 in.file  --> $0을 사용했기 때문에 입력 라인 전체가 출력되었음
           hit hello goodbye again      Hh1으로 시작하는 line을 출력
           hit 111 222
        # vi awk.prog6
          /hello/ {
                   print $2
                   print "another"
                   print $1
          }
        # awk -f awk.prog6 in.file  --> 패턴 /hello/와 일치하는 첫번째 입력 라인만이 연산의 대상이 됨
           goodbye
           another
           hello
       
    o awk를 이용한 숫자 연산
      awk의 산술 연산이 bc의 산술 연산과 다른 점은 awk는 입력 화일 내의 라인 중 일부를 선택하는
      패턴 부분을 사용할 수 있다는 것이다.
      예를 들어 awk의 내장 함수인 length는 문자열로 취급되는 입력 필드의 길이를 뱐환하며 숫자 변수는
      숫자로 취급되는 필드의 값을 할당받을 수 있다.
        # vi awk.prog7
          {
                s += $2
                print $2, "length=" length($2), "s=" s
          }
        # awk -f awk.prog7 in.file  --> 숫자로 변환될수 없는 문자열은 값이 0이 된다.
           goodbye length=7 s=0         문자열 thirty가 그 예로서, 숫자로 변환될수 없다. 그러나 문자열
           222 length=3 s=222           222는 숫자로 올바르게 변환되었다. 또한 s=0과 같은 형식으로 변수에
           forth length=5 s=222         값을 할당할 수 있다.
      다음은 awk변수의 욜바른 예이다.
      s
      S
      SS
      S1
      qwerty[42]
      변수를 사용하기 전에 선언하거나 초기화시킬 필요는 없다. awk가 자체적으로 변수를 초기화시키며
      필요에 따라 그 변수를 문자열이나 숫자를 기억시킬수 있다.
         # vi awk.prog8
           /hello/ {
                   SSS=34
                   print "SSS is", SSS
                   SSS=hello
                   print "SSS is", SSS
           }
         # awk -f awk.prog8 in.file  --> 이와 같은 자동적인 변수 형식 변환은 변수의 사용을 수월하게 한다.
            SSS is 34
            SSS is hello

    o 처리를 시작하고 끝내기 위한 특수 패턴
      정규식 패턴 외에도 2개의 특수 패턴으로 BEGIN과 END가 사용된다. BEGIN은 첫 번째 입력 라인을
      읽기 전에 awk프로그램의 선두에서 실행되며 END는 마지막 입력 라인이 처리된 후 프로그램의 제일
      끝에서 실행된다.
      BEGIN은 주로 변수 초기화 등의 작업에 사용되며 END는 마지막 계산을 하고 출력을 요약하는 작업에
      사용된다. BEGIN이나 END가 없어도 되나 필요한 경우 포함시킬 수 있다.
      예를 들어 다음 프로그램은 여러 개 숫자의 평균값을 출력한다.
          BEGIN {
                   print "Beginning to process the input data ..."
                 }
                {
                   s += $1
                   n++
                 }
          END   {
                   print "mean of these",n,"data items is", s/n
                 }
      메시지를 프린트하는 BEGIN과 관련된 연산은 프로그램의 선두에서 실행되며 그 후에 각 입력라인이
      읽혀진다. 패턴이 생략되었기 때문에 모든 입력 라인에 대해 연산이 실행되었다.
      첫 번째 필드를 변수 s에 더하고 1을 증가시키며 마지막의 END패턴은 모든 입력이 처리된 후 실행된다.
      이 END 패턴에서는 계산의 최종 결과를 출력하고 있다.


    다음은 서버를 관리할 때 유용한  awk 명령어입니다.

    참고하시면 될 것 같습니다.


    1. httpd.conf 파일에서 ServerName이란 문자열을 찾아 두번째 필드값만 출력.

    cat httpd.conf | grep ServerName | awk '{print $2}'



    2. httpd.conf 파일에서 ServerName이란 문자열을 찾아 두번째 필드값만 출력하고

      그 출력된 값에서 .으로 구분된 두번째 값을 출력.

    cat httpd.conf | grep ServerName | awk '{print $2}' | awk -F. '{print $2}'



    3. passwd 파일에서 사용자와 홈디렉터리를 출력.(예: user :root  home_dir :/root)

    cat /etc/passwd | awk -F: '{print "users :"$1"  ""home_dir :"$6}'


    4. httpd 프로세스를 조회. 두번째 필드값인 PID값만 출력해서 xargs 명령어로 받아 kill 시킴.

    ps -ef | grep httpd | grep -v grep | awk '{print $2}' | xargs kill -9


    5. killall process_name (이런 방법도 있죠.. 그런데 이 방법은 프로세스명으로 죽입니다.

    예를 들어 pma란 사용자의 프로세스를 모두 죽이는 방법은 4번과 같이 해야 되겠죠?)

    2006/09/08 14:27 2006/09/08 14:27
    이 글에는 트랙백을 보낼 수 없습니다
    리눅스 데몬 프로그램 만들기! | Linux Tip
    2004.05.20 15:22
    고슴도치(praying4u) http://cafe.naver.com/praying4u/17
    Daemon 프로그램은 보통 telnet, httpd, mysql 과 같은 각종 서버를 background 상태에서 돌아가는 프로그램을 말한다. 그러나 background 프로그램과 Daemon 프로그램은 엄연한 차이가 있다.

    일반적인 background 프로그램은 터미널을 가지지만, Daemon 프로그램은 터미널을 가지지 않는다.
    왜냐하면 보통 데몬프로그램은 특별한 일이 없는한 사용자와 상호대화할 필요 없이 아무도 모르게 실행되어야 하기 때문이다.
    또한 모든 데몬 프로그램은 PPID 즉 부모 프로세스가 1번으로 세팅되며, 이는 데몬 프로그램의 관리프로세스는 1번 pid 를 가지는 init 가 담당함을 의미한다.

    [yundream@huhu loging_server]$ ./my_server&[yundream@huhu loging_server]$ ps -efjcUID        PID  PPID  PGID   SID   CLS PRI STIME TTY          TIME CMDyundream  4314  4219  4314  4175     -  30 15:36 ttyp0    00:00:00 ./my_server&[yundream@huhu loging_server]$ ./my_server -D[yundream@huhu loging_server]$ ps -efjcUID        PID  PPID  PGID   SID   CLS PRI STIME TTY          TIME CMDyundream  4319     1  4319  4319     -  30 15:37 ?        00:00:00 ./my_server
    위의 화면은 my_server 란 프로그램을 백그라운드 모드로 실행시켰을 경우와 -D 옵션을 줘서 데몬모드로 실행시켰을때의 ps 정보를 보여준다.
    데몬 프로세스의 경우를 보면 알겠지만, PPID가 1로 세팅되어 있으며 TTY 즉 터미널을 가지지 않음을 알수 있다. 그래고 SID 역시 자신의 PID와 같다는것을 알수 있다.

    그럼 이제 실질적으로 데몬 프로그램을 만들도록 해보자, 데몬 프로그램을 만드는 핵심은 바로위에서 설명한대로 터미널을 가지지 않으며 PPID가 1인 프로세스를 만드는 것으로 아래와 같은 코딩 규칙을 이용해서 작성가능하다.
    1. 우선 fork 를 호출해서 자식프로세스를 생성시킨 다음 부모프로세스를 종료시킨다.
    2. setsid 를 이용하여 새로운 세션을 만들고, 현재프로세스(자식)의 PID가 세션의 제어권을 가지도록 한다.
    3. chdir 을 이용하여 프로세스가 루트디렉토리에서 작업을 수행하도록 변경시켜준다.

    1번을 이해하려면 fork에 대한 이해가 필요한데, 기본적으로 부모프로세스가 자식프로세스를 fork 했을경우 해당 자식프로세스의 PPID 는 부모프로세스의 ID 가된다. 그런데 자식이 죽기전에 부모프로세스가 죽어버리면 자식프로세스의 PPID 는 (다시말해서 자식프로세스의 소유 프로세스) 누가될까 ?
    부모 프로세스는 이미 죽었음으로 PPID가 될수 없을것이다.
    이럴 경우 자동적으로 자식프로세스의 관리 프로세스는 PID 1 번인 init 가 담당하게 된다.

    2번의 setsid 는 새로운 새션을 생성하기 위해서 사용한다. 보통 세션은 자신의 세션을 위한 tty 를 가져야 되는데, 새로운 세션을 생성하면 여기에 tty 를 부여해 주어야 한다. 그렇지 않게 될경우 터미널을 가지지 않은 세션이 생성되게 된다. 세션(Session)에 대한 논의는 다른 문서를 참고하기 바라고, 간단히 생각해서 세션이란 프로그램 그룹의 모음이라고 일단은 생각해주길 바란다.
    어쨋든 이렇게 해서 프로세스는 자신만의 독자적인 길을 걷게 된다.

    3번은 선택사항이다. 굳이 해주지 않아도 되지만, 데몬 프로그램에서 여러가지 파일을 읽고 쓰는 작업을 할때 상대경로를 명시함으로써 일어나는 혼동을 피하기 위해서 권장하는 방법이라고 생각하면 될것이다.

    데몬프로세스의 위의 3가지 조건만 만족시켜주면 된다. 그럼 에제를 통해서 실제 데몬 프로그램을 만들어서 실행시키고, 그 결과를 확인해 보도록 하자.

    예제 daemon.c
    #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <fcntl.h> int main(){    pid_t   pid;    if (( pid = fork()) < 0)    exit(0);    // 부모프로세스를 종료한다.     else if(pid != 0)    exit(0);        //setsid();    chdir("/");    // 여기에 프로그램 본체를 넣는다.     setsid();        while(1)    {    sleep(1);    }}
    아주아주 간단하게 데몬프로그램을 만들수 있음을 알수 있다.
    이제 결과를 한번 확인해 보도록 하자
    [yundream@localhost test]$ ./daemon[yundream@localhost test]$ ps -efjc | grep daemonUID         PID  PPID  PGID   SID   CLS PRI STIME TTY          TIME CMDyundream  18710     1 18710 18710     -  30 23:42 ?        00:00:00 ./daemon
    PPID가 1로 되어 있고 SID가 자신의 PID로 되어있으며 tty 를 가지지 않은 프로세스가 만들어졌음을 알수 있을것이다.
    모든 프로그램에 위의 코드만 추가시켜주면 어렵지 않게 데몬프로그램을 제작할수 있을것이다

    2006/09/08 14:26 2006/09/08 14:26
    이 글에는 트랙백을 보낼 수 없습니다

    리눅스 시스템 관리자가 되기 위해서는 많은 것을 알아두어야 한다. 시스템 관리자의
    관리 여하에 따라 많은 사람들의 시스템 장애를 초래할 수 있기 때문이다. 물론 시스
    템 관리자가 모든 것을 미리 예방할 수 없다. 하지만 불가피한 상황을 제외하고는 시
    스템이 정상적으로 작동되도록 해야한다.

    이번호에는 시스템, 네트워크, APM, 메일, 보안, 장애발생시 복구등에서 일어날 수 있
    는 시스템 관리자의 행동요령에 대해 알아볼 것이다. 시스템 관리자는 항상 모니터와
    키보드아 함께 한다는 사실을 기억해야 한다.


    [ 막강한 시스템 길들이기 ]

    1. 바이오스 타이머 조정

    시스템이 네트워크에 연결되어 있다면, 다음과 같이 한국 표준시간 서버에서 표준시간
    을 받아서 설정할 수 있다.

    # rdate -s time.kriss.co.kr

    시스템이 온라인 상태가 아니라면 아래와 같이 수동으로 설정할 수도 있다.

    # date -s "1999-12-30 22:22:40"

    위와 같이 실행하면 실행할 때만 적용되므로 이후 시간이 늦어지는 것을 막기 위해서
    는 주기적으로 변경 가능하게 크론(/etc/crontab)에 설정하는 것이 좋다.

    2. .profile과 rc.local의 차이

    .profile은 로그인시 적용되는 내용들이고, rc.local은 시스템 부팅시 실행해야 할 것
    들을 적어 놓은 것이다. 사용자 홈디렉토리의 .profile이 /etc에 있는 설정 파일보다
    우선하기 때문에 홈 디렉토리에 .profile에 패스를 설정해주거나 쉘환경 파일 등을 설
    정해주면 계정 내에서 적용이 된다. rc.local에는 부팅시 가장 마지막에 실행되므로
    일반적으로 부팅시 실행되어야 할 데몬 등을 적어준다.

    3. 커널 컴파일시 시스템 자원 확인법

    리눅스 시스템의 자원정보는 proc 파일시스템 구조를 통해서 알 수 있다. 이는 실제로
    디스크 용량을 차지하는 파일들이 아닌 가상의 디렉토리 구조이며 리눅스 커널에 의
    해 사용되는 시스템의 정보를 담는 곳으로 사용된다. 다음의 위치에서 하드웨어에 대
    한 정보 및 시스템 관련 정보들을 확인할 수 있다.

    -------------------------------------------------------------------------------
    /proc/cpuinfo | CPU의 정보
    -------------------------------------------------------------------------------
    /proc/interrupts | interrupt 할당 정보
    -------------------------------------------------------------------------------
    /proc/ioports | I/O 포트 할당 정보
    -------------------------------------------------------------------------------
    /proc/devices | Character, Block 장치명
    -------------------------------------------------------------------------------
    /proc/swaps | 활성화된 스왑영역 정보
    -------------------------------------------------------------------------------
    /proc/meminfo | 물리적인 램용량, 램 사용량, 스왑 사용량 등
    -------------------------------------------------------------------------------
    표 1. proc 파일 시스템 구조를 통한 시스템 자원 정보

    위와 같이 관련된 정보에 해당하는 파일 이름이 존재한다. 이 파일들은 텍스트 포맷이
    므로 cat 명령을 통해서 확인할 수 있다.

    4. vi 에디터로 유닉스에서 도스상의 ^M 문자 없애기

    ^M 문자를 공백으로 치환하면 된다.

    :1,$s/^M//g

    5. 특정 rpm 패키지의 설치 여부 확인

    # rpm -qa | grep 패키지 명으로 확인할 수 있다.

    6. RPM(Redhat Package Manager)에서 특정 패키지 복원시키기

    rpm2cpio filename.rpm | cpio -I -make-deretories -E filename

    7. TCP Syn Flooding 공격 대처방법

    Tcp Syn Flooding은 웹으로의 공격이 대부분이므로 syn_recv 프로세스가 일정 개수가
    넘게 되면 아파치를 재시작한다. 지속적인 공격일 경우 대처 방안으로 두 가지 방법이
    있다. 첫째, sysctl -a | grep syn_backlog으로 확인 후 backlog를 늘려주거나 둘째,
    sysctl -a | grep syncookies로 확인 후 syncookies의 값을 1로 바꾸어준다. syn_bac
    klog의 값을 조정해주는 방법은 다음과 같다.

    # sysctl -w net.ipv4.tcp_max_syn_backlog=1024
    # echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog

    syncookies의 값은 다음과 같이 변경이 가능하다.

    # sysctl -w net.ipv4.tcp_syncookies=1

    8. TCP Syn Flooding 공격 대처방법

    Umount시 위와 같은 메시지가 나는 것은 unmount하려는 디렉토리에서 실행되고 있는
    프로세스가 있기 때문이다. 예로 /tmp 디렉토리를 umount 시키려 할때 위의 메시지가
    뜨는 경우 mysql.socket파일이 /tmp에 있는 경우를 들 수 있다. 이 경우에는 해당 파
    일시스템에서 실행중인 프로세스를 제거해야 하나 일일이 제거가 번거로우므로 Fuser
    에서 -k 옵션을 사용하면 간단히 해결할 수 있다.

    Fuser -k 장치명

    9. setuserid

    디렉토리나 파일 퍼미션 중 setuid는 소유자의 권한을 잠시 빌려 실행 후 권한을 돌려
    주고 실행을 마치게 되는데 실행도중 인터럽트가 발생한다면 정상적으로 권한을 반환
    하지 못하게 되어 소유자의 권한을 그대로 가지고 있게 된다. 이때 파일의 소유자가
    루트였다면 이것은 보안에 문제가 될수 있으며 이런 점을 이용해 해킹에 많이 사용된
    다. Setuid가 걸여 잇는 파일 중에 실행권하이 있으며 루트권한일 경우에는 위험하다.
    특정 디렉토리에서 setuid가 걸려있는 파일을 찾으려면 find /usr -perm 4775와 같이
    perm 옵션으로 찾을 수 있다.

    10. bash_profile 변경 후 변경된 내용을 유효하게 만들기

    다음과 같이 ~/.bash_profile를 실행해서 변경이 적용되도록 한다.

    # source ~/.bash_profile

    11. root 패스워드를 잊어 버렸을때 다시 세팅하는 방법

    리눅스 시스템을 재부팅하고 lilo가 뜨면 ''linux single''로 부팅한다. Tab 키를 누르
    면 등록되어 있는 라벨이 모두 보이므로, 여기에서 선택하도록 한다. 부팅 후 쉘 명령
    어 화면에서 /etc/passwd 파일에서 암호 부분을 삭제하거나 passwd를 실행하여 루트의
    패스워드를 새로 설정해 준다.

    # passwd root

    위의 명령을 입력한 후 변경할 패스워드를 입력하면 된다.

    12. 파티션을 나누는 이유와 기준

    보통 파티션을 나누는 것에 대해서 별다른 고려없이 /로 모든 것을 잡아서 설치하는
    경우가 종종 있다. 이럴 경우 설치시 편리하지만, 나중에 파일시스템에 문제가 생기거
    나 효율적으로 파티션을 관리하기에는 많은 어려움이 있다. 파티션을 나눌때는 어떤
    용도로 쓸것인지에 대해서 충분히 생각한 후 파티션을 해야 한다. 다음은 9.1GB 스카
    시 하드디스크를 기준으로 웹 서버에서 이용될 서버에 대해 파티션한 경우의 예다.

    -------------------------------------------------------------------------------
    /boot | 30M | boot에 필요한 booting 지원 파일들이 있다.
    | | 커널 컴파일시 1MB 씩 늘어난다는 것을 염두해 둔다.
    -------------------------------------------------------------------------------
    / | 1000M |
    -------------------------------------------------------------------------------
    /usr | 2000M | 리눅스에서 사용되는 모든 application 및 시스템 파일들이 위치
    | | 하고 있으며, library 파일과 실행파일이 존재한다.
    -------------------------------------------------------------------------------
    /var | 1000M |
    -------------------------------------------------------------------------------
    /tmp | 200M |
    -------------------------------------------------------------------------------
    /home | | 나머지 모두 웹 서버 용도로 사용한다면 home 부분에 자료가
    | | 많아질 것이므로 home에 용량을 더 많이 배분했다. 이렇게 파티션
    | | 을 나눠주면 서비스 거부 공격 방어, SUID 프로그램에 대한 보호,
    | | 빠른 부팅속도, 백업과 업그레이드 등 관리의 편리성, 마운팅된
    | | 파일 시스템에 대한 제어 가능성의 증대, 각 파일 시스템에 대한
    | | 효율적인 제한이 가능하다는 이점이 있다.
    -------------------------------------------------------------------------------
    표 2. 9.1GB 스카시 하드디스크를 기준으로 한 웹 서버 파티션의 예

    13. 기존의 ext2파일시스템과 저널링 파일시스템인 ext3, Reiser의 비교

    -------------------------------------------------------------------------------
    최대 파일사이즈 | ext2 | Journalling filesystem
    | |---------------------------------------------
    | | ext3 | Reiser FS
    -------------------------------------------------------------------------------
    최대저장용량 | 2TB (지원으로 | 4TB | 4GB of blocks, 16Tb
    | 4TB까지 가능) | |
    -------------------------------------------------------------------------------
    블럭사이즈 | 1KB | 1KB - 4KB | Up to 64KB Currently
    | | | Fixed 4KB 필요할 때마다
    | | | 정확한 사이즈 할당가능
    -------------------------------------------------------------------------------
    최대 파일사이즈 | 2GB | 2GB | 4GB, 2^10 Petabytes in
    | | | ReiserFS(3.6.XX)
    -------------------------------------------------------------------------------
    장점 및 단점 | 성능위주, 20KB | 파일복구 능력 | 공간저약 효과,
    | 저장에 유리, | 뛰어남, 항상 로그 | 속도향상
    | access 속도저하| 남기므로 속도 저하|
    -------------------------------------------------------------------------------
    표 3. ext2, ext3, Resiser의 특징 및 장담점

    /var 디렉토리와 같이 항상 새로운 자료가 쌓이는 곳은 안정성이 우선시 되므로, ext3
    파일시스템이 유리하며, /usr와 같이 내용 변화 없이 빠르게 액세스하여 쓸 수 있어야
    하는 부분은 ext2 시스템을 이용하여 성능에 초점을 두면 좋을 것이다.

    14. 기본 데이터 블럭 사이즈 1024KB와 4096KB의 차이

    1024KB인 경우에는 블럭이 작은 만큼 4096KB보다 하드의 낭비가 적다. 1023KB의 데이
    터를 저장하는 경우, 기본 블럭사이즈가 1024KB일 때는 1K 공간이 사용되지만, 4096KB
    가 기본 블럭이라면 4K를 차지하게 된다. 하지만 아주 작은 파일들이 많은 경우 해당
    데이터를 액세스하는 데는 1024KB가 4096KB보다 더 걸리게 되므로 퍼포먼스가 급격히
    떨어지게 된다. 따라서 자신이 이용하는 시스템의 특성과 용도에 맞게 블럭 사이즈를
    지정해서 사용하면 된다.

    15. RAID

    RAID는 ''Redundant Array of Inexpensive (or Independant) Disks''의 약어다. RAID 시
    스템은 여러 드라이브의 집합을 하나의 저장장치처럼 다룰 수 있게 하고, 장애가 발생
    했을 때 데이터를 잃어버리지 않게 하며 각각에 대해 독립적으로 동작할 수 있도록 한
    다.

    16. RAID 레벨 1과 레벨 5의 특성

    시스템의 다운, 데이터 손실에 대비하여 보통 여러가지 RAID 레벨 중에서 1과 5번 방
    법을 많이 사용한다.

    RAID 1(mirroring)의 특징은 빠른 기록 속도와 함께 장애복구능력이 있다는 것이다. 2
    대의 드라이브만으로 구성할 수 있기 때문에 작은 시스템에 적합하다. 읽을 똑같은 하
    드가 복제되고 있으므로, 시스템에 문제 발생시 서비스 지연시간이 매우 짧아서 웹 서
    비스를 하는 곳에서 유용하게 쓸 수 있다. 하지만 한 하드의 내용이 또 다른 하드에
    똑같이 복사되므로 하드용량의 낭비가 심하다.

    RAID 5(distributed parity)는 작고 랜덤한 입출력이 많은 경우 더 나은 성능을 제공
    한다. 빠른 기록 속도가 필수적이지 않다면, 일반적인 다중사용자 환경을 위해 가장
    좋은 선택이다. 그러나 최소한 3대, 일반적으로는 5대 이상의 드라이브가 필요하다.
    변경된 내용이 있을 경우 그것만 기록한다. 일반적으로 RAID 1은 ECC 계산을 하지 않
    으므로 RAID 5보단 빠르고, RAID 5는 하드 공간을 좀 더 여유있게 쓸 수 있다는 장점
    을 지닌다.

    17. 백업 계획 및 정책 수립의 요소와 Full 백업과 Incremental 백업

    먼저 시스템의 전체 용량이 어떻게 되고, 그 중에서 백업할 가치가 있는 것은 어떤 부
    분인지를 결정한다. 사용할 백업 장비와 종류를 알아보고, 총 백업 시간과 어느 정도
    부하가 걸리는지 예상해보고 테스트해 본 후 마지막으로 백업 스케줄을 정한다. Full
    백업은 백업할 자료를 처음부터 끝까지 다 기록하는 것이고, Incremental 백업은 이전
    의 데이터와 비교해서 새로 추가된 내용만 백업하는 방법이다. 따라서 Full 백업시 완
    전히 데이터를 백업할 수 있지만 시간이 많이 걸리고, 시스템에 부하를 초래할 수 있
    는 반면에 Incremental 백업은 빠른 시간내에 백업을 할 수 있지만, 백업하는 시간에
    따라 데이터가 완전히 백업되지 못할 경우도 있을 수 있다.

    18. SNMP의 의미와 구성요소

    SNMP는 ''Simple Network Management Protocol''의 약자다. 네트워크에 연결되어 있는
    장치에서 네트워크에 관련된 정보를 모으고 문제점 등을 보고할 수 있는 기능을 제공
    하는 프로토콜이다. 구성요소는 에이전트와 매니저가 있다. 이것은 서버/클라이언트
    구조로서 에이전트가 서버에 해당되고, 매니저가 클라이언트에 해당한다. 에러가 발생
    하는 경우는 선택한 장비에 SNMP가 Enable이 안되었거나, 네트워크에 문제가 있어서
    모니터링 하려는 장비까지 프로토콜이 전송되지 않는 경우, community 값이 잘못 사용
    된 경우 등이 있다.

    19. 데몬을 실행하고 정지하기

    /etc/rc.d/init.d이 디렉토리에 있는 서비스를 ''서비스명'' stop 또는 start 시키거나
    재시작시킨다.

    20. 사용자별로 하드디스크 사용 용량 설정하기

    quota를 이용하면 된다. df 명령으로 사용자의 홈디렉토리가 있는 디바이스를 확인한다.

    -------------------------------------------------------------------------------
    filesystem 1k-blocks Used Available Use% Mounted on
    /dev/sda5 3028080 878480 1995780 31% /
    /dev/sda1 62217 7713 51291 13% /boot
    /dev/sda6 2759260 2088820 530276 80% /home2
    /dev/sdb1 8744304 6496724 1803388 78% /home3
    /dev/sdc1 3529628 25597928 7905940 76% /home4
    /dev/sda10 202220 6 191774 0% /tmp
    /dev/sda7 1517920 1280648 160164 89% /usr
    /dev/sda8 608724 426992 150812 74% /var

    # edquota username

    Quotas for user jhk1:
    /dev/sda6: blocks in use: 47584, limits (soft = 0, hard = 0) /* 이 부분에 설정*/
    inodes in use: 4590, limits (soft = 0, hard = 0)
    /dev/sda8: blocks in user: 4, limits (soft = 0, hard = 0)
    inodes in use: 1, limits (soft = 0, hard = 0)
    -------------------------------------------------------------------------------

    Soft는 용량에 설정되어 있는 용량은 넘어도 어느 정도 여유가 있지만, hard 용량에
    설정된 크기는 절대적이다. 따라서 hard 용량을 사용자는 넘을 수 없다. 일반적으로 s
    oft 용량을 hard 용량보다 조금 더 적게 설정해 놓는다. 쿼터 조정후 quotacheck /dev
    /sda6를 해줘서 체크를 해 주도록 한다.

    21. -(하이픈)으로 시작하는 파일 지우기

    파일명이 하이픈(-)으로 시작하는 파일

    -------------------------------------------------------------------------------
    rm ./-filename 상대경로를 이용하여 파일명을 지정해줌
    rm -- -filename --를 이용 그 이후에는 오는 ''-filename''이라는 파일이 옵션이
    아닌 파일명이라는 것을 밝힘
    -------------------------------------------------------------------------------

    22. 사용하지 않은 가상 콘솔의 메모리 절약법

    /etc/inittab에서 사용하지 않은 가상콘솔레벨을 주석처리 해주면 된다.

    -------------------------------------------------------------------------------
    # Run gettys in standard runlevels
    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    #4:2345:respawn:/sbin/mingetty tty4
    #5:2345:respawn:/sbin/mingetty tty5
    #6:2345:respawn:/sbin/mingetty tty6
    -------------------------------------------------------------------------------

    23. 시스템 지원 모니터링 툴

    -------------------------------------------------------------------------------
    시스템 자원 | 모니터링 툴
    -------------------------------------------------------------------------------
    CPU | top, ps, uptime, vmstat, pstree
    -------------------------------------------------------------------------------
    메모리 문제 점검 | free, vmstat 등
    -------------------------------------------------------------------------------
    메모리에 문제가 없다면 디스트 I/O 점검 | df, du 등
    -------------------------------------------------------------------------------
    표 4. 시스템 자원과 모니터링 툴

    [ 주 의 ]
    디스크와 메모리에 문제가 없는데도 시스템에 문제가 생기면 CPU의 오버 헤드에 문제
    가 있을 가능성이 크다.

    24. 사용자들이 사용한 명령어 알아내기

    먼저 psacct라는 패키지가 필요하다. 설치되지 않은 경우 rpm이나 소스 등을 직접 설
    치한다(대부분 배포본에 기본적으로 포함되어 있으므로 그대로 사용하면 된다). 다음
    과 같이 명령하면 사용한 명령어를 확인할 수 있다.

    -------------------------------------------------------------------------------
    더미 로그 파일 생성(데이타를 기록할 파일 생성)
    # touch /var/log/pacct
    # /sbin/accton /var/log/pacct 체크를 시작하게 하는 명령어 실행
    # lastcomm 사용자계정 사용자가 수행한 명령어 체크
    -------------------------------------------------------------------------------

    25. tar로 특정 경로에 특정 파일 압축 해제하기

    tar xvfpz 압축파일 또는 .tgz -C 특정경로 특정파일의 절대경로(또는 파일명)로 입력
    하면 된다. test.tgz 파일에서 /home/test/test.txt 파일을 /tmp 디렉토리에 압축해제
    를 한다면, tar xvfpz test.tgz -C /tmp /home/test/test.txt와 같이 하면 된다.

    26. ping 명령어 실행시 ttl정보

    TTL이란 Time To Live의 약자다. 이것은 라우팅 에러로 인하여 데이터그램이 네트워크
    를 영원히 떠돌아다니는 것을 방지한다. 라우터는 네트워크 간을 이동하는 데이터그램
    의 TTL 필드를 감소시키며 TTL 필드가 0이 되는 데이터그램은 버린다(drop). IPv4 멀
    티캐스트에서 TTL은 문턱값(threshold)의 의미를 지닌다.

    다음 예를 보면 그 용도가 분명해진다. 회사에서 모든 호스트가 속하는 아주 길고 대
    역폭에 한 부서가 대역폭을 많이 차지하는 인터넷 방송을 한다면, 랜에는 엄청난 용량
    의 트래픽이 발생할 것이다. 인터넷 방송도 하길 원하지만, 멀티캐스트 트래픽 때문에
    인터넷 전체가 마비되어서는 안된다. 멀티캐스트 트래픽이 라우터간을 얼마나 멀리까
    지 이동할 것인지 제한할 필요가 있다. 이것이 TTL의 용도다.

    27. 특정 IP에서 서버 접속 방지법

    TCP Wrapper를 사용하는 방법과 ipchains를 사용할 수 있는데 커널 2.4버전부터는 ipt
    ables을 사용한다. hosts.allow와 hosts.deny를 사용한다면, hosts.deny 파일에서 다
    음과 같이 모두 제한을 한다.

    -------------------------------------------------------------------------------
    all : ALL
    -------------------------------------------------------------------------------

    hosts.allow 파일에서 허용할 IP를 여러 개 설정할 경우 다음과 같이 스페이스로 구분
    하여 준다.

    -------------------------------------------------------------------------------
    all : xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx. xxx.xxx.xxx.xxx ...
    -------------------------------------------------------------------------------

    ipchains나 iptables의 경우에는 다음과 같이 설정하여 주면 된다.

    -------------------------------------------------------------------------------
    # ipchains ?A input ?s xxx.xxx.xxx.xxx ?j DENY
    # ipchains ?A INPUT ?s xxx.xxx.xxx.xxx ?j DROP
    -------------------------------------------------------------------------------


    [ 안전한 네트워크 다지기 ]

    28. 네트워크 설정법

    시스템에 기본적으로 설치된 아래의 명령들을 사용하여 네트워크가 정상적으로 작동하
    지 않은 경우 여러 가지 테스트를 해볼수 있다.

    -------------------------------------------------------------------------------
    ifconfig | 네트워크 인터페이스의 기본 설정에 관한 정보를 제공한다. 잘못된
    | IP나, 서브넷 마스크 및 브로드 캐스트 주소를 확인하는데 효과적이다.
    -------------------------------------------------------------------------------
    arp | 이더넷/IP 주소의 변환에 관한 정보를 제공한다. 로컬 네트워크 내에
    | IP 주소가 잘못 지정되었는지를 확인하는데 효과적이다.
    -------------------------------------------------------------------------------
    netstat | 네트워크 인터페이스, 네트워크 소켓, 네트워크 라우팅 테이블등에
    | 대한 정보를 확인할 수 있다.
    -------------------------------------------------------------------------------
    ping | 원격 호스트가 도달 가능한지를 판단할 수 있다. 또한 패킷의 유실율과
    | 전송 시간 등을 확인할 수 있다.
    -------------------------------------------------------------------------------
    nslookup | DNS 네임 서비스 관련 정보들을 확인할 수 있다.
    -------------------------------------------------------------------------------
    dig | 역시 네임 서비스와 관련된 정보를 제공하면, nslookup과 유사하다.
    | BIND 버전의 확인 방법 및 각 도메인의 네임 서버를 확인하려면 다음과
    | 같이 하면 된다.
    |
    | dig @네임서버이름 txt chaos version.bin. | grep VERSION
    | dig @ns.도메인명 www.도메인명 위의 방법과 도메인을 등록 관리하는
    | 업체에서 whois 검색을 도메인의 소유자 및 네임 서버 정보를 알아볼
    | 수도 있다.
    -------------------------------------------------------------------------------
    traceroute | 원격 시스템까지 패킷이 진행되는 동안의 라우팅 홉(hop) 정보를 확인
    | 할 수 있다.
    -------------------------------------------------------------------------------
    tcpdump | 네트워크를 통해 전달되는 각각의 패킷들을 분석할 수 있으며, 각 패킷
    | 의 내용과 헤더 등을 분석하는 TCP/IP 프로토콜 분석 소프트웨어다.
    -------------------------------------------------------------------------------
    표 5. 명령어와 설정 내용

    29. 네트워크 정보로 이더넷 카드 IP 정보 재조정하기

    /etc/sysconfig 디렉토리 밑에 하드웨어에 대한 정보가 나오는데 이더넷 카드가 여러
    개 꽂혀 있다면 ifcfg-eth1, ifcfg-eth2 식으로 확인할 수 있다.

    -------------------------------------------------------------------------------
    /etc/sysconfig/network-scripts/ifcfg-eth0


    # cat ifcfg-eth0

    DEVICE=eth0
    BOOTPROTO=static /* 정적 아이피 */
    BROADCAST=211.47.64.255
    IPADDR=211.47.64.80
    NETMASK=255.255.255.0
    NETWORK=211.47.64.0
    ONBOOT=yes /* 부팅시 자동인식 */
    -------------------------------------------------------------------------------

    사용하는 IP를 변경하거나, 새로운 네트워크 카드 추가시에는 ifcfg-eth0 파일을 수정
    한 후에 반드시 ifdown ifcfg-eth0, ifup ifcfg-eth0 명령을 실행해 주어야 변경된 IP
    가 적용된다. 또는 /etc/rc.d/init.d/network restart를 실행해주어도 된다.

    30. 스위치와 라우터의 비교

    -------------------------------------------------------------------------------
    | 스위치 | 라우터
    -------------------------------------------------------------------------------
    사용용도 | 두개 이상의 동일 네트워크를 연결 | 동종 또는 이종 네트워크 미디어를
    | 하는 LAN/WAN에 적합 | 사용하는 LAN/WAN에 적합
    -------------------------------------------------------------------------------
    OSI 모델 | 2계층(Data Link), 3계층(Network) | 3계층(Network)
    -------------------------------------------------------------------------------
    목 적 | 특수한 목적의 장비 | 일반 목적의 장비
    | - 대역폭 확장을 위하여 LAN seg- | - 다른 수많은 어플리케이션의
    | mentation 함 | 주소를 유연하게 디자인
    | - 거대한 트래픽을 해결하기 위함 | Limit broadcast traffic
    | - 낮은 지연율과 고성능의 출력 | Redundant active paths
    | - 과업을 최적화 하기 위함 | WAN 액세스
    | | - 일반적으로 거대한 트래픽을
    | | 전송할 때 요구되지 않음
    -------------------------------------------------------------------------------
    동작방식 | MAC 주소를 추적하여 장비의 위치를 | 서로 다른 네트워크 계층 프로토
    | 인식 목적지 MAC 주소에 기초하여 | 콜을 구분할 필요가 있고 프로토
    | 전송하기 위한 목적의 장비 | 콜 지식은 보다 효과적인 전송
    | | 결정을 할 수 있다.
    -------------------------------------------------------------------------------
    설치시 | 설치가 간단하고, 비용이 낮다. | 노드의 경로 설정에 필요한 초기
    | 유지보수가 간단하다. | setup이나 IP 주소 및 네트워크의
    | | 수정시 복잡
    -------------------------------------------------------------------------------
    비고 | 브리지와 비슷하나 훨씬 빠름 | 두개의 기본 기능
    | - 더 작은 collision domain으로 | - 각 네트웍 계층 프로토콜을 위한
    | LAN을 분할 | 라우팅 테이블을 유지
    | - 현재 사용되는 cable과 hardware | - 네트워크 계층 어드레스에 기반
    | 를 그대로 사용 | 하여 각의각 프레임을 전송
    | - Protocol transparent |
    | - 쉽게 추가, 이동, 변경 가능 |
    | - ASIC technology |
    | - 통합된 넓은 bandwidth |
    | - 저렴한 포트당 비용으로 고성능 |
    | 제공 |

    31. httpd.conf에서 ServerType를 standlone으로 설정하는 것과 inetd로 설정하는 것의 차이

    아파치에만 적용되는 내용은 아니지만 standlone으로 설정한 경우에는 /etc/rc.d/rc.l
    ocal나 /etc/rc.d/rc3.d/밑에 설정되어 데몬으로 실행되면, inetd로 설정할 경우 /etc
    /inetd.conf에 추가되어 실행되어 텔넷이나 FTP와 같이 시스템프로세스로 실행되므로
    접속이 많은 httpd인 경우 standalone으로 설정하여야 한다. 그리고 inetd로 설정시에
    는 한정된 프로세스만 수용 가능하며 반응속도가 standalone방식에 비해 느리다.

    32. 아파치에서 httpd.conf 수정 후 데몬이 뜨지 않은 경우 대처법

    httpd -t 옵션으로 우선 syntax error부터 확인한 후 syntax error가 있으면 먼저 수
    정을 해주고 Logs 디렉토리에서 에러 로그 파일을 확인하여 수정 후 재실행한다.

    33. php 설치 후 버전 및 정상적인 설치 여부 확인법

    php3 버전의 경우 index.php3을 php4의 경우 index.php라는 파일을 다음과 같은 내용
    으로 작성하여 웹에서 열어보면 버전 및 연동 현황을 확인할 수 있다.

    -------------------------------------------------------------------------------
    phpinfo();
    ?>
    -------------------------------------------------------------------------------

    34. APM 연동 설치시 php를 모듈로 삽입하기

    먼저 php설치 후 apache 컴파일시 php모듈 넣어서 재컴파일 해준다.

    -------------------------------------------------------------------------------
    ./configure --prefix=/usr/local/apache --activate-module=sr/modules/php4/libphp4
    .a
    -------------------------------------------------------------------------------

    35. 아파치에서 속도제한하기

    아파치에서 bandwidth 모듈이 삽입되어 있는 상태라면 모든 호스트에 대해 1024byte로
    속도를 제한하기 위해 아파치에서 설정해 주는 부분은 다음과 같다. Httpd.conf에서
    BandWidthModule On라고 설정 후 BandWidth all 1024라고 설정한다.

    36. 디렉토리 목록 출력 금지법

    아파치에서 index.html 파일이 없을 때 디렉토리 목록 출력을 원하지 않을 경우에는 D
    ocumentRoot 디렉토리쪽에 설정되어져 있는 옵션에서 Indexes를 삭제한다. 또한 특정
    디렉토리에서만 인덱스를 허용치 않을 경우에는 특정 디렉토리의 .htaccess 파일안에
    ''Options -Indexes'' 이 부분을 삽입하면 된다.


    안전한 메일 관리법

    37. 센드메일에서 메일 용량을 제한하기

    센드메일에서 한번에 보낼 수 있는 메일용량은 /etc/mail/sendmail.cf 파일에서 MaxMe
    ssageSize 부분에서 다음과 같이 주석을 제거하고 바이트 단위로 설정을 해줄 수 있다
    . 받는 메일 계정의 용량은 Mlocal 부분에서 M=1000000 부분에서 바이트 단위로 제한
    량을 적는다.

    -------------------------------------------------------------------------------
    MaxMessageSize=1000000
    -------------------------------------------------------------------------------

    38. 센드메일 데몬을 실행시 수신만하기

    relay를 막는 방법도 있지만 그건 외부에서 로컬 서버를 SMTP로 사용하지 못하도록 할
    수 있으며 iptables를 이용하면 로컬 서버에서 보내는 메일에 대해 제한이 가능하다.

    -------------------------------------------------------------------------------
    # iptables -A OUTPUT -p tcp --syn --dport 25 -j DROP

    -A 기존의 iptables에 추가
    -p 프로토콜
    -dport 포트 넘버
    -------------------------------------------------------------------------------

    로컬에서 외부로 보내는 메일이라면 remote의 25번 포트로 접속이 되므로 OUTPUT 패킷
    중 목적지 포트가 25번인 패킷만 drop한다. 메일 송수신은 tcp이므로 --syn을 추가하
    지 않을 경우에는 3 way-handshaking에 의해 메일을 받을 수도 없게 되므로 반드시 --
    syn을 추가해야 한다. 보내는 메일은 일단 메일큐 디렉토리에 저장된 후 발송되므로
    메일큐 디렉토리를 삭제하거나 다른 이름으로 변경하면 메일을 발송할 수 없게 된다.

    39. 릴레이 설정과 차단법

    /etc/mail/access 파일에서 Relay 여부를 설정한다.

    -------------------------------------------------------------------------------
    localhost RELAY
    -------------------------------------------------------------------------------

    변경한 후 적용하려면 다음과 같이 실행해 준다. 또는 인증 기능(SMTP AUTH)이 지원되
    는 최신 버전의 센드메일을 사용한다.

    -------------------------------------------------------------------------------
    # makemap hash /etc/mail/access < /etc/mail/access
    -------------------------------------------------------------------------------

    40. 특정시스템에 설치되어 있는 센드메일 버전 알아보기

    간단한 방법으로 다음과 같이 텔넷으로 센드메일 포트인 25번으로 접속해보면 알 수
    있다.

    -------------------------------------------------------------------------------
    # telnet jimy.tt.co.kr 25
    -------------------------------------------------------------------------------

    41. 다른 도메인의 웹마스터 계정 사용하기

    가상 계정을 이용해서 해결할 수 있다. 아웃룩에서 jhk라는 계정을 설정하면 jhk@jung
    heekim.co.kr, webmaster@jungheekim.co.kr로 오는 메일을 모두 받아 볼 수 있다.

    -------------------------------------------------------------------------------
    # vi /etc/mail/virtusertable

    webmaster@jungheekim.co.kr jhk(jhk계정에 webmaster라는 계정이 가상계정으
    로 설정)
    -------------------------------------------------------------------------------

    42. 웹메일 포워딩

    해외에 출장이 잦은 사용자가 메일을 자신이 사용하는 웹메일로 포워딩해 달라고 하고
    , 회사에 돌아와서도 포워딩된 메일을 아웃룩에서 다시 받아보길 원한다면 다음과 같
    이 한다. 해당 사용자의 홈디렉토리 밑에 .forward 파일을 만들어서 이메일 주소를 입
    력하고 자신의 계정에는 를 추가해 주어야 루프를 막을 수 있다.

    -------------------------------------------------------------------------------
    vi ~junghee/.forward

    sitsme75@hanmail.net, junghee.kim@tt.co.kr
    -------------------------------------------------------------------------------

    43. 자동응답 메일 작성법

    메일을 확인할 수 없는 상황일 때, 메일 수신 후 자동으로 미리 작성되어 있는 메시지
    를 보낼 수 있는 방법(즉 자동응답 메일 작성 방법)은 자신의 홈디렉토리에 ".procmai
    lrc" 파일을 만들고 다음의 내용을 입력한다.

    -------------------------------------------------------------------------------
    :0 h c
    * !^FROM_DAEMON
    * !^X-Loop:
    YOUR@EMAIL
    | (formail -r -A"Prededence: junk"
    -I"From: YOUR_NAME "
    -A"X-Loop:
    YOUR@EMAIL
    cat $HOME/autoreply.txt) | $SENDMAIL -t
    -------------------------------------------------------------------------------

    그리고 ''autoreply.txt'' 파일에 답변글을 작성햐면 그 내용이 자동 답변된다.

    44. POP3 다운시 설정법

    아웃록에서 메일을 받아보려고 하는데, POP3가 다운되어 반응하지 않을때 다음과 같이
    조정한다. inetd는 기본적으로 1분에 fork 할 수 있는 인스턴스가 40으로 제한되어
    있으므로 이 값을 늘려줘야 한다. POP3 부분에서 nowait.200이나 적절한 수만큼 늘려
    주면 된다. nowait 뒤에 반드시 .(점)을 찍고 허용할 만큼이 POP 데몬의 수를 입력한
    다. 이후 inetd를 재시작하면 적용된다.

    -------------------------------------------------------------------------------
    A # vi /etc/inetd.conf
    # Pop and imap services et al
    #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
    pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
    #imap stream tcp nowait root /usr/sbin/tcpd imapd
    -------------------------------------------------------------------------------


    철통 보안 관리

    45. 일반적인 리눅스 보안법

    1) 현재 서버에서 사용하지 않고, 보안상 취약점이 있는 데몬에 대해 서비스를 중지
    한다.
    2) TCP Wrapper와 ipchains를 이용한다. 커널 2.4에서는 iptables를 이용해 각 서비
    스에 대해서 접속을 허락하거나, 제한한다.
    3) 새도우 패스워드를 반드시 이용한다.
    4) su 권한의 사용을 특정 사용자만 가능하도록 정의한다.
    5) 원격에서 루트 권한으로 접속할 수 없도록 한다.
    6) 지속적으로 패치한다.

    46. Ping 요청 무시하기

    -------------------------------------------------------------------------------
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    -------------------------------------------------------------------------------

    다시 응답하게 하려면 다음과 같이 실행하면 된다.

    -------------------------------------------------------------------------------
    echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    -------------------------------------------------------------------------------

    47. 백도어 파일의 삭제

    보통 백도어 파일은 rm 명령으로도 삭제되지 않는다. 속성이 있을 경우 다음과 같이
    삭제한다.

    -------------------------------------------------------------------------------
    # lsattr /usr/sbin/in.fingerd

    lsattr 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09

    -----a-- /usr/sbin/in.fingerd

    ==> a 속성이 있음을 확인


    # chattr -a /usr/sbin/in.fingerd

    chattr 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09

    ==> -a로 속성을 해제

    lsattr 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09

    -------- /usr/sbin/in.fingerd

    ==> 해제
    -------------------------------------------------------------------------------

    48. lpd(line printer daemon)의 취약점

    lpd는 내부와 원격 프린트 작업을 수행하는 BSD 라인 프린터 데몬이다. lpd 데몬의 접
    근 권한을 가지고 있는 내부 시스템이나 원격 시스템의 사용자가 특별히 변형된 불완
    전한 프린트 작업을 요청하고 이어서 프린터 큐의 디스플레이를 요청하게 되면 해당
    시스템에 버퍼 오버플로우를 일으킬 수 있다. 결국 관리자 권한으로 내부 시스템에 공
    격코드를 실행시킬 수 있게 된다. 따라서 패치를 해주거나 서비스를 하지 않는다면 데
    몬을 중지하는 것이 좋다.

    49. BIND에서 보안상 문제가 있는 버전

    BIND 4.x, 8.x에서 문제가 검출되었다. BIND 8버전에서는 트랜잭션 시그너쳐(TSIG) 핸
    들링 코드에 버퍼오버플로우 취약점을 포함하고 있다.

    유효한 키를 포함하지 안는 TSIG를 발견하는 경우 BIND 8버전에서는 에러응답을 보내
    기 위한 코드를 실행하게 되며, 이때 발생하는 변수 초기화 방식의 차이에 의해 해당
    취약점이 발생하게 된다. DNS 시스템에 대한 요청 접근만으로 해당 취약점을 발생시킬
    수 있으므로 이로 인한 위험성은 크게 된다.

    BIND 4버전에서는 nslookupComplain() 내부에 있는 문자 배열(syslog를 위한 에러 메
    시지 작성 버퍼)에 대해 입력 검증(input validation) 취약점을 포함하고 있다. 이것
    은 특수한 포맷 형태를 가진 쿼리를 전송함으로써 입력 검증 취약점을 발생시킨다.

    BIND 4, 8버전에서는 해당 서버가 쿼리를 처리하는 동안 정보가 누출(information lea
    k)될 수 있는 취약점을 포함하고 있다. 특수한 포맷형태를 가진 쿼리 전송을 통해 공
    격자가 프로그램 스택에 접근할 수 있게 함으로써 해당 취약점을 발생시킨다.

    해결책은 BIND 버전은 8.2.3 이상이나 9.1 버전으로 업그레이드하는 것이다. 이것은
    해결책이 아니라 시스템 관리자가 반드시 해야 할 일이다.


    장애 발생시 복구

    50. 비정상 종료시 하드디스크 체크요구 원인

    대부분 정전이 발생한 후에도 시스템은 정상적으로 부팅되며 파일시스템도 자동으로 c
    heck하지만 간혹 관리자가 수동으로 해주어야 하는 경우가 발생한다. 리눅스가 다운
    되었을때 보통 Power OFF를 하는데, 이때 문제가 발생할 수 있으므로 Magic SysRq라는
    것을 이용하여 안전하게 재부팅하는 방법을 이용한다.

    Magic SysRq key란 시스템의 제어가 불가능한 상태(일반적으로 ''다운''되었다고 한다)
    에서도 제어를 가능하게 해주므로 커널 컴파일시 Kernel hacking ---> [*]Magic SysRq
    key를 체크해야 한다. Magic SysRq key를 사용하려면 다음과 같이 /proc/sys/kernel/
    sysrq 값을 1로 만들어야 한다.

    ------------------------------------------------------------------------------
    # echo 1 > /proc/sys/kernel/sysrq

    lilo: linux init=/bin/sh
    ------------------------------------------------------------------------------

    그러면 커널이 뜨고 바로 shell prompt ''#''가 나타난다. 이때에는 filesystem도 read
    only로 마운트 되고, 동작하는 daemon process도 전혀 없는 상태가 된다. 그 상태에서
    수동으로 모든 파일시스템을 체크한다.

    ------------------------------------------------------------------------------
    # fsck [-t ext2] 장치명
    # e2fsck 장치명
    ------------------------------------------------------------------------------

    위의 명령 사용시 문제가 생긴 블록의 수정여부를 묻게 되는데 ''y''를 선택하고 만약
    수정여부를 묻는 질문이 많다면 -y 옵션을 사용하여 자동으로 ''y''를 선택하게 할 수
    있다.

    ------------------------------------------------------------------------------
    # e2fsck -y 장치명
    ------------------------------------------------------------------------------

    Ctrl-Alt-Del로 리부팅하면 아주 심하게 깨지거나, 디스트에 이상이 있지 않는 한 복
    구가 된다.

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

    2006/09/08 14:25 2006/09/08 14:25
    이 글에는 트랙백을 보낼 수 없습니다
    Linux  2006/09/08 14:22

    ◈  리눅스의 각종 데몬들

    Redhat 8.0 System services description

    작성자: 박경랑 (연세대학교 슈퍼컴퓨팅 , lanx@parallel.yonsei.ac.kr)
    작성일: 2003. 4. 10 연속으로 해킹 두번 당하고 만듦 -_-

    NameDescriptionPortEtc
    FreeWnn일본어 변환 엔진: Kana-to-Kanji 변환 시스템의 network-extensible 버젼
    http://www.freewnn.org
       
    Aep1000aep1000/2000 coprocessor 드라이버   
    amanda네트워크를 통해 여러 host의 데이터를 backup 서버에 저장/복원하는 backup 시스템 http://www.amanda.org    
    amandaidxamanda server package 의 일부   
    Amddemand에 의해 device들이나 NFS host들을 마운트 시킬 수 있는 automount daemon (커널에 의한 지원이 필요없음) http://www.nber.org/amd.html   
    amidxtapeamanda server package 의 일부   
    anacronPeriodic command scheduler. cron과 달리 시스템이 계속 켜있지 않다고 가정
    하루보다 더 작은 단위의 스케쥴을 수행. http://anacron.sourceforge.net/
       
    apmdapm service를 지원하기 위한 daemon   
    arpwatch하드웨어 이터넷 주소와 IP 주소 쌍을 모니터링하는 툴로 로컬 네트워크에서 위장 IP를 탐지할 수 있다.    
    atalkAppletalk network protocol을 이용하여 Macintosh computer들과 통신하게 하는 package. http://www.cs.mu.oz.au/appletalk/atalk.html   
    atd나중에 수행하려고 등록한 작업을 실행한다. 즉 command들을 정해진 시간에 실행되게 예약하고 load average가 충분히 낮을 때 수행한다.    
    autofsamd 보다 더 발전적인 automount 시스템. 커널의 파일 시스템 코드가 automount의 mount point가 다른 보통의 기본적인 파일 시스템 상의 어디에 있는지를 알고 autofs는 그곳에서 mount point를 가져온다. http://kldp.org/HOWTO/mini/html/Automount/   
    bcm5820BCM5820 Cyptonet 드라이버를 load/unload한다   
    bgpdBorder Gateway Protocol 4 (BGP-4) protocol daemon (zebra와 같이 사용하기 위한 routing engine - BGPv4, BGPv4+, BGPv4-)
    http://www.pointless.net/~jasper/zebra-html/zebra_65.html
       
    bootparamdbootparamd server는 옛 sun workstation 들을 linux box를 통해서 net boot가 가능하게 한다. 현재 rarp와 함께 거의 쓰이지 않는데, 이를 대신해서 bootp와 dhcp가 사용된다   
    cWnn중국어 변환 엔진   
    canna일본어 변환 엔진   
    chargenchargen server ver.TCP. chargen: 단순 문자열 발생 서비스19 
    chargen-udpchargen server ver.UCP   
    comsat새 메일이 왔을 때, comsat 서버는 biff client에게 이를 통보해준다.   
    crondcrond   
    cups-lpdlagacy lpt protocol을 이용해서 CUPS와 통신하는 것을 가능하게 하는 서비스   
    daytimedaytime ver.TCP   
    daytime-udpdaytime ver.UCP   
    dbskkd-cub일본어 관련   
    dhcpddhcpd   
    dhcrelaydhcp에 대한 relay 제공   
    echoecho ver.TCP   
    echo-udpecho ver.UDP   
    eklogin암호화된 kerberized rlogin server.(kerberize 5를 이용하여 암호화됨)   
    fingerfinger   
    firstboot처음에 시작된느 드루이드 스타일의 프로그램   
    gpmgpm란, 마우스를 사용한 'cut- and-paste'를, X 상에서 가능한것처럼, Linux의 가상 단말기 사이에서도 가능하도록 하는 프로그램이다   
    gssftpgssftp   
    httpdhttpd   
    identd각각 tcp connection에 대해서 user의 식별을 가능하게 함. TCP port number를 통해서 서버시스템의 connection의 소유자를 인식하는 character string을 제공한다.   
    imapimap   
    imapsimap   
    inndusenet news server   
    ip6tablesiptable을 이용한 packet filitering firewall의 자동화 서비스   
    ipchainsipchain을 이용한 packet filitering firewall의 자동화 서비스   
    ipop2ipop   
    ipop3ipop   
    iptablesiptables를 사용하여 자동적으로 패킹 필터링을 한다.
    http://www.linux.co.kr/theme/pageview.html?ca=200108&pageid=40&casub=iptables&st=Iptables로 기본적인 firewall 구축하기
       
    ipvsadm리눅스 가상 서버를 설치한다.
    http://www.linuxvirtualserver.org/
       
    irdaIrDA 적외선 프로토콜
    http://kldp.org/KoreanDoc/html/Kernel-KLDP/specirda.html
       
    iscsi     
    isdn     
    kWnnKorean Conversion Engine    
    kadminThe kadmin utility communicates with the kadmind server over the network, and they use Kerberos to handle authentication
    http://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide/s1-kerberos-server.html
       
    keytable키보드맵과 시스템폰트를 로드하는 역할을 수행하며 다른 프로그램을 구동시키지 않는다    
    kloginkerberos rlogin
    http://web.mit.edu/kerberos/www/
       
    kotalk     
    kprop     
    krb5-telnet     
    krb524     
    krb5kdc     
    kshell     
    ktalk     
    kudzu부팅시에 새롭게 설치된 하드웨어에 대한 정보를 설정하는 데몬
    http://linuxcommand.org/man_pages/kudzu8.html
       
    ldap     
    lpdline 프린터 데몬으로 부팅될 때 호출된다
    http://www.linuxprinting.org/lpd-doc.html
       
    mars-nweNetWare 호환 파일 프린터 서버   
    mdmonitorsoftware RAID monitoring and management    
    micronode_ctl?script to apply cpu microcode   
    mysqld     
    namedNamed는 인터넷 도메인 네임 서버이며 /etc/named.con파일을 기본적으로 읽어 사용한다.
    http://kldp.org/HOWTO/html/DNS-HOWTO/index.html
       
    netdumphttp://www.redhat.com/support/wpapers/redhat/netdump/index.html   
    netdump-ser     
    netfsNFS, 삼바, 노벨 드라이버의 익스포트파일을 마운트 하는 역할을 한다
       
    network     
    nfs     
    nfslockNFS file locking Server   
    ntalkC++과 Ncurses 라이브러리로 작성된 채팅 프로그램
    http://www.ntalk.prv.pl/
       
    ntpdNTPv4를 위한 데몬
    http://www.ntp.org/index.html
       
    ospff6dRFC2178에 명시되어 있는 OSPFv2 라우팅 프로토콜 제공 데몬 (IPv6)   
    ospfdRFC2178에 명시되어 있는 OSPFv2 라우팅 프로토콜 제공 데몬
    http://www.rrf.ru/doc/zebra/ospfd.html
       
    pcmcia     
    pop3s     
    portmapRPC(Remote Procedure Call)서비스를 위한 포트를 할당하는 역할을 하는 데몬   
    postgresql     
    privoxyAdvanced Filtering을 제공하는 web proxy
    http://www.privoxy.org/
       
    psacct프로세스 통계 관련한 패키지
    http://kldp.org/HOWTO/mini/html/Process-Accounting/Process-Accounting.html#toc4
       
    pxeA Preboot Execution Environment Server, PXE based 머신에서 네트워크 부팅을 할수 있게 해준다.
    http://www.kegel.com/linux/pxe.html
       
    radvd라우터 통보 데몬으로 IPv6 라우터로써 Linux에서 동작한다.
    http://v6web.litech.org/radvd/
       
    randomhttp://man.kldp.org/man/man4/random.4.html   
    rarpd사용자 레벨 reverse ARP 데몬 프로그램
    http://www.gsp.com/cgi-bin/man.cgi?section=8&topic=rarpd
       
    rawdeviceraw devices를 block devices (하드 드라이브 파티션)으로 할당하는 스크립이다. /etc/sysconfig/rawdevices 참고
    http://people.redhat.com/jrfuller/cms/ch-software.html
       
    rexecexecutes command on remote host. username과 passwd기반  http://www.mkssoftware.com/docs/man1/rexec.1.asp   
    rhnsdRed hat Network service. 레드헷 리눅스의 온라인 업데이트 데몬http://www.redhat.com/docs/manuals/RHNetwork/ref-guide/rhnsd.html   
    ripdzebar 라우트 엔진을 지원하는 라우팅 컴포넌트
    http://www.rrf.ru/doc/zebra/ripd.html
       
    ripngdripngd는 네트워크 라우팅 테이블을 관리하는 데몬으로 IPv6에 대한 라우팅 정보 프로토콜을 사용한다.
    http://www.rrf.ru/doc/zebra/ripngd.html
       
    rloginrlogin는 원격 호스트상의 터미널 세션을 시작한다.
    http://kldp.org/Translations/html/Cluster_QuickStart-KLDP/Cluster_QuickStart-KLDP.html#toc4start a terminal session on the remort host. (rlogind) http://www.mkssoftware.com/docs/man1/rlogin.1.asp
       
    routedRouted는 네트워크 라우팅 테이블을 관리하기 위해 부팅시 호출된다.
    http://www.usinglinux.org/doc/translations/ko/NET3-4-HOWTO
       
    rshexecutes command on other hosts.인증된 호스트의 특정 포트만 인증하여 사용 가능  http://www.mkssoftware.com/docs/man1/rsh.1.asp   
    rstatd서버의 각종 성능 통계자료를 제공, rup로 볼 수 있다.    
    rsyncftp server의 addtion 두서버 양쪽의 파일을 비교하여 다른부분만 전송. http://samba.anu.edu.au/rsync/ 873 
    rusersdruser명령어가 되게해주는 서버   
    rwalldremote wall (메시지 broadcast) server   
    rwhodremote who가 되게해주는 서버   
    saslauthdSASL authentication server.   
    sendmailmail을 받는 서버   
    serversan internal xinetd services. listing active servers.9099 
    servicesan internal xinetd services. listing active services. 9098 
    sgi_famFile Alteration Monitor. File이 변화되었을 때 알려주는 기능. 중요한 파일의 변경 여부 탐지, GUI 파일매니저와 연동, http://oss.sgi.com/projects/fam    
    smartdSelf-Monitoring Analysis and Reporting Technology System. Hard disk fiailure 방지를 위해 주로 쓴다고함.  http://csl.cse.ucsc.edu/smart.shtml    
    smbSamba의 smbd와 nmbd를 시작함. http://www.samba.org    
    snmpdSimple network managerment protocol  http://geekcorp.com/snmpd/    
    snmptrapdSimple network managerment protocol. trap daemon   
    spamassassinSpamAssassin is a mail filter to identify spam. http://spamassassin.org/    
    squidInternet object cache. 웹 프락시 캐쉬 http://www.squid-cache.org/3128 
    swatSamba web admin tool.  http://www.samba.org901 
    syslog커널 메시지를 읽어 기록한다. 514 
    tWnnchinese conversion engine.   
    talkremote host와 채팅할 수 있는 데몬.    
    telnettelnet ^^;   
    tftpftp server using tftp (trivial file transfer protocol). 69 
    timetime server rdate를 지원하기 위한 것. tcp version   
    time-udptime server rdate를 지원하기 위한 것. udp version37 
    tuxthread-kernel based http server. http://www.tux.org   
    ups전원이 없을 때 자동으로 shutdown 시킴.    
    vncserverStart VNC(virsual network computing) server. http://www.uk.research.att.com/vnc/    
    vsftpdvery secure file transfer daemon   
    winbindsamba win bind deamon. http://www.samba.org   
    winewindow emulator. http://www.winehq.com/   
    wu-ftpd일반적인 ftp 데몬.21 
    xfsx-font server http://www.suse.de/~mfabian/suse-cjk/xfs.html.   
    xinetdservice wrapper. http://www.xinetd.org   
    yppasswddNIS사용자들의 패스워드 데이터베이스관리.   
    ypservNIS구동을 위한 server프로그램. http://kldp.org/HOWTO/html/NIS/NIS-HOWTO-8.html   
    ypxfrdNIS master와 slave간의 전송속도 향상.   
    zebraGNU routing manager.  routing server나 refelctor를 구성하고자 할 때 사용. http://www.zebra.org2600~6 
    2006/09/08 14:22 2006/09/08 14:22
    이 글에는 트랙백을 보낼 수 없습니다
    Linux  2006/09/08 14:21
    출처 블로그 > 섹 스코리아
    원본 http://blog.naver.com/korean44/9984424
    *** 서버 이전 시 고려할 사항들 ***
    -------------------------------------
    ① 서버가 사용하게 될 네트워크 문제
    ② 사용자들의 ID와 Password 문제
    ③ 서버 내의 Domain 들의 DNS 문제
    ④ 서버 내의 Homepage와 Data 들의 문제
    ⑤ Apache의 이전 문제
    ⑥ MySQL의 이전 문제
    ⑦ 서버 이전 후에 확인할 사항들
    --------------------------------------

    1) 서버가 사용하게 될 네트워크 문제

    * router -> 서버 라우팅 설정 명령어
    * ifconfig -> ethernet에 네트워크 설정
    * netconfig -> 네트워크 설정 유틸리티

    /etc/sysconfig/network -> 게이트웨이 설정 파일
    /etc/sysconfig/network/ifcfg-eth0 -> 첫 번째 NIC 설정
    /etc/sysconfig/network/ifcfg-eth2 -> 두 번째 NIC 설정
    /etc/sysconfig/network/ifcfg-ethn -> n 번째 네트워크 설정

    * 설정된 네트워크 확인
     /etc/rc.d/init.d/network (start/restart/stop)


    2) 사용자들의 ID와 Password 문제

    ① /etc/passwd 파일
    ② /etc/group 파일
    ③ /etc/shadow 파일(퍼미션400을 복사 후 644로 수정 후 백업)

    *주의사항: 통째로 복사할 경우 UID와 GID 값이 겹치는 문제가 발생할 수 있음


    3) 서버내의 Domain 들의 문제

    /etc/host.conf -> 해석(resolution) 방법과 순서를 지정하는 파일
    /etc/resolv.conf -> 네임서버 위치를 지정하는 파일
                 nameserver 210.104.1.3
               nameserver 210.204.251.22
    /etc/named.conf -> 네임서버 기본 설정 파일(데몬)

    * 네임서버 지역(zone) 파일 위치
    /var/named/  * . zone -> 네임서버 지역 파일
    /var/named/ named.ca -> 네임서버 캐시 파일
    /var/named/  *. rev  -> 네임서버 리버스 맵핑 파일
    /var/named/named.local -> 루프백 아이피 주소에 대한 리버스 맵핑 파일


    4) 서버 내의 Homepage data 문제

    ① 이전 전 서버의 /에서 다음과 같이 압축
       # tar cvfpz kbehome.tar.gz /home (홈페이지 전체)
    ② kbehome.tar.gz을 ftp나 ncftp를 이용하여 새로운 서버로 가져옵니다.
    ③ 새로운 서버의 /에서 다음과 같이 압축을 풀어 줍니다.
       # tar xvfpz kbehome.tar.gz
    ④ 새로 이전 된 서버에서 위의 압축푸는 작업이 된 후에
       /home 파티션 내의 각 사용자의 owner와 group 정보가 예전 정보와
       동일한가 확인합니다.


    5) Apache의 이전 문제

    httpd.conf 파일 내에 설정되어 있는 가상 호스트 정보 수정
    httpd.conf 파일 내에 DocumentRoot 정보의 확인 및 수정
    httpd.conf 파일 내의 ServerName 정보의 확인 및 수정

    * Apache 이전 순서
    ① 이전 서버의 /usr/local/ 위치에서 다음과 같이 압축
       # tar cvfpz apache.tar.gz apache
    ② apache.tar.gz을 새로운 서버로 가져옵니다.(ftp나 ncftp 사용)
    ③ 새로운 서버의 /usr/local/ 위치에서 apache.tar.gz를 풉니다.
       # tar xvfpz apache.tar.gz
    ④ 풀어진 apache의 httpd.conf 파일에서
       "Name VirtualHost" 값을 이전 후의 서버 IP address로 수정해 줍니다.
    ⑤ 이전된 후의 httpd.conf 셋팅되어 있는 가상호스트
       <VirtualHost "IP address">
       </VirtualHost> 들에서 설정된 값들 중 “IP address"에 해당하는 부분을
        이전 후의 서버 IP 정보로 수정해 줍니다.


    6) MySQL의 이전 문제

    ① 이전 전 서버의 /usr/local/에서 다음과 같이 mysql을 통째로 압축합니다.
       # tar cvfpz mysql.tar.gz mysql
    ② 이전 후의 서버로 mysql.tar.gz 파일을 가져옵니다.
    ③ 이전 후 서버의 /usr/local/에서 다음과 같이 압축을 풉니다.
       # tar xvfpz mysql.tar.gz
    ④ 이렇게 압축을 푼 후 mysql을 시작해 본다.
       # /usr/local/mysql/bin/mysql_safe
    ⑤ 이렇게 해서 mysql이 잘 작동되지 않는다면
       /usr/local/mysql/data/ 에 생성되는 호스트명으로 된 err 파일을 확인해
       보시면 어떤 문제인지 알수가 있습니다.
    ⑥ 이렇게 된 후에는 mysql의 root와 mysql의 일반 사용자 및 mysql의
       데이터들도 모두 그대로 사용이 됩니다.

    * MySQL을 이전된 서버로 가져온 후에 실행시키면
     /usr/local/mysql/data 에 새로운 서버의 호스트명으로 된 err 파일과
      pid 파일이 새로 생성이 됩니다.


    7) 서버 이전 후에 확인할 사항들

    ① Homepage가 정상적으로 동작이 되는가?

    ② 사용자 계정 정보 UID, GID가 중복된 것이 있는가 확인
       확인은 /etc/passwd 와 /etc/group 파일에서 확인 가능
       /home 파티션의 디렉토리와 파일들의 owner와 group 정보 중 숫자로 된
       것이 있다면 계정 정보가 존재하지 않는 경우이므로 반드시 확인할 것

    ③ 서버 내에서 사용되는 프로그램들의 경로 확인
     * 이전되기 전의 서버에서 사용하고 있던 응용 프로그램들의 경로 확인
     * Sendmail : 대부분 /usr/sbin/sendmail 이거나 또는 /usr/lib/sendmail
     * perl : 대부분 /usr/local/bin/perl 이거나 또는 /usr/bin/perl
     * php : php의 경우에는 이전 후의 apache에 모듈로 들어가 있습니다.
             하지만 새로 컴파일하여 아파치 모듈에 삽입하는 것도 가능합니다.
     * /etc/xinet.d/ 내의 tcp_wrapper 환경에서 서비스 되는 정보들
     * 그 외 확인할 프로그램 정보들
        gcc, g++, make, c++ 등의 컴파일러들


    그 외 참조할 내용

    * ping 방지
    /etc/sysctl.conf 파일에 추가
    net.ipv4.icmp_echo_ignore_all=1 (응답하지 않음)
    net.ipv4.icmp_echo_ignore_all=0 (응답함)

    * 계정 발급시 자동 삽입
    /etc/skel>디렉토리에 필요한 내용 삽입
        mkdir public_html
        mkdir public_html/cgi-bin
    2006/09/08 14:21 2006/09/08 14:21
    이 글에는 트랙백을 보낼 수 없습니다
    출처 블로그 > 노랑배 - www.norangship.com
    원본 http://blog.naver.com/kosthb/80012800221

    #############################

    # 하드추가와 파티션 나누기

    #        2005. 5. 11 이황배

    #        kosthb@new21.com

    #############################

    [root@112s /]# fdisk /dev/sdc     ==> 세번째 하드 추가/파티션나누기

    The number of cylinders for this disk is set to 4462.

    There is nothing wrong with that, but this is larger than 1024,

    and could in certain setups cause problems with:

    1) software that runs at boot time (e.g., old versions of LILO)

    2) booting and partitioning software from other OSs

      (e.g., DOS FDISK, OS/2 FDISK)

    Command (m for help): p           ==> 하드 상태를 본다 "p" 엔터

    isk /dev/sdc: 255 heads, 63 sectors, 4462 cylinders

    Units = cylinders of 16065 * 512 bytes

      Device Boot    Start       End    Blocks   Id  System

    Command (m for help): n           ==> 현재 아무런 파티션도 없는 상태이다.

                                                           "n"으로 새로운 파티션을 추가한다

    Command action

      e   extended

      p   primary partition (1-4)

    p 선택 후 엔터

    Partition number (1-4): 1          ==> 파티션 번호를 지정

    First cylinder (1-4462, default 1):  ==> 값을 넣주는데 default값이 1이다.

    Using default value 1              ==> default값인 1이 사용된다는 메시지다.

    Last cylinder or +size or +sizeM or +sizeK (1-4462, default 4462): +2000M  ==> 용량을 적는다

    [[ 용량은 +sizeM(메가단위), +sizeK(키로단위) 로 하면 된다 ]]

    ==> 현재 작업에서는 2000MB를 설정해주었다.

    Command (m for help): p             ==> "p"를 입력하여 상태를 확인한다.

    Disk /dev/sdc: 255 heads, 63 sectors, 4462 cylinders

    Units = cylinders of 16065 * 512 bytes

      Device Boot    Start       End    Blocks   Id  System

    /dev/sdc1             1       255   2048256   83  Linux

    ==> /dev/sdc1 으로 2GB로 파티션이 생겨났다.

    Command (m for help): n            ==> 새로운 파티션을 하나 더 추가하겠다.

    Command action

      e   extended

      p   primary partition (1-4)

    2

    Invalid partition number for type `2'

    Command action

      e   extended

      p   primary partition (1-4)

    p

    Partition number (1-4): 2           ==> "2"로 두번째 파티션을 추가하겠다.

    First cylinder (256-4462, default 256): 256   ==> 기본값은 256이다. 입력하든 않하든 상관없다.

    Last cylinder or +size or +sizeM or +sizeK (256-4462, default 4462):    ==>원하는 용량을 적는다.

    Using default value 4462

    여기에서 보면, 현재 작업중인 파티션외에 새로운 파티션이 더 필요하다면 해당 공간을 남겨두고 작업하고, 이게 마지막 파티션이라면 모두 선택하도록 한다.

    기본값이 모두 선택으로 나와있어서 입력하지않고 바로 엔터를 쳤다.

    Command (m for help): p            ==> 하드상태를 확인해보자

    Disk /dev/sdc: 255 heads, 63 sectors, 4462 cylinders

    Units = cylinders of 16065 * 512 bytes

      Device Boot    Start       End    Blocks   Id  System

    /dev/sdc1             1       255   2048256   83  Linux      ==> 첫번째나눈 파티션

    /dev/sdc2           256      4462  33792727+  83  Linux      ==> 두번째나눈 파티션

    Command (m for help): w             ==> "w"로 저장하고 나온다.

    The partition table has been altered!

    Calling ioctl() to re-read partition table.

    WARNING: If you have created or modified any DOS 6.x

    partitions, please see the fdisk manual page for additional

    information.

    Syncing disks.

    You have new mail in /var/spool/mail/root

    파티션 나누는 작업은 이로서 끝이 났다.

    ########################################################################################

    ext3 파일 시스템으로 포맷하기

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

    root@112s /]# mke2fs -j /dev/sdc1      ==> 첫번째 파티션 포맷하기

    mke2fs 1.26 (3-Feb-2002)

    Filesystem label=

    OS type: Linux

    Block size=4096 (log=2)

    Fragment size=4096 (log=2)

    256512 inodes, 512064 blocks

    25603 blocks (5.00%) reserved for the super user

    First data block=0

    16 block groups

    32768 blocks per group, 32768 fragments per group

    16032 inodes per group

    Superblock backups stored on blocks:

           32768, 98304, 163840, 229376, 294912

    Writing inode tables: done                           

    Creating journal (8192 blocks): done

    Writing superblocks and filesystem accounting information: done

    This filesystem will be automatically checked every 23 mounts or

    180 days, whichever comes first.  Use tune2fs -c or -i to override.

    포맷 완료

    [root@112s /]# mke2fs -j /dev/sdc2      ==> 두번째 파티션 포맷하기

    mke2fs 1.26 (3-Feb-2002)

    Filesystem label=

    OS type: Linux

    Block size=4096 (log=2)

    Fragment size=4096 (log=2)

    4227072 inodes, 8448181 blocks

    422409 blocks (5.00%) reserved for the super user

    First data block=0

    258 block groups

    32768 blocks per group, 32768 fragments per group

    16384 inodes per group

    Superblock backups stored on blocks:

           32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

           4096000, 7962624

    Writing inode tables: done                           

    Creating journal (8192 blocks): done

    Writing superblocks and filesystem accounting information: done

    This filesystem will be automatically checked every 30 mounts or

    180 days, whichever comes first.  Use tune2fs -c or -i to override.

    포맷 완료

    /etc/fstab 수정하기

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

    /dev/sdc1        /파티션명                   ext3    defaults,noatime        1 2

    /dev/sdc2        /파티션명                 ext3    defaults        1 2

    위 두줄을 /etc/fstab에 추가해주면 된다.


    나눈 하드를 마운트시켜준다.

    [root@112s /]# mount /wecan3

    [root@112s /]# mount /var2

    mount: mount point /var2 does not exist

    문제발생

    /var2가 존재하지 않는다고 나온다.

    이 문제는 / 가서 /var2디렉토리를 만들어주면 해결된다.

    다시 마운트시킨다.

    [root@112s /]# mount /var2

    모두 끝났다.

    2006/09/08 14:20 2006/09/08 14:20
    이 글에는 트랙백을 보낼 수 없습니다

    리눅스(레드햇 9.0)에서 Apache, MySQL, PHP, Tomcat 연동하기

    Copyright©2003 yekdm

    이문서는 자유롭게 수정 및 배포가 가능합니다. 단 상업적 용도로 사용할 수 없습니다.

    수정 및 배포 시 작성자의 이름 및 출처를 꼭 명시하기 바랍니다.

    작성자 : 예크디엠(yekdm)

    작성일 : 2003년 12월 22일 월요일

    이메일 : yekdm@hotmail.com

    들어가기에 앞서

    이 문서에 작성된 글이 제 좁은 이해력을 바탕으로 한 것이기에 잘못된 부분을 많이 포함하고 있으리라 생각합니다. 부족하지만 공부하는데 도움이 되길 바랍니다.

    설치환경

    레드햇 9.0 (Kernel 2.4.20-8)

    시스템 구성

    Apache 2.0.48

    MySQL 4.0.17

    PHP 4.3.4

    Zend Optimizer 2.1.0b

    J2SDK 1.4.2

    Tomcat 5.0.16

    JK2 Connector 2.0.2

    1. Mysql 설치

    http://www.mysql.com/downloads/index.html 을 방문해서 Mysql database server & standard clients 부분의 Mysql 4.0으로 이동합니다. 문서에 적혀있는데로 Mysql 4.0이 현재 배포되고 있는 공식버전입니다.

    http://www.mysql.com/downloads/mysql-4.0.html 로 이동하면 배포본이 바이너리 형식, RPM 형식, 소스 형식의 세가지로 이루어져있음을 알 수 있습니다.

    0. 기존의 RPM 패키지 제거

    레드햇 리눅스 기반의 시스템에서는 Mysql의 RPM 패키지가 설치되어있는지 먼저 확인합니다.

    shell> rpm qa | grep mysql

    또는

    shell> rpm qa | grep MySQL

    최근에 배포되고 있는 레드햇 9.0에서는 기본적으로 Mysql이 아닌 PostgreSQL을 기본 데이터베이스로 채택하고 있습니다. 따라서 레드햇 9.0 설치 후 Mysql 을 바로 설치할 경우에는 RPM 패키지를 제거할 필요가 없습니다.

    레드햇 기반의 리눅스 배포본에서 Mysql 패키지를 포함하는 경우 Mysql RPM 패키지를 변경 적용함으로 Mysql 공식 사이트에서 제공하는 RPM 패키지와 이름 및 내용이 다를 수 있습니다.

    RPM 패키지의 경우 업그레이드가 가능하나 Mysql 3.23 에서 Mysql 4.0 으로의 RPM 업그레이드는 이루어지지 않습니다.

    기존에 설치되어있는 Mysql RPM 패키지를 제거합니다.

    shell> rpm -e --nodeps [mysql 패키지명]

    --nodeps 옵션은 RPM 삭제시 의존성 여부를 무시하기 위해 사용됩니다.

    설치에 앞서 기존에 Mysql을 설치하여 운영했었다면 사용했던 데이터베이스를 백업 받아 놓습니다.

    0. Mysql binary 설치

    배포파일 mysql-standard-4.0.17-pc-linux-i686.tar.gz

    받은 파일을 적당한 위치 (예: /usr/local/src) 로 이동시켜서 압축을 풀어줍니다.

    shell> mv ./mysql-standard-4.0.17-pc-linux-i686.tar.gz /usr/local/src

    shell> tar xvfz mysql-standard-4.0.17-pc-linux-i686.tar.gz

    위의 명령을 실행시키면 현재 위치에 mysql-standard-4.0.17-pc-linux-i686 디렉토리가 생성되면서 압축이 풀립니다. 생성된 디렉토리를 /usr/local/share로 디렉토리명을 mysql로 변경하여 이동시킵니다.

    shell> mv ./mysql-standard-4.0.17-pc-linux-i686 /usr/local/share/mysql

    또는

    shell> cp -r ./mysql-standard-4.0.17-pc-linux-i686 /usr/local/share/mysql

    해당 디렉토리로 이동합니다.

    shell> cd /usr/local/share/mysql

    Mysql을 처음으로 설치하는 경우 아래의 명령을 실행합니다. 이것은 mysql의 grant table을 만들어줍니다.

    shell> scripts/mysql_install_db

    디렉토리 권한을 설정합니다.

    shell> chown -R mysql .

    shell> chgrp -R mysql .

    Mysql 계정을 등록하지 않았을 경우 Mysql의 사용자 및 그룹 계정을 추가한다.

    shell> /usr/sbin/groupadd mysql

    shell> /usr/sbin/useradd -g mysql mysql

    /etc/passwd 파일과 /etc/group 파일을 에디터로 열어서 mysql 계정이 등록된 것을 확인하고 변경할 사항이 있으면 변경합니다.

    Mysql을 실행시킵니다.

    shell> bin/mysqld_safe --user=mysql &

    시스템 부팅시 자동적으로 Mysql을 실행하고자 할 경우에는 support-files/mysql.server 파일을 /etc/rc.d/init.d 디렉토리로 copy 합니다.

    그리고 /etc/rc.d/rc0.d에는 K01mysql이라는 이름으로 /etc/rc.d/rc3.d에는 S90mysql이라는 이름으로 symbolic link를 만들어줍니다. 심볼릭 링크 파일명에서 앞의 S는 부팅시 서비스가 이루어지는 즉 실행되는 파일을 의미하고 K는 서비스가 이루어지지 않는 데몬임을 의미합니다. 그 뒤의 숫자는 임의로 변경가능합니다. 자세한 사항은 리눅스 부팅시 시스템의 초기화 과정을 공부함으로 알 수 있습니다.

    기본적으로 mysql install directory는 /usr/local/mysql로 되어있습니다. 그러나 이 문서에서 처럼 /usr/local/share/mysql의 위치에 설치할 경우 즉, /usr/local/mysql이 아닌 다른 위치에 Mysql을 설치할 경우에는 다음의 내용이 기록된 my.cnf를 작성하여 /etc 디렉토리에 저장합니다.

    [mysqld]

    basedir=/usr/local/share/mysql

    datadir=/usr/local/share/mysql/data

    기존에 Mysql을 운영한 경우에는 저장된 데이터베이스가 있는 디렉토리를 datadir에 적어주면 사용했던 데이터베이스를 그대로 사용할 수 있습니다. RPM으로 설치되어 운영했을 때의 datadir은 /var/lib/mysql 이므로 datadir=/var/lib/mysql 로 설정해줍니다. 그러면 기존의 데이터를 그대로 사용할 수 있습니다.

    이 외의 방법이 몇 가지 더 존재합니다. 추가적인 사항은 mysql.server 파일을 참고하기 바랍니다.

    참고사항

    - 설치에 필요한 도움말은 binary package에 포함되어 있는 INSTALL-BINARY 파일에 들어있습니다.

    - binary package 형태로 설치할 경우 mysql의 실행파일들이 들어있는 bin 디렉토리(/usr/local/share/mysql/bin)를 PATH 설정해서 임의의 위치에서도 사용할 수 있도록 해야 합니다. 이 과정이 mysql.server 파일에서 이루어지는 것 같은데 Redhat 9.0에서는 이 실행파일로는 PATH가 설정되지 않았습니다. 만일 mysql.server만으로 PATH가 설정되지 않으면 /etc/profile 파일에서 PATH를 설정하도록 합니다.

    - Mysql 3.23에서 데이터베이스를 운영하다가 4.X로 업그레이드 할 경우 데이터베이스 type이 다르므로 기존의 데이터베이스를 그대로 사용하기 위해서는 특별한 과정을 거쳐야 합니다. Mysql 3.23에서는 디폴트 데이터베이스 type이 ISAM이나 4.X에서는 MyISAM이므로 type을 변경하는 과정이 필요합니다. 자세한 사항은

    http://www.mysql.com/documentation/mysql/bychapter/manual_Installing.html#Upgrading-from-3.23 문서를 참고하기 바랍니다.

    0. Mysql RPM 설치 (적극 권장)

    Mysql 사이트에서 배포되는 Mysql RPM package는 다음과 같습니다.

    MySQL-server-4.0.17-0.i386.rpm

    MySQL-Max-4.0.17-0.i386.rpm

    MySQL-bench-4.0.17-0.i386.rpm

    MySQL-client-4.0.17-0.i386.rpm

    MySQL-devel-4.0.17-0.i386.rpm

    MySQL-shared-4.0.17-0.i386.rpm

    MySQL-embedded-4.0.17-0.i386.rpm

    MySQL-shared-compat-4.0.17-0.i386.rpm

    각각의 패키지에 대해 간단하게 설명하겠습니다.

    MySQL-server-4.0.17-0.i386.rpm : Mysql Server,

    MySQL-Max-4.0.17-0.i386.rpm : Mysql Max Server, MySQL-server RPM에서 제공하지 않는 추가적으로 확장된 기능을 제공하는 패키지, MySQL-server RPM을 먼저 설치해야 한다.

    MySQL-bench-4.0.17-0.i386.rpm : Test와 Benchmark 프로그램, 펄과 DBD::mysql 모듈을 필요로 한다.

    MySQL-client-4.0.17-0.i386.rpm : The standard MySQL client programs, Mysql을 이용하는 여러가지 프로그램 제공

    MySQL-devel-4.0.17-0.i386.rpm : 펄 모듈과 같은 다른 Mysql client 프로그램들을 컴파일하기 위해서 필요한 library와 include 파일들을 제공

    MySQL-shared-4.0.17-0.i386.rpm : 프로그래밍 언어 및 애플리케이션에서 Mysql을 load하고 사용하는데 필요한 공유 라이브러리 제공 (libmysqlclient.so*)

    MySQL-embedded-4.0.17-0.i386.rpm : The embedded MySQL server library (from Mysql 4.0)

    MySQL-shared-compat-4.0.17-0.i386.rpm : MySQL 3.23과 4.0 두 버전의 공유 라이브러리를 포함한다. MySQL 3.23 환경에서 애플리케이션을 사용하다가 MySQL을 4.0으로 라이브러리 의존성 문제없이 업그레이드를 하고자 할 때 MySQL-shared RPM 대신 설치한다. 이 패키지는 MySQL 4.0.13 부터 이용할 수 있다.

    기본적으로 설치할 RPM은 MySQL-server와 MySQL-client 패키지입니다.

    이 두 패키지를 Mysql 사이트에서 다운로드 받아 적당한 장소에 옮겨 놓습니다.

    (나머지 RPM은 필요에 따라 추가적으로 설치합니다.)

    shell> mv ./MySQL-server-4.0.17-0.i386.rpm /usr/local/src

    shell> mv ./MySQL-client-4.0.17-0.i386.rpm /usr/local/src

    RPM을 설치합니다.

    shell> rpm -ivh MySQL-server-4.0.17-0.i386.rpm

    shell> rpm -ivh MySQL-client-4.0.17-0.i386.rpm

    Mysql 계정이 등록되어있지 않으면 다음과 같이 Mysql 계정을 등록합니다.

    shell> /usr/sbin/groupadd mysql

    shell> /usr/sbin/useradd -g mysql mysql

    /etc/passwd 파일과 /etc/group 파일을 에디터로 열어서 mysql 계정이 등록된 것을 확인하고 변경할 사항이 있으면 변경합니다.

    /etc/passwd

    mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

    /etc/group

    mysql:x:27:

    RPM으로 설치한 경우에는 시스템 부팅시 Mysql을 자동으로 실행하기 위한 추가적인 작업이 필요없습니다. RPM으로 설치를 할 경우 RPM 설치 만으로 필요한 과정들이 대부분 이루어지기 때문에 매우 편하게 Mysql을 Install하여 사용할 수 있습니다.

    다음의 명령을 실행하여 데이터베이스에 접속합니다.

    shell> mysql mysql

    또는

    shell> mysql -u root -p mysql

    참고사항

    - http://www.mysql.com/documentation/mysql/bychapter/manual_Installing.html#Linux-RPM에 리눅스 RPM 설치가 설명되어있습니다. 참고하시기 바랍니다.

    - RPM으로 설치했을 경우 실행파일들은 /usr/bin에 설치되고, 데이터베이스가 만들어지는 datadir는 /var/lib/mysql 입니다.

    0. Mysql source 설치

    (이 부분은 직접 실험해보지 않고, Mysql Document를 번역하여 옮겨놓았습니다.)

    Mysql source install을 위해 다음과 같은 툴들이 필요하다.

    * 압축을 풀기 위한 GNU gunzip, GNU tar. GNU tar 외에 다른 tar를 사용할 수 있으나 그 중 몇 가지는 긴 파일 이름으로 인한 문제를 일으킬 수 있다. e.g.) Sun tar

    * ANSI C++ compiler. (gcc 2.95.2 및 이후버전, egcs 1.0.2 및 이후버전 또는 egcs 2.91.66, SGI C++, SunPro C++) gcc를 사용할 경우 libg++이 필요없다. gcc 2.7.X는 sql/sql_base.cc와 같이 완벽하게 작성된 C++파일을 컴파일하지 못하는 버그를 가지고 있다. 이 때에는 Mysql을 컴파일 할 수 있는 gcc로 업그레이드 해야한다. gcc 2.8.1은 몇몇 플랫폼에서 문제를 가지고 있다고 알려져 있다. 따라서 플랫폼에 다른 컴파일러가 있다면 gcc 2.8.1의 사용을 피해야 한다. Mysql version 3.23.X를 컴파일 할 때 gcc 2.95.2 및 이후버전을 권장한다.

    * make 프로그램. GNU make 가 권장된다. make시 문제가 발생할 경우 GNU make 3.75 또는 이후버전으로 업그레이드하여 사용한다.

    만일 gcc의 최신버전을 사용하고 있고 -fno-exceptions 옵션을 충분히 이해하고 있다면 이 옵션을 사용하는 것이 매우 중요하다. 그렇지않으면 불규칙적으로 충돌하는 바이너리 파일들을 컴파일 할 수도 있다. 따라서 -fno-exceptions를 따라 -felide-constructors와 -fno-rtti 를 사용하길 권장한다. 다음과 같이 명령어를 작성한다.

    CFLAGS=-03 CXX=gcc CXXFLAGS=-03 -felide-constructors -fno-exceptions \

    -fno-rtti ./configure --prefix=/usr/local/mysql --enable-assembler \

    --with-mysqld-ldflags=-all-static

    위의 옵션들 중 --prefix 는 컴파일된 파일들이 위치하는 디렉토리 즉 설치 디렉토리를 설정해주는 옵션입니다. 만일 /usr/local/share/mysql의 위치에 Mysql을 설치하고자 할 경우 이 부분에 설치 디렉토리의 위치를 기록합니다.

    위의 옵션으로 컴파일 할 경우 대부분의 시스템에서 빠르고 안정적인 바이너리를 제공할 것이다.

    Mysql source 배포본은 2가지로 나뉩니다. 하나는 tarball형식으로 압축한 source이고 다른하나는 source RPM 패키지 입니다.

    o. tarball(tar.gz) 형식

    배포파일 mysql-4.0.17.tar.gz

    Mysql 계정이 없을 경우 사용자 및 그룹 계정을 추가합니다.

    shell> groupadd mysql

    shell> useradd -g mysql mysql

    적당한 위치에서 압축을 풉니다.

    shell> mv ./mysql-4.0.17.tar.gz /usr/local/src

    shell> cd /usr/local/src

    shell> tar xvfz mysql-4.0.17.tar.gz

    해당 디렉토리로 이동합니다.

    shell> cd mysql-4.0.17

    Mysql이 설치될 디렉토리를 지정하고 디폴트 Character Set을 한글로 설정합니다.

    configure option에 대해 좀더 자세한 사항을 알고자 할 경우 이곳을 방문하시기 바랍니다.

    http://www.mysql.com/documentation/mysql/bychapter/manual_Installing.html#configure_options

    shell> ./configure --prefix=/usr/local/share/mysql --with-charset=euc_kr

    컴파일과 인스톨을 진행합니다.

    shell> make

    shell> make install

    Mysql이 설치된 디렉토리로 이동합니다.

    shell> cd /usr/local/share/mysql

    기존에 Mysql을 설치하지 않았을 경우 grant table을 만들어줍니다. 처음 설치시 꼭 필요한 과정입니다.

    shell> scripts/mysql_install_db

    Mysql 디렉토리의 권한을 설정합니다.

    shell> chown -R root /usr/local/share/mysql

    shell> chown -R mysql /usr/local/share/mysql/var

    shell> chgrp -R mysql /usr/local/share/mysql

    설정파일 support-files/my-medium.cnf 를 my.cnf라는 이름으로 /etc 디렉토리에 복사합니다.

    shell> cp support-files/my-medium.cnf /etc/my.cnf

    /etc/my.cnf 파일을 에디터로 열어 basedir과 datadir의 경로가 올바른지 확인합니다.

    Mysql을 실행합니다.

    shell> bin/mysqld_safe --user=mysql &

    만일, 실행 후 프로세스가 계속 사라질 경우 mysql 디렉토리의 user 퍼미션을 모두 mysql로 변경합니다.

    시스템 부팅시 자동적으로 Mysql을 실행하고자 할 경우에는 support-files/mysql.server 파일을 /etc/rc.d/init.d 디렉토리로 copy 합니다.

    그리고 /etc/rc.d/rc0.d에는 K01mysql이라는 이름으로 /etc/rc.d/rc3.d에는 S90mysql이라는 이름으로 symbolic link를 만들어줍니다.

    참고사항

    - 좀더 자세한 사항들을 알고 싶을 경우

    http://www.mysql.com/documentation/mysql/bychapter/manual_Installing.html#Installing_source 를 방문하기 바랍니다.

    - 소스 패키지의 패치는 이 문서에서 다루지 않았습니다. 패치의 적용에 대해 알고싶으신 분http://www.mysql.com/documentation/mysql/bychapter/manual_Installing.html#Applying_patches 를 방문하여 참고하시기 바랍니다.

    o. Source RPM 형식

    배포파일 MySQL-4.0.17.src.rpm

    다음의 명령으로 인스톨할 수 있는 binary RPM을 생성합니다.

    shell> rpm --rebuild --clean MySQL-4.0.17.src.rpm

    이 후 생성된 binary RPM으로 Mysql을 설치한다. 이 과정은 위에서 설명한 Mysql RPM 설치와 동일합니다.

    2. Apache 설치

    기존에 존재하는 RPM 패키지를 찾아서 삭제합니다.

    shell> rpm -qa | grep httpd

    shell> rpm -e [httpd RPM name]

    현재 Apache 웹데몬이 실행되고 있다면 실행을 중지시킵니다.

    shell> /etc/init.d/httpd stop

    http://httpd.apache.org/download.cgi 에서 Apache 2.0.48을 다운로드 받습니다. 리눅스에서 설치할 Apache의 배포본은 모두 소스 형식으로 제공됩니다.

    배포파일 httpd-2.0.48.tar.gz

    적당한 위치에서 다운로드 받은 배포파일의 압축을 풉니다.

    shell> mv httpd-2.0.48.tar.gz /usr/local/src

    shell> tar xvfz httpd-2.0.48.tar.gz

    생성된 디렉토리 httpd-2.0.48로 이동합니다.

    shell> cd httpd-2.0.48

    다음과 같은 옵션을 사용하여 configure를 진행합니다.

    옵션, 모듈 및 DSO에 대한 자세한 사항은 이후 추가적으로 설명할 것입니다.

    shell> ./configure --enable-layout=RedHat --enable-rule=SHARED_CORE --enable-modules=so --enable-so

    이어서 컴파일과 인스톨을 실행합니다.

    shell> make

    shell> make install

    위의 과정으로 설치를 진행하면 Apache의 root 디렉토리는 /usr이 되고, 웹서비스는 /var/www 디렉토리 밑에서 이루어지며, 설정파일들은 /etc/httpd 디렉토리에, 실행파일들은 /usr/sbin 디렉토리에 설치됩니다. 레드햇 기반의 리눅스는 기본적으로 웹서버로 Apache를 사용하기 때문에 리눅스 설치 후 추가적인 업그레이드 없이 Apache로 웹서버를 운영했을 경우 기존의 디렉토리 구조를 그대로 유지하게 됩니다. 이것은 configure 진행시 --enable-layout=RedHat이라는 옵션을 사용했기 때문입니다. 디렉토리에 대한 정보는 /usr/local/src/httpd-2.0.48/config.layout을 통해 확인하기 바랍니다. 더 자세한 사항은 설치 과정 설명을 마치고 보충하겠습니다.

    다음으로 /etc/httpd/conf 디렉토리의 설정파일을 변경합니다.

    설치 전에 웹서버를 운영하면서 사용된 설정파일들은 설치하면서 변경되지 않습니다. 설치시 생성된 파일들은 highperformance-std.conf, httpd-std.conf, ssl-std.conf 입니다. 이 세 파일들을 각각 highperformance.conf, httpd.conf, ssl.conf 로 이름을 변경하여 기존의 파일에 덮어씌웁니다.

    /usr/sbin/apachectl 실행파일을 이용하여 웹데몬을 실행시켜봅니다.

    Apache 설치 전 웹데몬을 중지시켰다면 다음과 같이 실행이 될 것입니다.

    shell> /usr/sbin/apachectl start

    httpd: Could not determine the server's fully qualified domain name, using 127.0

    .0.1 for ServerName

    이 메시지는 /etc/httpd/conf/httpd.conf 설정파일을 수정하지 않았기 때문에 표시되는 것입니다. 그러나 웹데몬은 잘 동작하고 인터넷을 통해 접속이 가능합니다. 만일 설치 전 웹데몬을 중지시키지 않았다면 위의 명령은 실행되지 않고 오류메세지를 나타냅니다. 이때에는 일일이 kill [PID] 명령으로 웹데몬 프로세스들을 중지시키고 실행시켜야 합니다. start 명령외에 stop과 restart 명령을 사용하여 웹데몬 가동을 중지시키거나 재시작할 수 있습니다.

    shell> /usr/sbin/apachectl restart

    shell> /usr/sbin/apachectl stop

    부팅시 자동으로 httpd 데몬이 실행되도록 합니다.

    /usr/sbin/apachectl 파일을 /etc/init.d 디렉토리에 httpd로 이름을 변경하여 복사합니다. 기존에 httpd 파일이 존재할 경우 덮어씌웁니다. 그리고 /etc/rc.d/rc0.d, /etc/rc.d/rc3.d, /etc/rc.d/rc5.d 디렉토리에 /etc/rc.d/init.d/httpd의 symbolic link 파일이 있는지 확인하고 없으면 link 파일을 생성합니다.

    shell> ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc0.d/K90httpd

    shell> ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc3.d/S89httpd

    shell> ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc5.d/S89httpd

    마지막으로 /etc/httpd/conf/httpd.conf 파일의 설정을 변경합니다.

    기본적으로 변경해야할 부분은

    #servername www.example.com:80

    으로 #을 제거하고 www.example.com을 웹서버의 domain name으로 수정해 주거나 localhost로 적어줍니다.

    servername yekdm.com:80

    또는

    servername localhost:80

    뒤의 80이라는 숫자는 웹서버가 이용할 port 번호를 가리킵니다. 웹서버는 기본적으로 80번 port를 사용하며 특별한 경우가 아니라면 변경하지 않기를 바랍니다.

    한글을 지원하기 위해서 AddDefaultCharset ISO-8859-1 부분을 찾아서 AddDefaultCharset utf8 또는 AddDefaultCharset euc_kr 로 변경합니다.

    httpd.conf 설정파일은 Apache 웹서버를 시스템에 맞게 구동시키는데 매우 중요한 정보들을 담고 있습니다. Apache HTTP Server Version 2.0 문서 http://httpd.apache.org/docs-2.0/ 를 참고하시기 바랍니다.

    위의 과정으로 Apache 웹서버의 설치가 끝났습니다. 그러나 아파치 웹서버는 관리자가 모듈들을 선택하여 서버에 포함할 기능을 결정할 수 있는 모듈화된 프로그램으로 모듈의 개념 및 사용법, 동적공유객체(DSO) 등을 이해하여야 아파치의 확장된 기능을 사용할 수 있습니다. 즉, PHP와 같은 프로그래밍 언어를 사용하고자 할 경우 또는 자바의 Servlet Container인 Tomcat과 Apache 웹서버와의 연동은 모듈을 통하여 이루어집니다.

    전반적인 내용은 Apache HTTP Server Version 2.0 문서 http://httpd.apache.org/docs-2.0/ 에 있습니다. 여기서는 기본적으로 필요한 사항에 대해서만 설명하겠습니다.

    * configure 옵션 (autoconf 출력옵션)

    --help

    모든 옵션과 사용법을 화면에 출력해줍니다. 실제로 configure가 이루어지지 않습니다.

    --prefix=/usr/local/share/apache

    Apache 웹서버가 설치될 디렉토리를 설정합니다. 이 문서에서는 RedHat에 포함된 Apache의 기본 디렉토리 구조를 따라가고자 이 옵션을 사용하지 않고 --enable-layout=RedHat이라는 옵션을 사용했습니다.

    --enable-layout=RedHat

    이 옵션을 통해 여러가지 플랫폼에 해당하는 적절한 디렉토리 구조를 따라 Apache를 설치할 수 있습니다. 각 플랫폼의 path layout은 config.layout 파일에 기록되어 있습니다.

    --enable-rule=SHARED_CORE

    Apache 컴파일시 rule을 지정합니다. SHARED_CORE는 DSO(Dynamic Shared Objects, 동적공유객체)를 사용할 수 있는 형태로 Apache를 컴파일하도록 하는 일종의 규칙입니다. 이 옵션을 지정해주면 DSO로 컴파일된 아파치에서 제공하지 않는 외부 모듈들을 선택적으로 사용할 수 있게 됩니다.

    기본형은 --enable-rule=[RULE-NAME]으로 [RULE-NAME]에 해당하는 컴파일 규칙을 enable시킵니다. --help 옵션으로 나타나는 도움말에서는 이 옵션을 표시하고 있지 않습니다.

    --enable-modules=so

    mod_so(so_module)를 Apache에 컴파일하여 포함시킵니다.(모듈의 정적 컴파일)

    기본형은 --enable-modules=[MODULE-LIST]로 공백으로 구분한 [MODULE-LIST]에 나와있는 모듈들을 컴파일하여 포함합니다.

    --enable-so

    Apache가 실행시 특별한 옵션없이 자동으로 동적공유객체(DSO-Dynamic Shared Objects)를 읽어들일 수 있도록 하기 위한 설정옵션입니다.

    이외에 여러가지 옵션들이 제공됩니다. 추가적인 사항은 Apache HTTP Server Version 2.0 문서 http://httpd.apache.org/docs-2.0/ 을 찾아보거나 --help 옵션으로 확인하기 바랍니다.

    * 모듈

    Apache는 모듈화된 설계로 이루어진 프로그램입니다. 모듈은 특별한 기능을 수행하기 위한 작은 프로그램으로 이해할 수 있습니다. 즉, 모듈마다 각각의 역할이 다르기 때문에 핵심 구현부 또는 실행부에 추가적으로 포함시켜 원하는 기능을 선택적으로 사용할 수 있습니다.  Apache의 핵심 기능을 구현하는 모듈은 core이고 core를 기반으로 모듈을 추가하여 확장된 기능을 사용할 수 있습니다. 모듈은 Apache 컴파일시 정적으로 포함시킬 수 있고, 또는 DSO mechanism에 의해 Apache 컴파일 이후 추가적으로 포함하여 사용할 수 있습니다. DSO(Dynamic Shared Objects)를 지원하기 위해서는 컴파일시 configure 옵션으로 --enable-rule=SHARED_CORE를 추가하여 DSO 지원 형식으로 Apache를 컴파일하여야 하며, mod_so 모듈을 컴파일시 포함시켜야 합니다. mod_so 모듈은 core를 제외하고 DSO가 될 수 없는 유일한 모듈로서 Apache 핵심에 정적으로 컴파일해야 하며, DSO로 컴파일된 모듈을 Apache에서 읽어들이기 위한 기능을 제공합니다. 따라서 configure 진행시 일반적으로 mod_so를 포함하도록 합니다. 나머지 모듈에 관하여는 Apache Document를 참고하기 바랍니다.

    * 동적공유객체(DSO-Dynamic Shared Objects)

    Apache가 동적으로 load할 수 있는 객체입니다. core와 mod_so를 제외한 다른 모든 아파치 모듈 소스를 DSO 형식의 모듈로 컴파일하여 Apache에서 load하여 사용할 수 있습니다. DSO로 사용할 아파치 모듈을 쉽게 만들기 위해서 apxs(Apache Extension Tool)라는 지원프로그램이 있습니다. 이 프로그램으로 아파치 배포본 소스 트리 없이, DSO 지원을 위한 플랫폼 특유의 컴파일러 옵션과 링커 옵션을 고려하지 않고 모듈 소스를 DSO 모듈로 쉽게 컴파일할 수 있습니다. PHP와 Tomcat 등 외부 프로그램에서 제공하는 DSO 모듈은 프로그램 configure시 apxs를 사용한 옵션을 통해 프로그램과 함께 컴파일되어 생성됩니다. 자세한 사항은 Apache Document 내의 동적공유객체(DSO) http://httpd.apache.org/docs-2.0/dso.html 문서를 참고하기 바랍니다.

    참고사항

    - 다음은 Apache HTTP Server Project 사이트에서 제공하는 문서입니다. 이 문서를 통해 Apache에 대해 더 유익한 정보들을 얻을 수 있습니다.

    Apache HTTP Server Version 2.0 문서 http://httpd.apache.org/docs-2.0/

    3. PHP 설치

    http://www.php.net/downloads.php 에서 소스 배포본을 다운로드 받습니다. 사이트를 방문하면 알 수 있듯이 윈도우 외의 시스템에서는 소스 형식의 배포본 만을 제공합니다.

    배포파일 php-4.3.4.tar.gz

    PHP는 모든 버전이 Apache 1.3.X와 연동이 가능합니다.

    Apache 2.0의 최신버전과 함께 설치할 버전으로 PHP 4.3.0 및 이후 버전을 사용해야 합니다. Apache 2.0의 SAPI-support는 PHP 4.2.0에서부터 시작되었습니다. PHP 4.2.3은 Apache 2.0.39에서 동작하므로 PHP 4.2.3과 다른 Apache 2.0 버전을 사용하지 말기 바랍니다. 권장되는 설치 버전은 Apache 2의 최신 버전과 함께 PHP 4.3.0 및 이후 버전을 사용하는 것입니다.

    기존에 PHP가 RPM으로 설치되어있는지 확인한 후 설치되어 있으면 RPM을 제거합니다.

    shell> rpm -qa | grep php

    shell> rpm -e (--nodeps) [php RPM name]

    배포파일을 적당한 위치로 옮긴 후 압축을 풀어줍니다.

    shell> mv php-4.3.4.tar.gz /usr/local/src

    shell> cd /usr/local/src

    shell> tar xvfz php-4.3.4.tar.gz

    압축을 풀면 php-4.3.4 디렉토리가 생성됩니다.

    디렉토리 안으로 이동하여 configure를 실행시킵니다.

    shell> cd ./php-4.3.4

    shell> ./configure --with-apxs2=/usr/sbin/apxs --with-config-file-path=/etc --with-zlib --with-gd --with-mysql --with-mod-charset --with-language=korean --with-charset=euc_kr

    위의 옵션으로 실행했을 때 libpng.(a|so)를 찾을 수 없다는 오류가 발생할 수 있습니다. 이 때에는 --with-gd 옵션을 제거하고 실행하거나 http://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/ 에서 libpng-devel-1.2.2-16.i386.rpm을 다운로드 받아서 설치한 후 실행하기 바랍니다. GD는 PHP 자체적으로 그래픽을 지원하는 기능이므로 PHP로 그래픽을 구현하기 위해서 꼭 필요한 옵션입니다.

    * configure options

    --prefix=PRIFIX

    설치 디렉토리 설정. 디폴트 설치 디렉토리는 /usr/local 입니다. 즉 이 옵션을 사용하지 않을 경우 /usr/local 디렉토리에 PHP가 설치됩니다.

    --with-apxs2[=FILE]

    Apache 2.0 에서 공유할 DSO 모듈을 build하기 위해 사용합니다. FILE은 Apache apxs tool이 있는 경로를 나타냅니다. 디폴트는 apxs입니다. Apache 1.3.X에서는 --with-apxs[=FILE] 옵션을 사용합니다.

    --with-config-file-path=PATH

    php.ini 설정파일이 위치하게 될 경로를 정해줍니다. 디폴트는 PRIFIX/lib에 위치하게 됩니다. (PRIFIX가 /usr/local이면 /usr/local/lib에 위치하게됩니다.)

    --with-zlib[=DIR]

    ZLIB support를 포함시킵니다. 시스템에 zlib 1.0.9 및 이후 버전이 설치되어있어야 합니다. 레드햇 9.0에서는 1.1.4-8 버전이 RPM으로 설치되어있습니다. 확인해보시기 바랍니다.

    --with-gd[=DIR]

    GD support를 포함시킵니다. DIR은 GD가 인스톨된 디렉토리의 경로명입니다. DIR을 셋팅해주지 않으면 번들용 GD 라이브러리가 사용됩니다.

    --with-mysql[=DIR]

    MySQL support를 포함시킵니다. DIR은 MySQL의 base directory로, 정의해주지 않으면 번들용 MySQL library가 사용됩니다.

    --with-mod-charset

    Russian Apache의 mod_charset 모듈에 대한 통신 테이블을 제공합니다. Apache의 mod_charset 모듈은 문서원본의 character-set과 문서를 클라이언트로 보내기 전에 변환할 character-set을 지정할 수 있는 역할을 제공합니다. Apache 2.0에서는 mod_charset_lite 모듈을 통해 실험적으로 구현하고 있습니다.

    (XML support는 PHP 4.X 버전에서 자동으로 포함합니다.)

    이 외의 옵션에 관해서는 configure --help 명령을 통해 확인해보거나, http://kr2.php.net/manual/kr/print/install.configure.php 문서를 참고하시기 바랍니다.

    컴파일과 인스톨을 진행합니다.

    shell> make

    shell> make install

    다음은 위의 과정으로 설치를 진행했을 경우의 설치 경로입니다.

    PHP CLI binary : /usr/local/bin/

    PHP CLI man page : /usr/local/man/man1/

    Apache Shared module (libphp4.so) : /usr/lib/apache/

    shared extensions : /usr/local/lib/php/extensions/no-debug-non-zts-20020429

    PEAL environment : /usr/local/lib/php/

    build environment : /usr/local/lib/php/build/

    header files : /usr/local/include/php/

    helper programs : /usr/local/bin/

    php.ini-dist를 /etc에 php.ini 로 이름을 변경하여 복사합니다. 기존에 있던 php.ini 파일은 php.ini.rpmsave 파일로 이름이 변경되어 있습니다.

    shell> cp php.ini-dist /etc/php.ini

    마지막으로 Apache 웹서버와 PHP 모듈과의 연동을 위해서 /etc/httpd/conf/httpd.conf 파일을 수정해줍니다. PHP install(make install 과정)시 모듈을 load하는 부분이 httpd.conf 파일에 자동으로 추가됩니다. 다음 부분이 httpd.conf 파일에 기록되어 있는지 확인합니다.

    LoadModule php4_module             lib/apache/libphp4.so

    이부분이 없을 경우 Dynamic Shared Object (DSO) Support 부분에 추가합니다.

    AddType 부분으로 이동해서 다음을 추가합니다.

    AddType application/x-httpd-php .php .phtml

    AddType application/s-httpd-php-source .phps

    DirectoryIndex 부분을 찾아 index.php와 index.phtml을 추가합니다.

    DirectoryIndex index.html index.html.var index.php index.phtml

    httpd 데몬을 재실행합니다. (Apache 웹서버를 재가동시킵니다.)

    shell> /etc/init.d/httpd restart

    /var/www/html 디렉토리 내에서 다음과 같은 코드를 작성하여 웹브라우저를 통해 확인해봅니다.

    shell> vi phpinfo.php

    <?

    phpinfo();

    ?>

    또는

    shell> cat > test.php

    <? phpinfo(); ?>

    ^d

    PHP를 재설치하거나, 업그레이드하거나 또는 패치할 경우 config.cache 파일을 삭제한 후 위와 동일한 과정으로 진행합니다.

    참고사항

    - 다음 문서를 참고하시기 바랍니다.

    http://kr2.php.net/manual/kr/print/install.apache2.php

    http://kr2.php.net/manual/kr/print/install.configure.php

    4. Zend Optimizer 설치

    Zend Optimizer - Zend Encoder와 Zend SafeGuard Suite에 의해 encoding된 파일을 실행시키며, PHP Application의 실행속도를 향상시키는 free software. runtime performance를 40%이상 향상시킬 수 있습니다.

    http://zend.com/store/free_download.php?pid=13 에서 리눅스용 최신 버전을 다운로드 받습니다.

    배포파일 ZendOptimizer-2[1].1.0b-Linux_glibc21-i386.tar.gz

    배포파일을 적당한 위치로 옮겨서 압축을 풀어준다.

    shell> mv ZendOptimizer-2[1].1.0b-Linux_glibc21-i386.tar.gz /usr/local/src

    shell> tar xvfz ZendOptimizer-2[1].1.0b-Linux_glibc21-i386.tar.gz

    ZendOptimizer-2.1.0b-Linux_glibc21-i386 디렉토리가 생성되어 압축이 풀립니다. 이 디렉토리로 이동합니다.

    shell> cd ZendOptimizer-2.1.0b-Linux_glibc21-i386

    다음의 명령을 실행시킵니다.

    shell> ./install.sh

    화면에 GUI 환경이 나타나면서 install이 진행됩니다. 각 과정은 자동으로 이루어지며 마지막으로 Apache 웹서버를 재구동시켜줍니다. 설치는 /usr/local/Zend 경로에서 이루어집니다. 기존의 /etc/php.ini 파일은 /etc/php.ini-zend_optimizer.bak 으로 이름이 변경되고 php.ini 파일이 /usr/local/Zend/etc 안에 생성되며 /etc 디렉토리 안에는 이 /usr/local/Zend/etc/php.ini 의 symbolic link 파일이 만들어져 실제 php.ini 파일과 연결됩니다. 모든 과정이 끝나면 Zend Optimizer가 성공적으로 설치된 것입니다. install을 진행하면서 화면에 나타난 글들을 주의깊게 읽어보시기 바랍니다.

    5. J2SE 설치

    http://java.sun.com/j2se/1.4.2/download.html 의 Download J2SE v 1.4.2_03에서 SDK를 다운로드 받습니다. 배포본 형태는 2가지로 하나는 RPM 파일을 만들어주는 binary 파일이고, 다른 하나는 배포파일이 있는 그 자리에서 압축을 풀어서 설치하는 바이너리 파일입니다. 레드햇 기반의 리눅스에서는 RPM 소스 형식의 배포본을 다운로드 받아서 설치하길 권장합니다.

    0. RPM 소스 설치

    배포파일 j2sdk-1_4_2_03-linux-i586-rpm.bin

    적당한 위치로 배포파일을 옮겨서 파일을 실행시킵니다.

    실행 전 배포파일의 퍼미션을 확인하여 실행가능한 퍼미션을 갖도록 설정을 합니다.

    shell> mv j2sdk-1_4_2_03-linux-i586-rpm.bin /usr/local/src

    shell> cd /usr/local/src

    shell> chmod 755 j2sdk-1_4_2_03-linux-i586-rpm.bin

    shell> ./j2sdk-1_4_2_03-linux-i586-rpm.bin

    사용권 계약이 화면에 출력되면 y 또는 yes를 입력하여 동의합니다. 이 후 설치가 계속 진행되어 j2sdk-1_4_2_03-linux-i586.rpm 파일이 생성됩니다. 생성된 RPM 파일을 설치합니다.

    shell> rpm -ivh j2sdk-1_4_2_03-linux-i586.rpm

    /usr/java/j2sdk1.4.2_03 디렉토리가 생성되면서 이 곳에서 설치가 이루어집니다.

    /etc/profile을 편집하여 PATH 설정을 해줍니다.

    profile 첫부분에 다음을 추가해줍니다.

    shell> vi /etc/profile

    JAVA_HOME=/usr/java/j2sdk1.4.2_03

    PATH=$PATH:$JAVA_HOME/bin

    export JAVA_HOME

    변경된 설정을 시스템에 적용시킵니다.

    shell> source /etc/profile

    임의의 위치에서 java를 실행시킵니다.

    shell> java

    JAVA option들이 화면에 출력되면 성공적으로 설치가 이루어진 것입니다.

    0. binary 배포본 설치

    배포파일 j2sdk-1_4_2_03-linux-i586.bin

    설치할 경로로 파일을 옮깁니다. 여기서는 /usr/local/share 에 J2SE를 설치할 것 입니다.

    shell> mv j2sdk-1_4_2_03-linux-i586.bin /usr/local/share

    shell> cd /usr/local/share

    퍼미션을 확인하여 파일이 실행가능하도록 권한을 설정합니다.

    shell> chmod 755 j2sdk-1_4_2_03-linux-i586.bin

    파일을 실행시켜서 J2SE를 설치합니다.

    shell> ./ j2sdk-1_4_2_03-linux-i586.bin

    먼저 화면에 사용권 계약이 출력됩니다. 사용권 계약에 동의하기 위해 y 또는 yes를 입력하면 압축이 풀리면서 SDK가 설치됩니다. 설치경로는 /usr/local/share/j2sdk1.4.2_03 입니다.

    PATH를 설정해줍니다. PATH 설정은 /etc/profile을 편집하여 이루어집니다. /etc/profile을 에디터로 열어서 파일 첫부분에 다음을 추가합니다.

    shell> vi /etc/profile

    JAVA_HOME=/usr/local/share/j2sdk1.4.2_03

    PATH=$PATH:$JAVA_HOME/bin

    export JAVA_HOME

    변경된 설정을 시스템에 적용시킵니다.

    shell> source /etc/profile

    임의의 위치에서 java를 실행시킵니다.

    shell> java

    JAVA option들이 화면에 출력되면 성공적으로 설치가 이루어진 것입니다

    참고사항

    - J2SE의 배포본은 JRE(Java Runtime Environment)와 SDK(Software Development Kit)로 나뉘어집니다. JRE는 자바로 개발된 소프트웨어를 실행시키는 데 필요한 패키지이고 SDK는 자바를 사용하여 소프트웨어를 개발하는 개발자들을 위한 패키지입니다. 따라서 개발을 목적으로 자바를 설치하려는 사람은 SDK를 다운로드 받아서 설치하기 바랍니다.

    - /etc/profile은 로그인시 필요한 환경을 설정해주는 설정파일로 쉘스크립트로 이루어져있습니다. profile의 내용을 잘 이해하시는 분은 자바 실행파일이 위치한 JAVA_HOME/bin 디렉토리의 PATH가 잘 이루어지도록 임의로 변경할 수 있습니다. 자바는 PATH에 상관없이 배포파일을 실행시켜서 또는 배포파일을 실행시켜서 생성된 RPM을 설치함으로 install이 완료된 것입니다. PATH 설정은 설치된 자바를 임의의 위치에서 편리하게 사용 가능하도록 하기 위한 것입니다.

    - 자바의 공식 사이트 http://java.sun.com 에서 더 많은 정보들을 얻을 수 있습니다.

    6. Tomcat 설치

    * Java Servlet Container

    JVM 상에서 WEB 서비스를 위한 Java Servlet API를 구현하여 서비스 해주는 Java Program으로, Servlet Container는 Client의 http 요청을 웹서버를 통해 전달받아서 Application Servlet에 전달하고, Servlet의 http 응답 메시지를 웹서버에게 전달해서 Client로 돌려주는 역할을 한다.

    * Servlet Container의 종류

    1) Sun Microsystems 제공 Servlet Container

    JSDK(Java Servlet Development Kit)

    JSWDK(JavaServer Web Development Kit)

    J2EE(Java2 SDK, Enterprise Edition)

    Java Web Server(iPlanet Web Server)

    2) Apache 제공 Servlet Container

    Apache JServ, Tomcat

    3) 기타 Servlet Container

    JRun/JRun Pro, Resin, WebLogic, Web Sphere, IAS

    * Tomcat

    Tomcat은 Apache Software Foundation의 Jakarta 프로젝트의 일환으로 개발중인 소프트웨어입니다.

    Tomcat은 Java Servlet과 Java Server Page를 사용할 수 있도록 하는 Servlet Container이며 독립적으로 웹서버의 기능을 수행합니다. 그러나 일반 html 문서도 Servlet Container를 통해 번역되므로 수행속도가 느리고 웹서버로서의 기능에 제한이 있으므로 보통 다양한 모듈과 막강한 기능을 가지고 있는 Apache 웹서버와 연동하여 사용합니다.

    배포본은 binary와 source 형식으로 제공됩니다. 여기서는 바이너리 배포본의 설치만 설명합니다. The Apache Jakarta Project 홈페이지의 Downloads 부분에 있는 CVS repositories는 현재 개발중인 소스들을 확인하고 다운로드 받을 수 있는 페이지입니다. (CVS는 Concurrent Version System의 약어로 오픈소스 프로젝트에서 개발중인 소스의 버전을 관리해주는 시스템입니다. CVS에 대한 자세한 사항은 이 문서의 성격과 다르므로 언급하지 않겠습니다. 자세한 사항은 CVS 매뉴얼을 참고하기 바랍니다.)

    0. 바이너리 설치

    http://jakarta.apache.org/site/binindex.cgi에서 Tomcat 5.0.16의 tarball 형식의 배포본을 다운로드 받습니다.

    배포파일 jakarta-tomcat-5.0.16.tar.gz

    적당한 위치(설치하고자 하는 경로)에서 압축을 풀어줍니다. 바이너리 배포본은 압축을 풀어줌으로 기본적인 설치가 완료된 것입니다.

    shell> cp jakarta-tomcat-5.0.16.tar.gz /usr/local/share

    shell> cd /usr/local/share

    shell> tar xvfz jakarta-tomcat-5.0.16.tar.gz

    Jakarta-tomcat-5.0.16 디렉토리가 생성되고 압축이 풀립니다.

    실행파일이 들어있는 디렉토리로 이동해서 Tomcat을 실행시켜봅니다.

    shell> cd /usr/local/share/Jakarta-tomcat-5.0.16/bin

    shell> ./startup.sh

    또는

    shell> ./catalina.sh start

    Using CATALINA_BASE:   /usr/local/share/jakarta-tomcat-5.0.16

    Using CATALINA_HOME:   /usr/local/share/jakarta-tomcat-5.0.16

    Using CATALINA_TMPDIR: /usr/local/share/jakarta-tomcat-5.0.16/temp

    Using JAVA_HOME:       /usr/java/j2sdk1.4.2_03

    위의 메시지가 나오면 Tomcat이 정상적으로 작동하는 것입니다. 클라이언트에서 웹브라우저를 통해 다음의 주소로 접속합니다.

    http://localhost:8080 또는 http://설치한서버의주소:8080

    정상적으로 Tomcat이 작동하고 있다면 브라우저에 Tomcat 관련 문서가 나타날 것입니다.

    만일, 정상적으로 작동하지 않는다면 J2SE의 설치가 제대로 이루어지지 않았거나 PATH 설정이 올바르게 이루어지지 않아서입니다. /etc/profile을 에디터로 열어서 J2SE 설치 시 PATH 설정한 부분을 확인해 봅니다.

    Tomcat은 bin 디렉토리의 catalina.sh 또는 startup.sh 파일을 실행시켜서 작동시킵니다.

    shell> pwd

    /usr/local/share/jakarta-tomcat-5.0.16/bin

    shell> ./catalina.sh start

    또는

    shell> ./startup.sh

    Tomcat의 Shut down은 catalina.sh 또는 shutdown.sh 파일을 이용합니다.

    shell> ./catalina.sh stop

    또는

    shell> ./shutdown.sh

    마지막으로 PATH를 설정해줍니다. PATH 설정은 /etc/profile을 편집하여 이루어집니다. /etc/profile을 에디터로 열어서 J2SE 설치 시 PATH 설정한 부분에 다음을 추가합니다.

    shell> vi /etc/profile

    JAVA_HOME=/usr/java/j2sdk1.4.2_03

    CATALINA_HOME=/usr/local/share/jakarta-tomcat-5.0.16

    PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

    export JAVA_HOME CATALINA_HOME

    변경된 설정을 시스템에 적용시킵니다.

    shell> source /etc/profile

    PATH를 설정해주었으므로 임의의 위치에서 Tomcat을 실행시킬 수 있습니다.

    Tomcat이 현재 운영 중이라면 Shut down을 하고 다시 실행시킵니다.

    shell> ps -el

    …………………………………………………………………………………………………….

    0 S     0  1012     1  0  85   0    - 61602 schedu ?        00:00:12 java

    …………………………………………………………………………………………………….

    shell> catalina.sh stop

    또는

    shell> shutdown.sh

    shell> catalina.sh start

    또는

    shell> startup.sh

    설치가 완료되었습니다.

    7. Tomcat Web Server Connector, JK2를 이용한 Apache2 웹서버와 Tomcat5의 연동

    The Apache Jakarta Project 사이트에서 JK2 connector를 다운로드 받습니다. JK2의 binary 배포본은 Solaris와 WIN32용 만이 배포되고 있으므로 소스 형태의 배포본을 다운로드 받아야 합니다. http://jakarta.apache.org/site/sourceindex.cgi 에서 JK 2.0.2 Source Release tar.gz를 다운로드 받습니다.

    배포파일 jakarta-tomcat-connectors-jk2-src-current.tar.gz

    JK2 connector 소스를 컴파일 하면 얻을 수 있는 것이 mod_jk2.so 모듈입니다. Apache 웹서버와 Tomcat을 연동할 mod_jk2.so 모듈을 얻는 것이 컴파일의 목적입니다.

    적당한 위치에서 압축을 풀어줍니다. 소스들을 컴파일하고 필요한 파일들을 이동시키면 더 이상 사용하지 않기 때문에 /usr/local/src에서 압축을 풀어주겠습니다.

    shell> mv jakarta-tomcat-connectors-jk2-src-current.tar.gz /usr/local/src

    shell> cd /usr/local/src

    shell> tar xvfz jakarta-tomcat-connectors-jk2-src-current.tar.gz

    압축이 풀리면 해당 디렉토리로 이동합니다. JK2 모듈을 얻기 위해서는 jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2로 이동합니다.

    shell> cd /usr/local/src/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2

    다음과 같이 configure를 실행하고 make로 컴파일을 합니다.

    shell> ./configure --with-apxs2=/usr/sbin/apxs

    shell> make

    configure 옵션(autoconf 출력옵션) --with-apxs2[=FILE]

    Apache 2.0 에서 공유할 DSO 모듈을 build하기 위해 사용합니다. FILE은 Apache apxs tool이 있는 경로를 나타냅니다.

    make 시 에러가 발생할 수 있습니다. 이것은 autoconf 실행 중 설정되는 Apache 홈디렉토리가 RedHat에서는 /usr이므로, 컴파일 중에 필요로 하는 libtool 실행파일을 /usr/build/ 경로에서 찾는데 RedHat에서는 /var/www/build/ 경로에 존재하기 때문입니다. 따라서 문제가 발생할 경우에는 /var/www/build 디렉토리를 /usr 디렉토리 밑으로 복사하기 바랍니다.

    문제없이 완료되었다면, 현재 디렉토리를 기준으로 ../build/jk2/apache2/의 경로에 mod_jk2.so 파일이 만들어졌을 것입니다. 이 파일을 아파치 모듈이 있는 디렉토리로 복사합니다.

    shell> pwd

    /usr/local/src/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2

    shell> cd ../build/jk2/apache2

    shell> ls

    (mod_jk2.so 파일이 존재하는지 확인합니다.)

    shell> cp mod_jk2.so /usr/lib/apache/

    (레드햇에서는 아파치 모듈이 /usr/lib/apache 디렉토리에 위치합니다.)

    /usr/local/src/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/conf/workers2.properties 파일을 /etc/httpd/conf/ 위치로 복사합니다.

    shell> cd /usr/local/src/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/conf

    shell> cp workers2.properties /etc/httpd/conf

    이 파일은  Apache 웹서버에서 JK2 모듈을 사용할 때 필요한 여러가지 설정을 저장한 파일입니다. 이 파일 이외에 jk2.properties 파일이 중요한데, workers2.properties 파일이 Apache 쪽에서 JK2 모듈의 설정을 담당한다면, jk2.properties 파일은 Tomcat 쪽에서 JK2 모듈을 통한 웹서버와의 연결 설정을 담당합니다. Tomcat 5.0 버전에서는 JK2 connector를 처리할 수 있는 coyote connector가 기본설치 되어 있기 때문에 jk2.properties 파일을 Tomcat의 conf 디렉토리로 복사할 필요는 없습니다.

    /etc/httpd/conf/httpd.conf 파일을 vi와 같은 편집기로 열어 LoadModule 부분을 찾아서 다음을 추가합니다.

    LoadModule             jk2_module             lib/apache/mod_jk2.so

    DirectoryIndex 부분을 찾아서 index.jsp를 추가합니다.

    DirectoryIndex index.html index.html.var index.php index.phtml index.jsp

    저장하고 편집기를 끝냅니다.

    다음으로 /etc/httpd/conf 디렉토리에 복사해놓은 workers2.properties를 수정합니다. 아래의 설정 내용으로 구성합니다.

    shell> cd /etc/httpd/conf

    shell> vi worker2.properties

    # Shared memory handling. Needs to be set.

    [shm]

    file=/var/log/httpd/shm.file

    size=1048576

    # Example socket channel, explicitly set port and host.

    [channel.socket:localhost:8009]

    port=8009

    host=127.0.0.1

    # define the worker

    [ajp13:localhost:8009]

    channel=channel.socket:localhost:8009

    # Announce a "status" worker

    [status:status]

    # Uri mapping

    [uri:/jsp-examples/*]

    worker=ajp13:localhost:8009

    [uri:/servlets-examples/*]

    worker=ajp13:localhost:8009

    [uri:/tomcat-docs/*]

    worker=ajp13:localhost:8009

    [uri:/*]

    worker=ajp13:localhost:8009

    [uri:/status/*]

    worker=status:status

    (위 설정내용은 포스데이타㈜ BPM 사업추진반 장윤기 대리님이 작성한 <아파치와 톰캣 연동 및 로드 발란싱 구현>에서 발췌하여 수정한 것입니다.)

    /usr/local/share/jakarta-tomcat-5.0.16/conf/jk2.properties를 수정합니다.

    shell> cd /usr/local/share/jakarta-tomcat-5.0.16/conf

    shell> vi jk2.properties

    ## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED

    ## WHEN YOU EDIT THE FILE.

    ## COMMENTS WILL BE _LOST_

    ## DOCUMENTATION OF THE FORMAT IN JkMain javadoc.

    # Set the desired handler list

    # handler.list=apr,request,channelJni

    #

    # Override the default port for the socketChannel

    channelSocket.port=8009

    # Default:

    # channelUnix.file=${jkHome}/work/jk2.socket

    # Just to check if the the config  is working

    # shm.file=${jkHome}/work/jk2.shm

    shm.file=/var/log/httpd/jk2.shm

    # In order to enable jni use any channelJni directive

    # channelJni.disabled = 0

    # And one of the following directives:

    # apr.jniModeSo=/opt/apache2/modules/mod_jk2.so

    # If set to inprocess the mod_jk2 will Register natives itself

    # This will enable the starting of the Tomcat from mod_jk2

    apr.jniModeSo=inprocess

    (위 설정내용은 포스데이타㈜ BPM 사업추진반 장윤기 대리님이 작성한 <아파치와 톰캣 연동 및 로드 발란싱 구현>에서 발췌하여 수정한 것입니다.)

    모든 설정이 끝났습니다. 실행시키기 전에 /usr 디렉토리에서 /etc/httpd/conf 디렉토리에 연결된 링크 파일을 만들어줍니다. 이것은 mod_jk2.so 모듈을 컴파일 할 때 Apache Home Directory를 /usr 로 인식했기 때문에 workers2.properties 파일을 /usr/conf에서 찾기 때문입니다. 다음과 같이 실행합니다.

    shell> cd /usr

    shell> ln -s /etc/httpd/conf ./conf

    모든 과정이 끝났으면 Tomcat과 Apache 웹서버를 실행시킵니다. ps 명령어로 현재 실행중인 process 목록을 확인해서 Tomcat과 Apache가 가동중인지 확인하고, 가동중이라면 실행을 중지시킵니다. 참고로 Tomcat의 Process CMD는 java입니다.

    shell> ps -el

    (프로세스가 존재하는지 확인)

    shell> catalina.sh stop

    (프로세스가 존재하면 실행중지)

    shell> catalina.sh start

    shell> /etc/init.d/httpd stop

    (Apache 프로세스가 존재하면 실행중지)

    shell> /etc/init.d/httpd start

    또는 (Apache 프로세스가 존재할 경우)

    shell> /etc/init.d/httpd restart

    클라이언트에서 http://serverURL 로 연결해 봅니다. Apache Tomcat 웹페이지가 보이면 정상적으로 연동되어 작동하는 것입니다.

    jk2.properties의 설정을 변경하였을 경우 이를 적용시키기 위해서는 Tomcat을 재가동 시켜주고 Apache 또한 다시 실행시켜주어야 합니다. workers2.properties의 설정을 변경한 경우에는 Apache 웹서버만 재가동시킵니다.

    참고사항

    - Apache Tomcat 연동에서 가장 중요한 부분은 자신의 시스템 또는 제공하려는 서비스에 알맞은 설정 파일을 작성하는 것입니다. 이 문서에서는 기본적인 설치만을 다루고 있기 때문에 자세한 사항은 Apache Jakarta 홈페이지를 방문해서 Tomcat 5.0 Document를 참고하기 바랍니다.

    - 참고문서

    http://jakarta.apache.org/tomcat/tomcat-5.0-doc/index.html Tomcat 5.0 Document

    http://www.javamania.pe.kr/index2.html [자바이야기>자료실] 아파치와 톰캣 연동 및 로드 발란싱 구현 (장윤기 님)

    2006/09/08 14:18 2006/09/08 14:18
    이 글에는 트랙백을 보낼 수 없습니다
    웅쓰:웅자의 상상플러스
    웅자의 상상플러스
    전체 (379)
    게임 (5)
    영화 (2)
    기타 (23)
    맛집 (5)
    영어 (2)
    대수학 (3)
    형태소 (5)
    Hacking (9)
    Linux (112)
    HTML (48)
    Application_developing (48)
    Web_developing (102)
    Window (11)
    «   2024/05   »
          1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31  
    1. 2016/01 (1)
    2. 2015/12 (3)
    3. 2015/10 (3)
    4. 2015/03 (2)
    5. 2015/01 (4)