세이박스

MySQL 설치시 생기는 오류

서버,보안

리눅스에서 MySQL을 설치하기 위해선 리눅스를 설치할때 패키지중에 개발자 도구 패키지를 반드시 설치를 해야한다.
하지만 용량을 줄이기 위해서든지 어떤 이유에서 설치를 하지 않은 경우 아래와 같은 오류가 발생하는데, 겁먹을 필요 없시 오류 뜰때 마다 하나씩 하나씩 필요한 파일을 설치 해주면 됩니다.
특히 yum 으로 설치가 편리하므로 yum 으로 설치하는것으로 설명하겠습니다.


오류1 :
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
해결 :
yum groupinstall 'Development Tools' 'Development Libraries'


오류2 :
checking for termcap functions library... configure: error: No curses/termcap library found
해결 :
yum -y install ncurses-devel

오류3 :
make[2]: *** [mysql.o] 오류 1
make[2]: Leaving directory `/usr/local/mysql-4.0.20/client'
make[1]: *** [all-recursive] 오류 1
make[1]: Leaving directory `/usr/local/mysql-4.0.20'
make: *** [all] 오류 2
해결 : 위와 같은 오류는 설치시 오류 발생으로 인해 소스파일이 깨져서 생기는 증상으로 오류를 발견하면 기존 압축 파일을 다시 풀어서 ./cnfigure 부터 다시 하면 됩니다.

오류4:
모두 설치 했다라고 생각하고 실행하는데 mysqld ended 라는 메시지가 뜨면서 mysqld 데몬이 올라 오지 않는다.
데몬이 안올라 왔으니 당연 mysql -u root -p 로 접속할려고 해도
ERROR 2002 : Can't connect to local mysql server through socket `/var/lib/mysql/mysql.sock' (2)
와 같은 오류만 나타난다.
소스로 설치 한경우라 var/mysql 안에 보니 bin/mysql_install_db 이 명령어로 생성 되어야 할 기본 테이블들이 없는것을 확인 할 수 있다.
그래서 에러 로그를 확인 var/서버명.err 열어보니
090814 15:23:39  Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist
이와 같은 오류가 있더군요.
이와 같은 오류는 bin/mysql_install_db 처리 하기전에 테이블이 생성되어야할 var/ 디렉토리 권한문제 였습니다.

웹방화벽 TuTELA T-2010

서버,보안
TUTELA WebFirewall

(주)토리넷 업체에서 만든 웹방화벽 제품

nis 국가정보원 - IT보안 인증 사무국 인증제품

http://www.kecs.go.kr/certify/detail.jsp?ci=GOOD&di=159

인증제품명 : TUTELA WebFirewall V1.3
인증일 : 20080424
제품유형 : 웹방화벽 
보증등급 : EAL4 
인증보고서번호 : CR-08-18 
인증번호 : NISS-0101-2008 
공통평가기준 버전 : 2.3 
준수 보호프로파일 : N/A 
평가기관 : KISA 
개발사/신청기관 : 토리넷

사용자 삽입 이미지


사용자 삽입 이미지


사용자 삽입 이미지

사용자 삽입 이미지

 [출처] 세이박스 - http://www.saybox.co.kr/bbs/board.php?bo_table=hserver&wr_id=4

[리눅스] zlib 설치시 gcc 오류

서버,보안

리눅스 OS 페도라 10 버전을 설치 한 후에 APM설치 하기전 zlib 을 설치 하기 위해 소스 파일 압축을 해지 하고 ./configure 를 했더니 No. 라는 메시지만 잔떡 나타난다.
이후 make 명령을 실행하면 다음과 같은 메시지가 나타난다.
make: cc: 명령을 찾지 못했음
페도라 5 또는 9 버전을 설치시엔 없었는 증상인데 아마도 설치시에 용량을 줄이기 위해 개발 패키지 체크를 모두 껐던게 문제였던것 같다.
어쨌거나 해결방법은 초간단.
yum 을 이용해 간단히 설치할 수 있다.
yum install gcc

자! 그럼, 두말하면 잔소리 에러난 증상과 설치 하는 과정을 쭈욱 보도록 합시다.


1. zlib 설치시 gcc 오류 발생


[root@ ]# tar xvfj zlib-1.2.3.tar.bz2
[root@ ]# cd zlib-1.2.3
[root@ zlib-1.2.3]# ./configure && make && make install
Checking for gcc...
Building static library libz.a version 1.2.3 with cc.
Checking for unistd.h... No.
Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()
Checking for snprintf() in stdio.h... No.
  WARNING: snprintf() not found, falling back to sprintf(). zlib
  can build but will be open to possible buffer-overflow security
  vulnerabilities.
Checking for return value of sprintf()... No.
  WARNING: apparently sprintf() does not return a value. zlib
  can build but will be open to possible string-format security
  vulnerabilities.
Checking for errno.h... No.
Checking for mmap support... No.
cc -O -DNO_snprintf -DHAS_sprintf_void -DNO_ERRNO_H   -c -o example.o example.c
make: cc: 명령을 찾지 못했음
make: *** [example.o] 오류 127


2. yum 으로 gcc 설치

[root@ zlib-1.2.3]# yum install gcc
Loaded plugins: refresh-packagekit
Setting up Install Process
Resolving Dependencies
There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.
--> Running transaction check
---> Package gcc.i386 0:4.3.2-7 set to be updated
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-4.3.2-7.i386
--> Running transaction check
---> Package glibc-devel.i386 0:2.9-3 set to be updated
--> Processing Dependency: glibc-headers = 2.9-3 for package: glibc-devel-2.9-3.i386
--> Running transaction check
---> Package glibc-headers.i386 0:2.9-3 set to be updated
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.9-3.i386
--> Processing Dependency: kernel-headers for package: glibc-headers-2.9-3.i386
--> Running transaction check
---> Package kernel-headers.i386 0:2.6.27.25-170.2.72.fc10 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================
 Package                        Arch                 Version                                    Repository               Size
==============================================================================================================================
Installing:
 gcc                            i386                 4.3.2-7                                    fedora                  8.2 M
Installing for dependencies:
 glibc-devel                    i386                 2.9-3                                      updates                 2.1 M
 glibc-headers                  i386                 2.9-3                                      updates                 616 k
 kernel-headers                 i386                 2.6.27.25-170.2.72.fc10                    updates                 766 k

Transaction Summary
==============================================================================================================================
Install      4 Package(s)        
Update       0 Package(s)        
Remove       0 Package(s)        

Total download size: 12 M
Is this ok [y/N]: y
Downloading Packages:
(1/4): gcc-4.3.2-7.i386.rpm                                                                            | 8.2 MB     00:08    
(2/4): glibc-devel-2.9-3.i386.rpm                                                                      | 2.1 MB     00:01    
(3/4): glibc-headers-2.9-3.i386.rpm                                                                    | 616 kB     00:00    
(4/4): kernel-headers-2.6.27.25-170.2.72.fc10.i386.rpm                                                 | 766 kB     00:00    
------------------------------------------------------------------------------------------------------------------------------
Total                                                                                         1.0 MB/s |  12 MB     00:11    
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : kernel-headers-2.6.27.25-170.2.72.fc10.i386                                                            1/4
  Installing     : glibc-headers-2.9-3.i386                                                                               2/4
  Installing     : glibc-devel-2.9-3.i386                                                                                 3/4
  Installing     : gcc-4.3.2-7.i386                                                                                       4/4

Installed:
  gcc.i386 0:4.3.2-7                                                                                                         

Dependency Installed:
  glibc-devel.i386 0:2.9-3          glibc-headers.i386 0:2.9-3          kernel-headers.i386 0:2.6.27.25-170.2.72.fc10        

Complete!


3. gcc 설치 끝 다시 zlib configure 실행


[root@ zlib-1.2.3]# ./configure
Checking for gcc...
Building static library libz.a version 1.2.3 with gcc.
Checking for unistd.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for errno.h... Yes.
Checking for mmap support... Yes.


4. configure 결과 모두 Yes.  make 역시 gcc로 잘 설치 되는군요

[root@ zlib-1.2.3]# make
gcc -O3 -DUSE_MMAP   -c -o example.o example.c
gcc -O3 -DUSE_MMAP   -c -o adler32.o adler32.c
gcc -O3 -DUSE_MMAP   -c -o compress.o compress.c
gcc -O3 -DUSE_MMAP   -c -o crc32.o crc32.c
gcc -O3 -DUSE_MMAP   -c -o gzio.o gzio.c
gcc -O3 -DUSE_MMAP   -c -o uncompr.o uncompr.c
gcc -O3 -DUSE_MMAP   -c -o deflate.o deflate.c
gcc -O3 -DUSE_MMAP   -c -o trees.o trees.c
gcc -O3 -DUSE_MMAP   -c -o zutil.o zutil.c
gcc -O3 -DUSE_MMAP   -c -o inflate.o inflate.c
gcc -O3 -DUSE_MMAP   -c -o infback.o infback.c
gcc -O3 -DUSE_MMAP   -c -o inftrees.o inftrees.c
gcc -O3 -DUSE_MMAP   -c -o inffast.o inffast.c
ar rc libz.a adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o
gcc -O3 -DUSE_MMAP -o example example.o -L. libz.a
gcc -O3 -DUSE_MMAP   -c -o minigzip.o minigzip.c
gcc -O3 -DUSE_MMAP -o minigzip minigzip.o -L. libz.a


5. 마지막으로 make install 완료

[root@ zlib-1.2.3]# make install
cp zlib.h zconf.h /usr/local/include
chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h
cp libz.a /usr/local/lib
cd /usr/local/lib; chmod 755 libz.a
cd /usr/local/lib; if test -f libz.so.1.2.3; then \
          rm -f libz.so libz.so.1; \
          ln -s libz.so.1.2.3 libz.so; \
          ln -s libz.so.1.2.3 libz.so.1; \
          (ldconfig || true)  >/dev/null 2>&1; \
        fi
cp zlib.3 /usr/local/share/man/man3
chmod 644 /usr/local/share/man/man3/zlib.3


* 리눅스를 다룬지 8년 정도 되었지만 가끔씩 얘기치 않은 오류가 생기면 잠시 당황스럽더군요.
하지만 차근차근 원인을 찾아 보면 간단한 문제 인데 ^^;
여튼 동일 오류로 고민하는 분들이 생기면 저의 글을 보고서 손쉽게 해결 하시라고 이렇듯 작성했으니 만이 도움이 되시길 바랍니다.
* 본 게시글은 CCL에 따릅니다.

리눅스 백업 쉘 스크립트

서버,보안
#!/bin/bash

T=$(echo `date +%Y%m%d%H%M`)
MY=$(echo /home/nalabi/backup)

echo "nalabi 의 데이타가 백업 되었습니다. $T"

mysqldump myhome > $MY/myhome$T.sql
gzip $MY/myhome$T.sql

리눅스 tail 명령어

서버,보안
아파치 에러 로그 파악 방법 중의 하나...

tail /var/log/messages

tail 명령은 지정된 파일의 마지막 10줄을 보여준다.

/var/log/messages 는 운영체제의 시스템 메시지가 저장되는 로그 파일이다.
이곳에 아파치의 실행가 관련된 메시지가 저장 될 것이다.
만일 아파치와 관련된 내용이 없다면 다음과 같은 명령을 내린다.

tail -n 20 /var/log/messages

이 명령은 뒷부분의 20행을 보여준다.
또한 아파치에 대한 메시지만을 찾기 위해 명령의 끝에

| grep apache를 추가할 수도 있다.

만일 아파치에 대한 내용이 전혀 없다면 /etc/rc.d에 만든 파일의 이름을 확인해 보기 바란다.

리눅스 error 로그 확인하기

서버,보안
/usr/local/apache/logs/
아래

xxx_access_log.xxx

xxx_error_log.xxx

파일 확인


<VirtualHost *>
ServerName kkk.co.kr
ServerAlias www.kkk.co.kr www1.kkk.co.kr w4.kkk.co.kr 18.38.56.195
DocumentRoot /home/kkk/public_html
#CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/kkk-access.log 86400" common
# ErrorLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/kkk-error.log 86400"
</VirtualHost>

PHP 4.3.9에서 세션 에러 문제

서버,보안
PHP 4.3.9 에서는

session.save_path가 /usr/local/lib로 지정된다.

session.save_path=/tmp 라 지정하면 세션이 됐따 안됐다 문제 해결~~~ 

리눅스 tar 백업

서버,보안

--tar 백업

1. 백업 용어 정리

- 풀 백업 (full backup)
 파일 셋 안의 모든 파일을 포함해서 모두 복사하는 방법
 하나의 컴퓨터 시스템이나 하나의 디스크 파티션에서 사용
 새로운 커널을 만든다거나 새로운 어플리케이션 팩키지를 추가한다든지 또는
새로운 버젼의 운영체제를 설치하는 등의 시스템에 중요한 변화를 주었을 경우

- 증분 백업 (incremental backup)
 시스템이 이전에 백업한 이후로 변경된 파일만을 복사
 풀 백업이 너무 방대하고 자료 변경이 별로 없을 때

- 백업 단계 (backup level)
단계(level) 0 : 풀 백업
단계(level) 1 : 마지막 풀 백업(단계 0) 이후에 변경된 모든 파일 저장
단계(level) 2 : 마지막 단계 1 백업 이후에 변경된 모든 파일 저장

- 무인 백업 (unattended backup)
cron을 사용해 백업 명령어가 자동으로 수행
보안이 확실히 보장될 때가 아니면 무인 백업은 사용하지 않는것이 좋다.


2. tar 유틸리티
 테이프 생성을 위한 유틸리티로서 바이너리 데이터를 처리할 수 있다. 또한 여러
디렉토리를 아카이브로 묶을 수 있으며 링크를 포함하는 디렉토리들을 전송할 수
있으면서도 파일의 소유권과 액세스 퍼미션 등도 그대로 보존할 수 있는 장점이
있다.


3. 간단한 tar의 사용법

- tar의 플래그
c : 아카이브 생성
x : 아카이브로 부터 파일 추출
t : 목차 테이블 보기
v : 상세한 정보 출력

- 아카이브 만들기
$ cd /
$ tar -cf backup.tar home/
/home 의 하위디렉토리를 포함하여 backup.tar로 저장

- 아카이브 압축하기
$ gzip backup.tar
backup.tar.gz 이라는 파일을 생성하여 원래의 tar 아카이브보다 훨씬 더 작게 압축

- 압축된 아카이브 만들기
$ cd /
$ tar -cf - home/ | gzip > backup.tar.gz

(주의) v옵션 문제
$ tar -cvf - home | gzip > backup.tar.gz 을 하였을때는 tar에 따라서 v(verbose)
옵션을 stderr로 처리하지 않고 stdout으로 처리하여 문제를 일으키는 경우가 있다.
따라서 아카이브를 만들때는 v옵션을 빼는 것이 좋고, 아카이브를 풀때는 v 옵션과
관계가 없다.

- 아카이브 풀기
$ gunzip backup.tar.gz
$ tar -xf backup.tar

- 압축된 아카이브 풀기
$ zcat backup.tar.gz | tar -xf -

- gzip이 내장된 GNU tar
GNU tar의 경우 gzip 처리를 내장하고 있다. 따라서 다음과 같이 처리할 수 있다.
$ cd /
$ tar -czf backup.tar.gz home/

$ tar -xzf backup.tar.gz

- 아카이브 내용보기
$ tar -tf backup.tar
아카이브를 풀기전에 항상 파일들의 이름을 먼저 검사한다. 만일 아카이브 속의
파일들이 현재 디렉토리에 풀리도록 묶여 있다면, 임시 디렉토리를 새로 하나
만들고, 그곳으로 이동(cd)하여 파일들을 풀어낸다.

- 일부 파일들만 뽑아내기
$ tar -xvf backup.tar filename
여기서 filename은 tar의 -t옵션으로 파일의 경로명까지 알아야 한다.  filename과
./filename은 서로 다르게 처리되므로 정확한 파일명을 지정해야 한다.

$ tar -xvf backup.tar `tar -tf backup.tar|grep filename`
의 방법을 쓰는 것도 좋다.

(주의) 절대 경로 문제
 절대경로를 갖는 디렉토리 또는 파일을 복구할 때 문제가 발생한다. tar는
아카이브에 지정되어 있는 경로명으로 파일을 복구하기 때문에, 파일이 복구될 곳을
변경할 수가 없다. 따라서 이미 존재하는 파일을 덮어쓰거나 퍼미션 문제가 발생할
수 있다.
 GNU tar의 경우, 기본적으로 모든 절대 경로명을 상대경로 변경하여 아카이브를
만든다.  --absolute-names 옵션을 사용하면 절대 경로로 아카이브를 만든다.
 가장 좋은 방법은 아카이브를 만들때 디렉토리가 슬래시(/)나 틸드(~)로 시작하지
않도록 조심하는 것이다.
 또 다른 방법으로는
$ cd /
$ tar -cf backup.tar .
를 줄여서

$ tar -cf backup.tar -C / .

-C 옵션은 아카이브를 생성하기 전에 /로 이동하도록 한다. 여러 개의 디렉토리들을
아카이브로 만들려면 -C옵션을 여러번 사용한다.
$ tar -cf backup.tar -C /home/smiletw . -C /home/woody ./test


- 아카이브에 추가하기
$ tar -uvf backup.tar home/
새로운 파일들만 업데이트 한다. 동일한 파일이 업데이트 되면 아카이브 마지막에 추가한다.  (테입장치에서는 중간에 넣을 수 없는 것을 감안)

4. GNU tar를 이용한 풀백업 및 증분 백업
일반적으로 tar를 이용해서 아카이브를 만들면 풀백업이 된다. 그러나 사용자
홈디렉토리 또는 한 파티션 전체를 백업할때는 풀 백업을 자주 사용하기 힘들다.
이럴경우 풀 백업과 함께 증분 백업을 해 주는 것이 좋다. GNU tar는 옵션
처리만으로 손쉽게 풀백업과 증분 백업이 가능하게 해준다.
 먼저 GNU tar의 풀 백업 및 증분 백업에 쓰이는 옵션이 2가지 있다. -G
(--incremental) 옵션과 -g snapshot-file (--listed-incremental) 이 그것이다.
 -G 옵션은 예전 증분 백업 포맷으로 아카이브를 생성해 준다. 이 옵션으로 생성된
아카이브에는 아카이브 내에 포함되어 있는 파일이나 디렉토리의 정보가 들어가므로
비표준 아카이브로 생성된다. 따라서 GNU버젼이 아닌 tar로는 내용을 볼 수가 없게
된다.
 -g snapshot-file 옵션은 표준 아카이브로 생성되면서, 파일이나 디렉토리 등의
정보를 snapshot-file에 따로 저장함으로써, 표준 아카이브를 생성하게 만들어
준다. 따라서 GNU tar를 이용한 풀 백업 및 증분 백업에서는 -G 옵션이 아닌 -g
snapshot-file 옵션을 사용하는 것이 좋다.

- 풀 백업
$ tar -g list -czvf backup.tar.gz home/
list 라는 snapshot-file이 생성된다. 그리고 backup.tar.gz이라는 백업된
아카이브가 생성된다.

- 증분 백업
$ tar -g list -czvf backup-1.tar.gz home/
기존의 list 파일에서 이미 풀 백업된 내용을 확인하고, 그 이후에 변경되거나
추가되거나 삭제된 파일들을 backup-1.tar.gz에 백업한다.

5. GNU tar를 이용한 복구

먼저 풀 백업된 아카이브를 복구한다.
$ tar -g list -xzvf backup.tar.gz
다음으로 증분 백업된 아카이브들 중 가장 최근에 백업한 것만 복구하면 된다.
$ tar -g list -xzvf backup-10.tar.gz

6. 백업 및 복구의 유용한 옵션
-W (--verify) 검증
 백업을 하는 도중 변경되는 파일이 있을 경우가 있다. 특히 풀 백업과 같이 시간이
오래 걸리는 백업의 경우 아카이브가 생성되는 동안 변경될 가능성이 높다. 따라서
풀 백업의 경우 검증해주는 것이 좋다.
$ tar -g list -cvf backup.tar home/
이 경우 아카이브 생성 후, 아카이브의 내용과 실제 디렉토리의 내용과 같은지
확인한다. 그러나 gzip으로 압축하는 -z 옵션과 함께 사용할 수 없다. 따라서 검증
옵션을 사용해서 아카이브를 생성할 경우 gzip압축은 따로 해주어야 한다.

7. 백업 및 복구 정책
 GNU tar의 경우 앞서 말한 level 1 백업까지만을 지원해 준다. snapshot-file이
없을 경우 풀 백업(level 0)을 하고, snapshot-file이 이미 존재할 경우 증분
백업(level 1)을 하게 된다. 따라서 어느 시점에 풀 백업을 해야 하는지가 백업
정책에서 중요하다.  백업할 파일들이 자주 변경될 경우, 풀 백업의 주기도
짧아진다. 또한 변화될 데이터가 매우 중요할 경우, 백업도 자주 해야한다.
 일반적으로 level 1 백업만을 지원해 주는 GNU tar를 이용한다면, 1주일에 한번 풀
백업을 실행하고 매일 증분 백업을 한다. 백업하는 시간은 파일의 변화가 적은
새벽이 좋다. 따라서 일요일 새벽12시를 전 후해서 풀 백업을 하고, 매일 새벽에
증분 백업을 하는 것이 좋다.
 또한 풀 백업의 경우, 검증 옵션 (-W)을 사용하여, 아카이브를 검증해주는 것이
좋다. 그리고 아카이브의 크기를 줄이기 위해서 -z 옵션을 사용하여 압축해 주는
것이 좋다.
 아카이브를 만들 때는 아카이브의 이름에 신경을 써줌으로써 백업 및 복구시에
혼란을 줄일 수 있다. 풀 백업을 할 경우 다음과 같이 snapshot-file의 이름도 백업
날짜를 써주는 것이 좋다.
$ tar -g 2002-05-11.list -W -cvf 2002-05-11-full.tar home/

증분백업 때도 마찬가지로 날짜를 써 주는 것이 좋다.
$ tar -g 2002-05-11.list -czvf 2002-05-12.tar.gz home/

 그리고 -g 옵션에 쓰이는 snapshot-file의 보관 또한 중요하다. snapshot-file이
없으면 증분 백업된 아카이브는 수정된 부분만 저장되어 있는 일반 아카이브와
같아진다. 즉, 풀 백업 이후 삭제된 파일이 있음에도 불구하고, 증분 백업된
아카이브를 복구할 때, 풀 백업된 아카이브의 복구때 생성된 파일이 삭제되지
않는다. 따라서 용량이 작은 snapshot-file은 꼭 따로 안전한 곳에 보관해 주어야
한다.

- 테잎 백업..

*******************************************************************************
리눅스 tape_mini_Howto ver0.001
*******************************************************************************

- 서  론

 이문서는 리눅스에서 테이프장치를 사용하는 아주 간단한 내용을 보여준다.
 여기서 사용하는 테이트장치는 SCSI 장치만을 설명한다.
 이문서는 KLDP의 (주)정보라인-http://www.jbline.co.kr 글쓴이: 강민우
 (umkangm0@chollian.net)님의 글을 참조하여 작성했습니다.

- 테이프라면 카세트??

테이프 드라이브는 카세트와 비슷한 테이프를 사용하긴 하지만 사실 전혀 다르다.
테이프는 디스크와 달리 시리얼 접근을 하며, 이것은 어떤 부분에 이르기위해 그곳까지의 모든 부분을 통과하여 가야함을 의미한다.
카세트와 시디플레이어를 생각해보자.. :-)
시리얼 접근 방식은 테이프 드라이브를 느리게 만들지만, 그로 인해 만드는 비용이 비교적 저렴하다.
또한 테이프는 상당히 길게 만들 수 있어서 고용량의 데이터를 저장할 수 있다는 장점이 있다.
테이프 드라이브는 이러한 특징으로 효과를 볼  수 있는 파일모으기와 백업등의 작업에 매우 적합한 미디어이다.

- Tape 장치 설치

 테이프 장치를 사용하기 앞서 장치를 인식시켜야 한다. 일반적인 스카시 장치
 인식과 같은 방식으로 인식시킨다. 커널에서의 설정은 아래와 같다
 (당연히 스카시 장치이기 때문에 스카시컨트롤러는 인식시켰다고 가정한다)
 modconf 명령으로 해당 모듈을 올려준다.
 
 kernel/drivers/scsi                     SCSI controller cards and SCSI
 st           + SCSI tape support

 대충감잡았겠지만 테이프 장치명은 st0와 같이 된다.          

 dmesg로 장치의 인식을 확인한다.
 
 st: Version 20011103, bufsize 32768, wrt 30720, max init. bufs 4, s/g segs 16
 Attached scsi tape st0 at scsi0, channel 0, id 3, lun 0

- Tape 장치 사용하기
 
 테이프장치명은 /dev/st0  /dev/st1, st2 이런식으로  나가게 된다.

 테이프 장치를 제어하기 위해서 mt-st라는 패키지를 설치한다.

 devfs를 사용하고 있다면 SCSI, IDE를 막론하고 장치들은 /dev/tapes 아래에 위치하며 다음과 같다

 /dev/tapes/tape0 첫번째 테이프
 /dev/tapes/tape1 두번째 테이프
 
- mt 사용하기

 mt -f /dev/st0 rewind : 되감기
 mt -f /dev/st0 retension : 느슨해진 테잎을 다시 팽팽하게 하기
 mt -f /dev/st0 erase : 지우기
 mt -f /dev/st0 offline : 테이프 장치를 offline으로 전환하고 테이프를 꺼낸다
 mt -f /dev/st0 eject : 테이프를 꺼낸다
 
다른 명령들에 대한 것은 man mt 또는 mt -h 로 확인해보자.
apt-cache search tape를 통해 자신의 취향에 맞는 것을 찾아보는 것도 좋은 생각이다.
kdat 같이 그래픽적이며 직관적인 것을 찾을 수도 있을 것이다. 물론 취향 문제이다 :-)

- TAPE장치를 이용한 백업과 복구

  *  TAR 쓰기
    tar 는 유닉스 공통 명령이며 현재도 가장많이 쓰는 압축방식이다.
   
    간단한예로 /home디렉토리를 테이프장치에 백업하는 명령은 아래와같다
   
    tar cvf /dev/st0 /home

    테이프 백업내용을 tar를 이용하여 복구하기

    tar xvf /dev/st0 (이경우 풀고자 하는 디렉토리로 이동해서 푼다)

    테이프에 백업된 내용 살펴보기

    tar tvf /dev/st0
 
  * dump 쓰기
 
    dump를 이용하여 백업을 받으면 그것에 해당되는 디렉토리 구조 까지
    통째로 백업을 받는다. 이 방법을 이용하면 복구할때 편하다.
   
    dump로 /home을 테이프에 백업하기
   
    dump 0uf /dev/st0 /home
   
    dump를 이용하여 백업한 내용을 복구하기
   
    restore ivf /dev/st0

    이렇게 하면 아주 편하게 interactive한 명령모드가 떠서 /home밑에 있는 여러
    파일이나 디렉토리를 원하는대로 복원시킬 수 있다.  interactive prompt상에서
    쓸 수 있는 명령어는 다음과 같다.  ls, cd, add, delete, extract, quit
    이런식으로 되어져 있기때문에 백업받은 테잎이 마치 현재 디스크처럼
    내용전체를 파악, 복구할 수 있다. 아주 편한방법이다.  add를 사용하여
    디렉토리나 파일을 지정하게 되고 나중에 extract라는 명령어를 사용하게
    될 때 실제로 현재의 작업 디렉토리에 아까 add 명령어를 사용하여 선택했던
    파일들이 풀리게 된다..

    - 참고

리눅스 시스템 관리자 가이드 - http://kldp.org/Translations/html/SysAdminGuide-KLDP/book1.html
리눅스에서 테잎드라이브 쓰는방법 - http://kldp.org/KoreanDoc/TapeDrive-KLDP
Linux Devfs (Device File System) FAQ - http://kldp.org/Translations/html/DEVFS_FAQ-KLDP/index.html

--- .netrc 설정

ftp, rlogin, rexec 를 사용하기 위해서는 아이디와 비밀번호를 입력을 해야 한다.
빈번하게 사용을 할경우는 일일이 사용할때 마다 아이디와 비밀번호를 입력해야 하는 불편함을 해결하기 .netrc 에 미리 입력을 해두면 다음 부터 아이디와 비밀번호를 입력하지 않아도 된다.

홈디렉토리에 .netrc 를 편집기로 연다. ($HOME/.netrc)

vi .netrc
machine 172.24.126.28 login k1c password ******

편집을 한다음에는 다음과 같이 권한 설정을 바꾸어 준다.
chmod 600 .netrc

권한 설정을 바꾸었으면 다음과 같이 접속을 하면 별도의 로그인 없이 바로 들어간다.
ftp 172.24.126.28

--- 네트웍 백업

미러를 이용한 네트웍 백업

-- ssh


* 키 생성

$ ssh-keygen -b 2048 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nefsall/.ssh/id_rsa):
/home/nefsall/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/nefsall/.ssh/id_rsa.
Your public key has been saved in /home/nefsall/.ssh/id_rsa.pub.
The key fingerprint is:
cc:16:ff:d4:69:66:f3:66:72:91:76:44:2f:6d:70:f1 nefsall@file

* 키 복사

$ ssh <host> "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
Password:

* scp를 이용한 파일 복사

$ scp <file> ...  <host>:/dir

$ scp -r dir/ <host>:/dir/

* rsync, ssh를 이용한 백업, 미러링

$ rsync -av -e ssh [--delete] dir <host>:/dir (로컬에서 리모트로)

$ rsync -av -e ssh [--delete] <host>:/dir dir (리모트에서 로컬로)

--delete추가시 미러

* 익명 rsync 쓰기

archive 리스트 보기

$ rsync <site>::

미러하기

$ rsync -av --delete <host>::<archive> dir/


** rsync
        ***특징
-rsync는 rcp와 비슷한 프로그램으로 더욱 다향한 옵션으로 효율적인 데이타
 전송을 지원한다.

-rsync는 두 호스트사이의 데이터의 동기화를 위해서 사용되는 방법이다.
 동기화를 위해서 파일의 크기나 시간의 변화등을 이용하여 파일의 변경 유무를
 판단하여 데이타 동기화를 한다.
 
-주요 특징
 .링크, device, 소유자, 그릅, 허가권 복사 지원
 .GNU tar와 비슷한 exclude, exclude-from 옵션 지원
 .rsh 또는 ssh 등 사용가능
 .root 권한이 필요없음
 .anonymous 또는 인증 rsync 서버 지원(미러링에 유용함)


***서버측 설정
-동기화에 사용하는 프로토콜로는 rsh, ssh 를 사용할 수 있으며 이를 사용하지
 않더라도 원격 rsync 서버에 tcp 포트 873을 이용하여 클라이언트-서버형식으로
 접속할 수 있다.
 여기서는 일반적인 클라이언트-서버 방식만을 설명한다.
 데비안에서 rsync를 패키지로 설치하면 보안 문제로 inetd.conf에 설정이
 들어있지 않다. 따라서 사용자가 추가로 설정을 해주어야 한다.

 ---------------------------------------------------------------------------
 rsync   stream  tcp     nowait  root    /usr/bin/rsync rsyncd --daemon
 ---------------------------------------------------------------------------

 --daemon은 대몬모드로 시작한다는 이야기이며 /etc/rsyncd.conf파일을 필
 요로 한다.

 /etc/inetd.conf 파일에 위 라인을 추가후 /etc/init.d/inetd restart 명령으로
 inetd를 재 시작한다.
 만약, rsh 또는 ssh를 사용한다면 inetd.conf를 수정할 필요가 없다.
 
-rsync 설정 파일(/etc/rsyncd.conf)을 편집한다.
 /usr/share/doc/rsync 에 예제 파일(sample-rsyncd.conf.gz)을 참고하자.

 ---------------------------------------------------------------------------
 # sample rsyncd.conf configuration file

 # GLOBAL OPTIONS

 #motd file=/etc/motd
 #log file=/var/log/rsyncd
 pid file=/var/run/rsyncd.pid
 #syslog facility=daemon
 #socket options=

 # MODULE OPTIONS

 [web]  # 서비스명

         comment = public archive       # 이 설정에 대한 설명
         path = /var/www/               # 서비스할 디렉토리
         use chroot = yes               # 서비스하는 디렉토리를 루트디렉토리로 사용(ftp의 chroot와 같은 개념)
 #       max connections=10             # 동시 접속자 제한
         lock file = /var/lock/rsyncd
         read only = yes                # 읽기 전용(put 명령을 허용하기 위해서는 no로 설정해야 한다)
         list = yes
         uid = nobody                   # 접근자에 대한 유저 권한
         gid = nogroup                  # 접근자에 대한 그룹 권한  
 #       exclude = #specify any file in path not to be accessed
 #       exclude from =
 #       include =
 #       include from =
 #       auth users = #allow specific users to connect (besides anonymous)
 #       secrets file = /etc/rsyncd.secrets
         strict modes = yes #makes sure the secrets file has proper permissions
         hosts allow = 192.168.1.2       # 호스트별 접속허용을 위해서(여기에 상대 호스트의 주소를 명시)
 #       hosts deny =
         ignore errors = no
         ignore nonreadable = yes
         transfer logging = no
 #       log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
         timeout = 600                   # 클라이언트에서 접근시 타임아웃시간.
                                         # anonymous 로 운영하는 경우 설정을 해야 클라이언트가 죽었을 때
                                         # 서버에서 접속을 해체할 수 있음.
     
         refuse options = checksum, dry-run
         dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
---------------------------------------------------------------------------
-hosts allow : 이 설정의 기본은 all 이므로 보안을 유지하기 위해서는 반드시
 설정을 하여야 한다.

-현재 rsync 자체적으로는 암호화 지원하지 않으며 사용자 인증만 지원한다
 추후에는 SSL을 지원할 예정이며, 만약 암호화를 사용하려면 ssh를 사용하면 된다.
 
***클라이언트 설정
 서비스명        :  web                
 rsync 서버 이름 :  debianusers.org    
 로컬측 디렉토리 :  /var/www

 -a 아카이브 모드. (심볼릭 링크, 속성, 퍼미션, 소유권 등 보존)
    -a 는 -rlptg 와 동일하다.
    -r recursive (하위 디렉토리까지 포함)
    -l 심볼릭 링크 재생성
    -p 퍼미션 업데이트
    -t 변경시간 전송 (이것이 없으면 전송한 시간으로 바뀜)
    -g 그룹이름 변경

 -v 자세한 내용을 보여줌
 --delete 서버에서 사라진 파일이 있으면 클라이언트측에서도 지움.
 기본설정에서는 지우지는 안는다.
 -z data file을 압축해서 전송한다.

-GET 설정(다운로드)

----------------------------------------------------------------------
 /usr/bin/rsync -av --delete debianusers.org::web /var/www
----------------------------------------------------------------------

 debianusers.org 서버의 /var/www 내용을 로컬의 /var/www/로 가져옴
 서버에서 지워진 파일은 로컬에서도 지워짐

----------------------------------------------------------------------
 /usr/bin/rsync -avz deebianusers.org:/usr/src/bar /data/tmp
----------------------------------------------------------------------

 위의 내용은 debianusers.org 호스트에서 /usr/src/bar 안의 내용을 로컬
 호스트의 /data/tmp 디렉토리로 옮긴다.
 위에서 /usr/src/bar/ 라고 뒤에 디렉토리 표시를 한다면 bar 디렉토리도
 포함해서 가져온다.

 참고
 ----------------------------------------------------------------------
 : 과 :: 의 차이
 : 은 rsh나 ssh를 사용하는 것이며 ::은 rsync 자체에서 지원하는 기능을
 이용하여 자료를 가져오는 것으로 873 TCP 포트를 사용한다.
 : 에서 기본은 rsh를 사용하나 -e ssh 옵션을 이용하여 ssh를 사용할 수도
 있다. ssh를 사용하려면 비밀번호를 입력해야하나 이것도 파일형태로 만들어서
 옵션에서 지정해주면 된다.
 자세한 사항은 man 페이지를 참고하기 바란다.
 ----------------------------------------------------------------------

-PUT 설정(업로드)

 ----------------------------------------------------------------------
 /usr/bin/rsync -av --delete /var/www debianusers.org::web
 ----------------------------------------------------------------------

 rsync 설정에서 read only=no 가 설정되어야 한다

-서버측 공유명(맨페이지에서는 모듈이라고 한다)을 보려면 아래 명령을 실행한다.

----------------------------------------------------------------------
 rsync debianusers.org::
----------------------------------------------------------------------

-web 이라는 서비스명의 공유 디렉토리의 파일 내용을 표시하기 위한 명령

----------------------------------------------------------------------
 rsync -a debianusers.org::web
----------------------------------------------------------------------

-서버측 공유 디렉토리의 파일리스트를 현재의 디렉토리에 list라는 파일로 저장

----------------------------------------------------------------------
 rsync -av debianusers.org::web
----------------------------------------------------------------------

-보안을 위해 ssh 프로토콜을 이용하는 방법

----------------------------------------------------------------------
 rsync -av --delete -e ssh /var/www/ debianusers.org:/var/www
----------------------------------------------------------------------

** 실제 적용
미러를 이용한 백업은 네트웍으로 연결되어 있는 두 종단의 여러 호스트들의
백업 데이타와 이에 따른 백업 저장 작업을 하나의 호스트로 집중하여 제어할 수
있게 해준다.

만약, 내부 네트웍 호스트들의 백업만을 생각한다면 NFS, Samba같은 파일서버를
이용해서 백업 데이타를 한곳의 호스트로 집중할 수가 있다.
하지만 회사에서 대규모 서비스를 외부로 하기위해 IDC에 다수의 서버를 배치
했을때는 파일서버를 이용한 방법으로는 한곳에 백업 데이타를 집중하기가
불가능해진다.
이런 경우에는 시스템 관리자가 매일 매일 확인할 수 없는 IDC에 있는 서버의
재난 복구 정책을 겸하여 백업 정책을 세우는 것이 좋다.

우선 IDC 있는 서버군에 파일 서버를 두어 각 호스트의 백업 데이타를 파일
서버로 모은다. 사내 로컬 네트웍 역시 파일 서버로 사내 각 호스트들의 백업
데이타를 파일 서버로 모은다.
이때 각각의 호스트에서의 개별 백업 작업은 관리자가 정한 룰에 따라 만든 백업 
스크립트를 cron에 등록시켜 백업 작업을 자동화 시키는 것이 좋다.
물론 이때 주의해야 할 점은 미묘한 스크립트상의 실수로 원하지 않는 백업
데이타 유실에 주의를 해야할 것이다.
파일 서버는 NFS등을 사용하여 각 호스트의 특정 디렉토리에 미리 마운트시켜
놓아 각 호스트에서는 단순하게 백업을 NFS로 마운트된 디렉토리에 저장함으로
각 호스트들의 백업 데이타를 파일 서버로 집중 시킬수가 있다.

백업 정책은 경우에 따라서 틀려지겠지만 일주일에 한번 전체 백업, 매일 매일
전체 백업후의 증분 백업(tar의 증분 백업 방법을 이용하거나 find를 이용해서)
을 하는것이 좋다.   
그리고 일주일 주기로 파일 서버에 모인 각 호스트의 전체 백업 데이타를
관리자가 정한 룰에 따라 rsync 미러링(cron 이용)을 이용해서 한곳의 파일
서버로 가져와 양 서버군의 백업 데이타를 한번에 백업 매체에 실제적으로
저장하는 것이 일반적인 방법이 될것이다.
만약, 좀 더 민감한 경우라면 매일 백업되는 증분 백업 데이타 역시 사내 파일
서버로 모아 백업 매체에 저장하는 것이 좋을 것이다.
이때 백업 매체로는 백업 데이타의 용량에 따라 틀려지겠으나 전체 백업
데이타는 Tape 드라이브를 사용하고 증분 백업 데이타는 분리된 호스트에
저장하거나, 광드라이브(cd-rw, mo, dvd)를 사용할 수 있다.

참고
----------------------------------------------------------------------
mkCDrec 프로그램을 이용하여 CD로 시스템을 백업하고 복구할 수 있다.
프로그램은 아래 싸이트에서 다운받을수 있다.
http://mkcdrec.sourceforge.net
http://mkcdrec.ota.be/project

이 프로그램은 시디 뿐만 아니라 여유 하드디스크나 NFS, 로컬이나 원격의 Tape
드라이브로의 백업도 지원한다.

관심있는 분들은 한번 사용해보는것도 괜찮을 것이다.
자세한 사항은 소스에 딸려오는 문서를 찾아보기 바란다.
----------------------------------------------------------------------

참고) 스크립트 첨부파일 있음.(script.tar.gz)


-- 시디 백업

현재 사용되구 있는 리눅스 시스템을 CD에 굽고, 리눅스 시스템이 망가 졌을 때 이 구운 시디로 부팅을 해서 복구를 하는 방법이다.

한텀에서 명령을 치면 1번시디 , 2번시디….이렇게 만들면서 시디에 굽고 , 나중에 1번 시디로 부팅을 해서 복구를 한다.

1 먼저 인터넷에서 프로그램을 다운 받는다.

http://mkcdrec.sourceforge.net/

http://mkcdrec.ota.be/project/mkCDrec_v0.5.9.tar.gz

현재 나와 있는 버전은 0.5.9 이다.

다운 받았으면 아래와 같이 압축을 풀어 준다.

tar xvfz mkCDrec_v0.5.9.tar.gz


2 설정
설정을 할때는 루트 권한으로 한다.


압축을 풀면 mkcdrec 이런 디렉토리가 생겨난다.

Cd mkcdrec
명령어로 디렉토리를 이동한다.
그러면 아래와 네모박스에 Config.sh 라는 설정 파일이 있습니다.

[image1.gif]


이 파일을 수정해서 사용을 하면 됩니다.
먼저 CD-RW의 장치를 알아야 만 시디를 구울수가 있습니다.
아래와 같이 노란색의 박스 표시에 있는 숫자 번호(1, 0, 0)이 CD-RW의 장치 입니다.

이것을 가지고 설정화일을 수정해 주어야 합니다.

[image2.png]

vi Config.sh 를 이용해서 파일을 수정합니다.

아래와 같이 CD-R/W 장치를 지정합니다.

[image3.png]
 
아래와 같이 랜카드 모듈을 설정합니다.
랜카드 모듈은 lsmod 를 이용하면 확인할수 있습니다.

[image4.png]

또한 옵션으로 BURNCDR 이라는 부분을 y 로 사용을 하면 실시간으로 굽는 것이고,
n 를 사용하면 한면에 /tmp/CDrec-2002.03.25_1.iso 라는 파일을 만들어서 원격으로 다운 받아서 구울수가 있다.

[image5.png]
 
3 시디이미지 만들고 굽기

make 를 치면 아래와 같이 선택할수 있는 메뉴가 나옵니다.

[image6.png]

이중에서 부팅시디를 만들고, 1번시디, 2번시디…를 만들려면 2번을 선택하면 시디를 만들수 있습니다.

2번을 선택하면 아래와 같이 계속해서 실행을 할것인지 확인을 합니다. 계속해야 하기 때문에 엔터를 치세요.

[image7.png]

엔터를 치면 화면에 현재 진행하고 있는 상태를 알수 있게 메시지를 뿌려 줍니다.
화면이 잠시 멈추더라도 프롬프트가 나올 때 까지 잠시 기다리십시오.

화면이 진행되다가 아래 그림과 같이 시디를 넣으라는 메시지가 나오면 공 시디를 넣어서
엔터를 치면 시디가 구워 집니다.

[image8.png]

이런식으로 시디를 계속해서 넣어 주면 백업 시디가 워 집니다.

4 복구하기
1번 시디는 부팅 가능한 시디 이기 때문에 제일 먼저 1번 시디를 넣고 기다리거나 엔터를 치면 부팅이 됩니다.

그러면 루트 쉘이 나오고 여기서 다음과 같은 명령을 칩니다.
cd /etc/recovery
./start-restore.sh

그러면 스크립트가 알아서 복구를 해주고,  필요시 포맷을 할것인지 묻는 경우도 있으며 있때는 y를 눌러서 포맷을 합니다.
어느정도 복구가 되면 시디를 바꾸라고 메시지가 나옵니다.

그러면 2번시디, 3번시디 교환해주고 엔터를 치면 복구가 됩니다.
마지막으로 루트 셀이  성공적으로 했다고 나오면 리부팅을 합니다.

4.1 Make clean

현재 사용했던 로그나 정보를 지우고 다시할려면 make clean  을 해주면 새롭게 진행할수 있습니다.

(팁. usb)

마운트 하기
cd-rom 안에 무슨 파일이 있는가 확인을 하려면 다음과 같은 명령을 치면 시디롬 이 마운트되어 /mnt 밑에 시디롬의 내용을 확인할 수가 있다.

Mount /dev/scd0 /mnt

cd-writer 장치 확인하기
아래의 네모칸처럼 되어 있으면 cd-writer 기를 사용할수 있다.

[이미지\usb\image1.png]

아래와 같은 명령을 타이핑하면 usb-cdwriter 기에 대한 상세 정보를 알수 있습니다.
cdrecord -prcap -inq dev=0,0,0

시디 굽기
시디를 구울려면 구울려는 곳의 디렉토리를 이미지로 만들어야 한다.
이미지 만드는 방법은  쉘 상에서 mkisofs -o 디렉토리.iso 디렉토리 이다.

예) mkisofs -v -J -o k1c.iso k1c

이미지를 만들었으면 cdrecord 명령어를 이용해서 굽는다.
cdrecord -v -eject speed=2 dev=0,0,0  k1c.iso

시디 내용 지우기
cdrecord -dev=0,0,0 -blank=fast


시디 굽기
/home/k1c/public_html 과 /var/lib/mysql 를 백업하기

cd /tmp
mkdir imsi
cd /tmp/imsi

cp -a /home/k1c/public_html .
cp -a /var/lib/mysql .

cd /tmp

먼저 해당 디렉토리를 iso 로 묶는다.

mkisofs -v -J -o tmp.iso /tmp/imsi

iso 파일을 굽는다.

cdrecord -v -eject speed=4 dev=0,0,0  tmp.iso

--- 하드 디스크로 백업받기.

* 여분의 HDD로 백업하기 *

백업이란 불의의 사고에 대비하여 파일 또는 데이터베이스를 복사해 두는 행위를 말합니다.

대부분의 대형 컴퓨터를 운영하는 곳에서는 거의 필수적인 일이라고도 할 수 있습니다. 

물론 개인 컴퓨터 사용자들에게도 필수적이고도 중요한 일이지만 대부분의 경우 자주 무시

되는 경향이 있습니다.

여분의 HDD로 백업하는 방법은 가장 흔한 방법 중 하나라고 생각됩니다.

손쉽게 접할 수 있는 HDD를 매체로 하는 방법으로 그 방법은 다양한 방법들이 존재한다고 말할 수 있습니다.

그 중 제가 해본것들만 추려서 설명하겠습니다.


1. 필요한 부분만 백업하기

우선 백업을 받을 하드를 리눅스에 연결 하였다고 가정하겠습니다. ( /dev/hdb1 )

백업을 받을 하드를 연결하였으면 리눅스에서 사용하기 위해서는 마운트라를 과정을 거쳐야합니다.

다들 아시는거라 마운트에 대해서는 설명하지 않겠습니다.

# mount /dev/hdb1 [마운트할 디렉토리]

이런식으로 우선 마운트를 시킵니다.

그러면 이제 백업할려고 하는 부분들을 복사하시면 됩니다.

그 방법에는 cp나 tar와 gzip을 이용해서 편하게 이용하시면 됩니다. tar명령과 cp를 사용해 보신분이라면

쉽게 사용하실 수 있을거라 생각됩니다.

예를 들어 홈디렉토리를 백업할려고 한다면

# tar -zcvf home.tar.gz /home

# cp home.tar.gz /mnt/hdb1

이런식으로 하시면 되겠죠? 별로 어려운것이 없는 방법 중 하나입니다.


2. 통채로 백업하기

얼마전에 제가 써본 방법입니다.  비슷한 크기의 하드로 백업을 하는 경우입니다. 말 그대로 하드를 통채로

백업하는 방법이지요. 

저 같은 경우의 예를 들자면  L4 스위치에 물려서 서비스하는거 였는데 총 13개의 서버 중 한대만 유독 이상해서

새로 리눅스 깔아서 파티셔닝해서 ftp나 cp 머 이런걸로 백업할려고 하는 생각하니 시간도 오래걸릴꺼 같고 귀찮기도 해서

여러가지 방법을 찾다가 이 방법을 사용하였습니다.

dd 명령을 통해서 그냥 하드 째 밀어 버리는 방법을 사용하였습니다.

# dd if=/dev/sda of=/dev/sdb bs=4096

dd명령어로 한줄만 치고 커피 마시러 잠시 나가서 있다가 오니 어느새 완료가 되어있있고 부팅해서 테스트해보니

만족한 결과를 얻을 수 있었습니다.


dd 명령어에 대해서 알아보면

흔히 우리가 dd명령어를 보통 사용하는 경우는 부팅 디스켓을 만들기 위해서 사용하거나  아니면 리눅스의 부트 영역을

복사해서 윈도우 부트로더로 부팅할려고 하는 경우에 많이 사용합니다.

if = file
   표준 입력 대신에 file에서 지정한 것을 입력의 대상으로 합니다.
   위에서 제가 써던걸 보면 /dev/sda라는 장치를 표준 입력의 대상으로 지정한게 되겠죠

of = file
   표준 출력 대신에 file에서 지정한 곳을 출력의 대상으로 합니다.
 
bs = bytes
   한번에 bs에서 지정한 바이트씩 읽고 쓴다.
 
더  자세한 옵션들을 man dd해서 참고하시면 될것입니다.

정리해보면

dd 명령을 통해서 /dev/sda에서 /dev/sdb로 4096 bytes씩이 덤프해버리는 라는 말입니다.

생각보다 간단하면서 쉬운 명령입니다. :)


여분의 하드로 백업하는 방법은 워낙 다양하기 때문에 그중에서 제가 써본것들로만

원고를 쓸려고 하니 부족한 부분이 많군요.

--- find를 이용한 증분백업

앞에서 잠깐 tar에서 증분백업을 다루었는데 여기선 tar를 이용한 증분백업을 해본다.

증분백업은 시스템의 백업상태르르 최신 상태로 유지하기에 가장 좋은 방법이다. 예를 들어, 지난 24시간 동안 변경된 파일만 야간
백업작업을 하고, 지난주에 변경된 부분은 주간 백업, 전체 시스템은 월간 백업을 하는 형태이다.

앞에서 언급한 tar, cpio 도구를 이용해 증분 백업을 할 수 있다. 증분 백업을 만드는 첫번째는 특정 시간동안에 변경된 파일 목록을
만드는 것이다. 이런작업은 find로 쉽게 해결이 가능하다. 만약, 여러분이 특별한 백업 프로그램을 사용하고 있다면 이와 같은 작업은
필요치 않을 것이다. 백업 프로그램의 옵션을 설정하면 다음과 같이 증분백업을 해줄것이다.

예를 들어 지난 24시간 동안 변경된 파일의 목록을 만든다면 다음과 같은 명령을 사용하면 된다.

find / -mtime -1 \! -type d -print > /tmp/filelist.daily

[옵션 해석]
find의 첫째 인수는 시작할 디렉토리를 의미한다.(여기서는 루트 디렉토리이다.)
-mtime -1 옵션은 지난 24시간 동안 변경된 모든 파일을 찾으라는 옵션이다.

복잡해 보이는 \! -type d는 출력할 때 일부 불필요한 부분을 짤라내는 것으로 굳이 사용하지 않아도 된다. 여기서 find는
결과로 나온 파일 목록에서 디렉토리를 배재하라는 의미이다. !는 부정 연산자(여기서는 d타입의 파일을 배제하라 라는 의미)로
이 앞에 역슬래시를 넣어야 한다. 그렇지 않으면 셸은 이를 특수 문자로 인식하게 된다.

-print는 검색 결과에 맞는 모든 파일명을 표준 출력으로 출력하게 한다. 여기서는 나중에 사용하려고 표준 출력을 파일로 리다이렉트하여
저장하였다. 유사한 방법으로 지난 주에 변경한 모든 파일의 위치를 다음과 같이 얻을 수 있다.

find / -mtime -7 -print > /tmp/filelist.weekly

find 참고문)

만약, 이런 방법으로 find를 사용한다면 이 명령은 마운트된 모든 파일시스템을 돌아다닐 것이다. 예를 들어, cd-rom이 마운트 되어 있다면
cd-rom에 있는 파일도 찾을 것이다.(여러분 중엔 이런 실수로 cd-rom에 있는 것까지 백업하고 싶진 않을 것이다.) --prune 옵션을
사용하면 find 명령이 시스템 전체를 걸쳐 돌아다닐 때 특정 디렉토리를 배제하도록 한다. 아니면 첫째 인수를 /(루트 디렉토리) 대신
다른 것을 사용해  find 명령을 여러 번 실행할 수도 있다. 좀더 자세한 것은 find의 매뉴얼 페이지를 참조하도록 한다.

이제 백업 받을 파일의 목록을 만들었다. tar로 백업 받을 파일 목록을 갖고 있는 파일을 지정할 수 있다. 이런 옵션을 사용하기 앞서
사용자는 tar의 모든 옵션을 대시(-, 또는 하이픈이라고도 한다) 로 지정해서 확실히 구분할 수 있는 문법을 사용해야 한다. 예를 들어
/tmp/filelist.daily에 나타난 파일 목록을 /dev/rft0 장치로 백업 받으려면 다음과 같은 명령을 사용한다.

tar -cv -T /tmp/filelist.daily -f /dev/rft0

이제 짧은 셸 스크립트를 작성해서 파일 목록을 만들고 tar를 이용해 백업 받는 것을 자동화 할 수 있다. 드라이브에 있는 테잎에 백업을
만들기 위해 특정 밤 시간대에 스크립트가 실행되도록 cron을 이용할 수 있다.(cron에 관해선 전문 서적을 참고하기 바란다, 한빛미디어
유닉스파워툴) 또한 주 단위 백업과 월 단위 백업을 위해 이와 비슷한 스크립트를 작성할 수 있다..

참고서적 : 러닝 리눅스 288-289 페이지.(밝혀둔다. 필자가 자료 준비가 많지 못해 책과 같은 부분이 대부분이라 식상할 것이다. 이부분에 대해
양해를 부탁한다)

find 테크닉..

파일 크기로 찾기...

find -size 1234c -print

하면 1234 바이트의 파일을 찾을 수 있다.

크기 앞에 + 를 붙이면 보다 큰.. - 를 붙이면 보다 작다라는 표시이다.

소유자와 그룹으로 검색하기

find . -user root -perm -4000 -print

그리고 이름이나 그룹대신에 uid나 gid를 사용할 수 있다.

(추가부분 : 따로 원고 복사.)

끝.

원고정리 : 서치아이


KNOPPIX

서버,보안
What is KNOPPIX®?
KNOPPIX is a bootable CD with a collection of GNU/Linux software, automatic hardware detection, and support for many graphics cards, sound cards, SCSI and USB devices and other peripherals. KNOPPIX can be used as a Linux demo, educational CD, rescue system, or adapted and used as a platform for commercial software product demos. It is not necessary to install anything on a hard disk. Due to on-the-fly decompression, the CD can have up to 2 GB of executable software installed on it.

관련 사이트 :

http://debianusers.org/DebianWiki/KnoppixKo
http://www.knopper.net/knoppix-info/index-en.html

리눅스 cron 사용법

서버,보안
1. cron 명령은 지정된 날짜와 시간에 일정 작업을 주기적으로 수행하기 위해 사용되며 각 사용자별 로 /var/spool/cron/crontabs 디렉토리에 사용자 ID와 같은 이름의 crontab 화일을 만들어 cron job을 지정할 수 있다.

cron 명령은 시스템이 부팅되면서 /etc/rc2.d/S75cron 스크립트에 의해서 daemon 형태로 수행된다.

2. 각 사용자 별로 crontab 화일을 만드는 방법은 아래와 같이 "crontab -e" 명령을 실행하면 된다.

% crontab -e

위와 같이 명령을 실행하면 "vi" editor mode로 들어가 crontab 화일을 수정할수 있게 되는데, 만약 "vi" mode로 들어가지 않으면 "EDITOR" 환경변수를 vi로 변경 후 crontab 명령을 다시 수행한다.

2.1 csh을 사용하는 경우

% setenv EDITOR vi
% crontab -e

2.2 sh이나 ksh을 사용하는 경우

$ EDITOR=vi
$ export EDITOR
$ crontab -e

3. crontab 화일의 내용을 정의 하는 format은 아래와 같다.

분 시 일 월 요일 실행할 명령

분 : 0-59
시 : 0-23
일 : 1-31
월 : 1-12
요일 : 0-6( 0: 일요일)

예) 매주 일요일 오전 3:15에 /var 디렉토리에 있는 core 화일을 지우는 작업

15 3 * * 0 find /var -name core 2>/dev/null | xargs rm -f

매월 1일 오후 6시에 시스템 down message 보내기

0 18 1 * * wall "System Will be down"

4. /etc/cron.d/cron.allow 화일이나 /etc/cron.d/cron.deny 화일을 이용하여 시스템 관리자는 각 사용자별로 crontab 화일에 대한 access 권한을 제한 할 수 있다.

4.1 crontab을 access 할 수 있는 사용자

- /etc/cron.d/cron.allow 화일이 존재하는 경우, 그 화일 안에 지정된 사용자

- /etc/cron.d/cron.allow 화일이 없는 경우, /etc/cron.d/cron.deny 화일안에 지정되지 않은 사용자

4.2 crontab을 access 할 수 없는 사용자

- /etc/cron.d/cron.allow 화일이 존재하는 경우, 그 화일 않에 지정되지 않은 사용자

- /etc/cron.d/cron.allow 화일이 없는 경우, /etc/cron.d/cron.deny 화일에 지정된 사용자

- /etc/cron.d/cron.allow와 /etc/cron.d/cron.deny 화일이 모두 없는 경우,
root를 제외한 모든 사용자

4.3 OS가 설치되면 기본적으로 /etc/cron.d/cron.deny이 생성되고 그 안에 아래의 사용자들이 지정된다.

daemon
bin
smtp
nuucp
listen
nobody
noaccess

/etc/cron.d/cron.allow와 /etc/cron.d/cron.deny 화일에 사용자를 지정할 때는 위와 같이 한줄에 한명씩 사용자를 지정한다.

5. cron에 관련된 환경은 /etc/default/cron 화일에 정의 할 수 있다.

% cat /etc/default/cron

CRONLOG=YES
PATH=/usr/bin:/usr/ucb:




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

확인 : crontab -l
수정 : crontab -e

매일 0시 0분에 실행 -> 0 0 * * * rdate -s time.bora.net

리눅스 시스템 상황 보기

서버,보안
netstat -an | grep SYN 

리눅스 표준 시간 바꾸기. 설정

서버,보안
[partner@server partner]$ date
Mon Jul 12 10:15:37 KST 2004 <<-수정되기전 시각정보
[root@server root]# rdate -s time.bora.net
[root@server root]# date
Mon Jul 12 10:39:39 KST 2004 <<-수정된후 시각정보
[root@server root]#

아파치 보안 설정

서버,보안


아파치 보안 설정

리눅스 개인계정 로딩시 틸드(~)기호없이 그냥 사용

서버,보안
개인홈페이지를 로딩할 때 사용하는 틸드(~)기호없이 그냥 사용하려면 다음과 같이 하시면 됩니다.

httpd.conf파일의 ScriptAlias부분에 원하는 개인홈페이지의 세팅을 합니다.



ScriptAlias /sspark/ "/home/sspark/www/"



즉, 개인홈페이지의 기본적인 로딩은 다음과 같이 합니다.

http://www.kebia.net/~sspark

그런데 위와 같이 ScriptAlias를 설정해 두셨다면 다음과 같이 틸드(~)기호없이 로딩이 가능합니다.

http://www.kebia.net/sspark

리눅스에서 한글 깨짐 문제 해결

서버,보안
# /etc/sysconfig/i18n

LANG="ko_KR.eucKR"
SUPPORTED="en_US.UTF-8:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFonT="lat0-sun16"
SYSFonTACM="iso15"







#vi /etc/profile

export LANG="ko_KR.eucKR"

리눅스에서 데이타별 자동 백업하기

서버,보안
#!/bin/sh

server_name="db_server"
mysql_bin="/usr/local/mysql/bin"
mysqldb_root="/usr/local/mysql/data" #데이타베이스 위치
backupdb_root="/root/mysqldb_backup" #데이타 베이스 백업 공간
dir_name="$(date +%y%m%d%H%M)"

if [ ! -d $mysqldb_root ] ; then
echo "데이타베이스 위치를 입력해 주세요"
fi

if [ ! -d $backupdb_root ] ; then
echo "데이타 베이스 백업 공간을 만듭니다"
echo "mkdir -p $backupdb_root "
mkdir -p $backupdb_root
fi

if [ -d "$backupdb_root/$server_name.$dir_name" ]; then
echo "디렉토리가 존재합니다"
rm -rf "$backupdb_root/$server_name.$dir_name"
exit
else
echo "디렉토리를 생성합니다"
mkdir "$backupdb_root/$server_name.$dir_name"
fi

for db_name in $(ls $mysqldb_root)
do

if [ -d "$mysqldb_root/$db_name" ] ; then
echo "$db_name DB를 백업 중입니다"
$mysql_bin/mysqldump $db_name >> $backupdb_root/$server_name.$dir_name/$db_name.sql
fi

done
cd $backupdb_root
echo "백업된 DB를 압축합니다"

tar -cvzf "$server_name.$dir_name.tar.gz" "$server_name.$dir_name"

if [ -d "$backupdb_root/$server_name.$dir_name" ]; then
rm -rf "$backupdb_root/$server_name.$dir_name"
fi

let "i = 0"
for dname in $(ls -t $backupdb_root)
do
let " i = i + 1"

if [ $i -ge "11" ]; then
if [ -f "$backupdb_root/$dname" ]; then
rm -f $backupdb_root/$dname
fi
fi
done

리눅스 에서 하드 추가

서버,보안
# fdisk /dev/hd
한 다음
help 명령어 참조하셔서 리눅스파티션으로 만둘어주시길..

리눅스 fstab 리드온리 문제 해결

서버,보안

# mount -o remount, rw /

웹로그 분석 프로그램 설치하기

서버,보안
1. 웹로그 분석??
2. Accesswatch 설치
3. accesswatch.cfg 환경설정
4. 접속 통계 분석 작업
5. 접속 통계 분석 작업
6. 분석 결과 확인



1. 웹로그 분석??    Top

웹사이트접속통계를 하여 알 수 있는 정보들을 구체적으로 분석하여 보면 다음과 같다.
● 어디에서 방문했는가? ( IP Address 또는 Domain)
● 언제 방문했는가? (방문한 시간)
● 어떤방법으로 방문을 했는가? (GET 또는 POST)
● 어떤 브라우즈로 사용했는가? (Netscape 또는 익스플로러)
● 어떤 페이지를 보고 갔는가? 


2. 설치    Top

설치는 다운 받은 압축파일을 풀어주는것으로 끝이 난다.
다운로드 : http://www.accesswatch.com/download/src/103049/accesswatch-23.tar.gz
파일을 주로 /usr/local/에 설치한다. (압축을 풀면 aw 라는 디렉토리가 생긴다.)
절대경로는 /home/sspark/public_html/aw 가 된다.

파일 속성은
● aw-parser : 로그분석을 위한 파싱작업을 위한 스크립트
● aw-report : 파싱된 내용을 html문서로 만들어 config파일에서 지정된 디렉토리에 저장해 주는 스크립트.
(예 $reportBase = "/home/sspark/public_html/aw/report")
● cfg : 환경설정 파일을 저장하고 있는 디렉토리
● report : 분석결과를 저장하기 위한 디렉토리(/home/sspark/public_html/aw/report) 이다. 


3. accesswatch.cfg 파일 설정하기    Top

환경설정파일은 accesswatch.cfg라는 파일이며 이파일을 vi등의 에디터로 설정을 해줘야합니다.
이 파일이 존재하는 위치는 /home/sspark/public_html/aw/cfg/accesswatch.cfg가 됩니다.

# AccessWatch 사용자 환경설정정보 파일 ###
# 이들 옵션에 대한 것들은 아래사이트를 참조한다.
#
#
# 온라인 상(http://www.accesswatch.com/license/)에서 license등록을 할 수있으며
# AccessWatch를 사용하는 클라이언트 또는 도메인네임 각각을 등록해야 한다.
#
##########################################################
##### 사이트 정보 기록 #####
##########################################################

$accessLog = "/home/sspark/logs/access_log";
# 로그파일의 위치 정확히 파일이름(access_log)까지 정확히 지정해 주어야한다.
# 일반적으로는 /usr/local/lib/httpd/logs/access_log 또는
# /usr/local/apache/logs/access_log 이며
# 만약 모른다면 서버 관리자나에게 문의하거나 또는
# 다음의 명령어(find)로 확인을 할 수 있다.
# "$find / -name access_log -print"
#
$DNSlookups = 0;
# access_log에 hostname(도메인) 대신에 IP address가 기록되었다면 '1'로 셋팅한다.

$defaultPage = "index.html";
# 디렉토리만 지정했을때 찾게될 기본 문서를 지정한다.

$includeURL = ".*";
$compressdata = 1;
$compresscommand = "gzip -9fc";
$catcompresscommand = "gunzip -c";
$compresssuffix = "gz";
# gzip/gunzip이 시스템에 설치되어 있지 않다면 $compressdata = 0 로 설정한다.
# gzip이 path로 잡혀있지 않다면 절대경로로 명령을 지정해야 한다.
# 예를 든다면 eg "/usr/local/bin/gzip"

$excludeURL = ".gif|.jpg|.jpeg|.xbm";
# 분석하는 도중 count하지 않을 파일타입을 지정한다.
# 예를 들어 페이지 안에 있는 이미지파일(*.gif, *.jpg등)은
# 카운터에서 빼려고 할때 지정하는 옵션이다.

$reportBase = "/home/sspark/public_html/aw/report";
# 분석결과가 저장될 위치, 결과를 웹으로 보고자 할 때 이 디렉토리까지 지정해서 보게된다.

$siteName = "sitename(manualand)";
# "사이트 이름"으로 분석결과를 웹으로 보여줄 때 맨 왼쪽상단에 사이트이름을 보여주게 된다.

$siteBaseURL = "http://www.manualand.co.kr";
# 사이트의 기본 URL

$orgname = "orgname(MANUAL LAND)";
# "기관이름(회사이름)"으로 결과페이지에서 기관이름으로 사용하게 된다.

$orgdomain = "orgdomain(manualand.co.kr)";
# "기관 도메인"

$excludeHosts = "";
# access_log파일중 access된 것에서 제외할 호스트들을 나열한다.

##### 프로그램 옵션 #####

$maxPagesToList = -1; # sets the maximum number of entries in
$maxDomainsToList = -1; # the corresponding tables. Set to -1 to
$maxHostsToList = 15; # show all entries (may be *big*!), or
$maxRefsToList = 10; # 0 to hide the table completely.
$maxAgentsToList = 15;

# 분석결과에서 볼 수 있는 각 항목들의 최대 수치를 지정한다.
# 제한없이 모두 수용하려면 "-1"로 셋팅하고
# 해당 항목을 제외(숨김)하려면 "0"으로 셋팅한다.

$customFooter = <
# 여기에는 각 페이지마다 보여줄 꼬릿말을 지정한다.

EOM
1;
###############################################################################
########### End - AccessWatch Custom Configuration #####################
############################################################################### 


5. 접속 통계 분석 작업    Top

수정 예:
- 홈페이지디렉토리 : /home/sspark/public_html/
- accesswatch의 홈디렉토리 : /home/sspark/public_html/aw/
- 접속로그파일의 저장위치 : /home/sspark/logs/access_log
- 분석결과가 저장될 디렉토리 : /home/sspark/public_html/aw/report/

aw-parser와 aw-report파일을 열어서 perl의 경로가 맞는지 확인한다.
대부분 perl의 경로는 /usr/bin/perl 또는 /usr/local/bin/perl로 되어 있으며
# whereis perl
또는
# find / -name perl -print
라 해서 찾아본다.
그런 후
# ./aw-parser.pl
# ./aw-report.pl
해서 작업한다.
결과는 다음과 같다.

이 작업을 할 때에 발생하는 대부분의 경우는 로그파일 즉, access_log파일의 위치를 정확하게 지정하지 못해서 발생한다.
작업 후에,
URL : http://www.manualand.co.kr/aw/report/ 또는
URL : http://www.manualand.co.kr/aw/report/index.html로 확인. 


6. 분석 결과 확인    Top

● Summary : 통계의 전체적인 요약
● Pages : 각 페이지별 엑세스 건수와 통계
● Domains : 도메인을 통해 국가별 방문정보
● Hosts : 어디로부터 많이 들어왔나에 대한 건수와 통계
● Hourly : 시간대별 접속건수를 막대그래프로 보여준다.
● Days : 일별 접속건수를 막대그래프로 보여준다.

① Summary


ⓐ 총 hit 건수
ⓑ 총 access 건수
ⓒ 각 방문자들이 본 평균 페이지 수
ⓓ 각 방문자들에게 다운로드 된 평균용량
ⓔ 전체 방문건수의 유일방문건수에 호스트들의 평균방문건수
ⓕ orgname에서 지정한 곳으로 부터의 방문건수
ⓖ 외부네트워크로부터의 방문건수

② Pages


ⓐ 분석기간동안의 총 방문 호스트 수
ⓑ 각 호스트들이 본 평균 페이지 수
ⓒ 각 호스트들로 다운된 평균용량
ⓓ 각 페이지 위치에 대한 접속건수와 백분비

③ Domains


1단계에 해당하는 도메인(com, org, net, kr, jp등)별로 통계건수

④ Hosts

⑤ Hourly


ⓐ 시간대별 접속건수에 대한 막대그래프 정보
ⓑ 시간당 평균 Hit 수
ⓒ 시간당 최대 Hit 수
ⓓ 일평균 Hit 수

⑥ Days


ⓐ 일별 접속건수에 대한 막대그래프 정보와 수치정보
ⓑ 일평균 Hit 수
ⓒ 일별 최고 Hit 수
ⓓ 일별 최저 Hit 수

[출처] 세이박스 - http://www.saybox.co.kr/bbs/board.php?bo_table=board01&wr_id=27


첨부파일은 세이박스에서 다운 받으세요! ^^


리눅스 명령어

서버,보안
alias(명령어 간소화하기)
apropos(관련된 명령어 찾기)
arch(컴퓨터 종류 알기)
arp(같은 서브넷의 IP 보여주기)
at(작업 시간 정하기)
atd(계획성 있는 작업 실행하기)
awk(특정 패턴 문자 처리하기)
a2p(펄 파일로 바꾸기)
badblocks(배드 블럭 검사하기)
bc(계산기)
biff(메일 수신 소리로 확인하기)
bg(후면작업; 배경화면 설정)
bind(키나 함수 순서 결합하기)
break(루프 빠져나가기)
cal(달력보기)
builtin(내부 명령어 알아보기)
case(조건 처리하기)
cat(화면상에서 파일 보기)
cd(디렉토리 변경하기)
cfdisk(디스크 설정하기)
chattr(파일 속성 변경하기)
chfn(사용자 정보 변경하기)
chgrp(파일, 디렉토리가 속했던 그룹 바꾸기)
chmod(파일 권한 바꾸기)
chown(파일 주인 바꾸기)
chsh(지정된 셸 바꾸기)
cksum(CRC값을 점검한다)
clear(화면 청소하기)
clock(CMOS 시각을 조정하기)
cmp(파일 비교하기)
colcrt(문자 변환 필터)
colrm(열 삭제하기)
column(가로 정렬하기)
comm(파일 비교 출력하기)
command(명령어 알아보기)
continue(루프 계속돌기)
cp(파일 복사하기)
cpio(복사본 만들기)
crontab(cron을 관리한다)
csplit(파일에 서식, 규칙 정하기)
cut(필요한 필드만 출력하기)
date(날짜 보기)
dd(블럭장치 읽고 쓰기)
debugfs(ext2 파일 시스템 디버깅하기)
declare(변수 선언하기)
df(파일 시스템의 사용량 보기)
dirs(디렉토리 목록 표시하기)
dmesg(부팅 메시지 보기)
dnsdomainname(DNS 이름 출력)
domainname(NIS 이름 출력&설정)
du(디렉토리와 파일의 용량 파악하기)
dumpe2fs(파일 시스템 정보 보기)
echo(표준 출력하기)
eject(장치 해제하기)
elm(메일 관련)
enable(내부 명령어 지정)
env(환경변수 출력하기)
eval(인수 읽기)
exec(셸 명령어 실행하기)
exit(종료하기)
expand(탭을 공백으로 변환하기)
export(변수 지정하기)
e2fsck(파일 시스템 복구하기)
fc(지정된 편집기 받기)
fdformat(플로피 디스크 포맷하기)
fdisk(파티션 나누기)
fg(지정된 작업을 전면 프로세스로 시작하기)
file(파일 종류 보기)
find(파일 찾기)
finger(사용자 정보 알기)
fold(정형화하기)
fmt(정형화하기)
for(반복 실행하기)
free(메모리 사용량 알아보기)
fsck(파일 시스템 검사하기)
fstab(파일 시스템에 대한 고정적인 정보 저장하기)
ftp(파일 전송 프로그램)
fuser(프로세스 ID 출력)
getkeycodes(매핑 테이블 출력하기)
grep(특정 문자(열) 검색하기)
gzexe(실행 파일 압축하기)
gzip(압축하기)
halt(시스템 종료하기)
hash(기억해 두기; index 역할)
head(파일의 앞부분 출력하기)
help(도움말 보여주기)
host(호스트 정보 보기)
history(사용 명령어 목록보기)
hostname(서버 이름 알기)
id(계정 정보 알기)
if(조건문 실행하기)
ifconfig(랜카드에 주소 할당하기)
imolamod(모듈 설치하기)
inetd(인터넷 서비스의 최상위 데몬)
init(실행 단계 정하기)
ispell(철자법 검사하기)
jobs(수행중인 프로세스 알기)
kbd_mode(키보드 모드 출력하기)
kill(프로세스 죽이기)
klogd(커널 로그 데몬)
ldd(공유 라이브러리의 의존성 알기)
less(페이지 단위로 출력하기)
let(정규식 표현하기)
lilo(부팅하기)
ln(링크하기)
locate(패턴에 맞는 파일 찾기)
login(로그인하기)
logger(시스템 로그 기록하기)
logname(사용자 로그인명 보여주기)
logout(로그인 셸 종료하기)
look(특정 단어 검색하기)
losetup(중복 장치 확인하기)
lpd(프린트 데몬)
pq(현재 프린트 작업 상태 출력하기)
lpr(출력하기)
lprm(대기열에 있는 문서 삭제하기)
ls(디렉토리 내용보기)
llsattr(파일 시스템의 속성 보여주기)
lsdev(하드웨어 장치 출력하기)
lsmod(모듈 정보 출력하기)
mail(메일 관련)
make(컴파일하기)
man(매뉴얼 보기)
mattrib
mbadblocks
mcd
mcopy
mdel
mdeltree
mdir
mesg(메시지를 받을 수 있는지 확인하기)
mformat
minfo
mkdir (디렉토리 만들기)
mke2fs(파일 시스템 생성하기)
mkfs(파일 시스템 만들기)
mknod(특수 파일 만들기)
mkswap(스왑 영역 지정하기)
mlabel
mmd
mmount
mmove
mpartition
mount(장치 연결하기)
more(화면 단위로 출력하기)
mrd
mren
mtoolstest
mtype
mutt(메일 관련)
mv(파일 옮기기)
mzip
netstat(현재 네트웍 상황 보기)
nice(프로세스 우선 순위 변경하기)
od(8진수로 파일 보기)
passwd(암호 입력하기)
pidof(실행중인 프로그램의 프로세스 ID 찾기)
pine(메일 관련)
ping(네트웍 확인하기)
popd(pushd 취소)
ps(프로세스 상태 알기)
pstree(프로세스 상관관계 알기)
pwd(절대경로 보여주기)
quota(디스크 한계량 알기)
rarp(rarp 테이블 관리하기)
rcp(원격 호스트에 파일 복사하기)
rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)
rdate(네트웍으로 시간 설정하기)
reboot(재부팅하기)
rmmod(모듈 지우기)
readonly(읽기 전용으로 표시하기)
renice(프로세스 우선 순위 바꾸기)
reset(터미널 초기화하기)
restore(다시 저장하기)
rlogin(바로 접속하기)
rm(파일 지우기)
rmdir (디렉토리 지우기)
rpm(프로그램 추가/삭제)
rpm2cpio(rpm을 cpio로 변환하기)
route(라우팅 테이블 추가/삭제하기)
rsh(원격으로 명령어 실행하기)
rup(호스트 상태 출력하기)
rusers(호스트에 로그인한 사용자 출력하기)
rwall(호스트 사용자에게 메시지 뿌리기)
script(기록하기)
set(변수값 설정하기)
setup(시스템 관련 설정하기)
showmount(호스트의 마운트 정보 보여주기)
shutdown(전원 끄기)
sleep(잠시 쉬기)
source(스크립트 번역하기)
split(파일 나누기)
ssh(암호화된 원격 로그인하기)
stty(터미널라인 설정 보여주기)
su(계정 바꾸기)
suspend(셸 중단하기)
swapoff (스왑 해제하기)
swapon(스왑 활성화하기)
sync(버퍼 재설정하기)
syslogd(로그인 과정 설정하기)
tac(거꾸로 보기)
tail(문서 끝부분 출력하기)
talk(이야기하기)
tar(파일 묶기)
tcpdchk(tcp wrapper 설정하기)
tcpmatch(네트웍 요청에 대해 예측하기)
tee(표준 입력으로부터 표준 출력 만들기)
telnet(원격접속하기)
test(테스트하기)
times(셸에서의 사용자와 시스템 시간 출력하기)
top(cpu 프로세스 상황 보여주기)
tr(문자열 바꿔주기)
true(종료 코드 리턴하기)
type(유형 보기)
ul(밑줄 처리해서 보여주기)
ulimit(제한하기)
umask(매스크 모드 설정하기)
umount(장치 해제하기)
unalias(별명 제거하기)
uname(시스템 정보 보기)
unexpand(공백 문자를 탭으로 변환하기)
uniq(중복된 문장 찾기)
useradd(사용자 계정 만들기)
userdel(계정 삭제하기)
usermod(사용자 계정정보 수정하기)
unset(설정 변수 해제)
uptime(시스템 부하 평균 보여주기)
users(로그인된 사용자 보여주기)
w(시스템에 접속한 사용자 상황 알아보기)
wait(프로세스 기다리기)
wall(모든 사용자에게 메시지 보내기)
wc(문자, 단어, 라인수 세기)
whatis(명령어의 간단한 설명보기)
while(루프 명령어)
who(사용자 알기)
write(콘솔 상에서 간단한 메시지 보내기)
xcopy(반복적으로 복사하기)
XFree86
ypchfn(NIS에서 사용하는 chfn 명령어)
ypchsh(NIS에서 사용하는 chsh 명령어)
yppasswd(NIS에서 사용하는 passwd 명령어)
zcat(압축 파일 보기)
zcmp(압축 파일 비교하기)
zforce(강제로 gz 만들기)
zgrep(압축 상태에서 grep s)
zmore(압축 상태에서 more 실행하기)
znew(.Z 파일을 .gz로 다시 압축하기)

mail 서버 구축하기

서버,보안
설치환경은 apache, mysql, php를 소스로, paranmail은 rpm


◑ 먼저 필요한 rpm

sendmail과 imap는 꼭 있어야하는 프로그램이다.
없다면, Linux 설치 CD에서 찾아서 설치하고 시작하자.

rpm -Uvh imap*.rpm

설치가 정상적으로 됐다면
# telnet localhost 110
했을 때, 메일환경 정보를 보여준다.


◑ telnet localhost 110 시에 에러가 생긴다면~!

# vi /etc/xinetd.d/imap 해서
disable = no 라고 되어 있으면 서비스 가능,
disable = yes 라고 되어 있으면 서비스 불가능상태이다.
"yes"를 "no"라고 바꾸자.

만약, "no"라고 되어 있는데도 문자가 해결되지 않으면 방화벽쪽을 점검해보자.


◑ rpm -Uvh paran*.rpm 했을때 의존성에서 에러가 생겨 설치 되지 않는다면~!

그냥...
의존성을 무시하고 설치하자. ㅋㅋ

# rpm -Uvh --nodeps paran*.rpm

이때 폴더는 /var/www/html/에 생긴다.
원하는 곳으로 옮기자.


◑ install.php에서 메일 설정 설치시에 include 에러난다면~!

권한 에러이다.

conf 디렉토리 밑에 있는 *.conf 파일 모두 권한을 777로 변경하자.
아예, paranmail 디렉토리를 모두 777로 바꾸던가 ^^


◑ index.html에서 무진장 창 많이 뜨는 에러~!

짜증나면... 이제는 index.html 파일 열기전에 아래 수정부터 하는 것을 버릇들이자.

$MAIL_BASE 경로가 틀리면 생기는 에러이다.
# vi ./conf/webmail.conf 해서
$MAIL_BASE 의 경로를 환경에 맞게 수정하자.


◑ 여러개 도메인으로 메일서버 셋팅하고자 할 때.

① /etc/mail/access 를

localhost.localdomain RELAY
localhost RELAY
durimedia.com OK
192.168.0 RELAY
와 같이 수정한 후

# makemap hash /etc/mail/access < /etc/mail/access 한다.

② /etc/mail/sendmail.mc 를 열어서

DEAMON_OPTIONS('Port=smtp,Addr=127.0.0.1,NAME=MTA')를 찾아서 앞의 주석을 해제(comment out)하고 저장 후

# m4 /etc/mail/sendmail.mc > /etc/sendmail.cf 한다.

③ /etc/sendmail.cf 를 열어서

# SMTP DaemonOptions
O DaemonPortOptions=Name=MTA
O DaemonPortOptions=Port=587,Name=MSA,M=E 라고 수정한다.

④ /etc/mail/local-host-name 에

durimedia.com ==> 자신의 도메인을 입력한다.

⑤ tcp wrapper를 쓸 경우에는 /etc/hosts.allow에

sendmail: ALL

을 추가한다.


◑ 메일 사용시에... 주소록 창에 스크롤 에러~!

top.tle 파일에서 수정~ 이거... 파일 경로 찾느라 엄청 애먹었땅. ㅋㅋ

리눅스 rpm 사용법

서버,보안
* rpm으로 설치 및 제거
# rpm -qa
# rpm -qa | more
# rpm -qa | grep proftpd
# rpm -qc sendmail
# rpm -qi apache

-a all. 현재 설치된 모든 패키지의 목록을 보여준다.
-c config. 패키지 안의 환경 설정 파일들을 표시한다.(설정파일 어디있지?)
-d document. 패키지 안에 들어있는 문서를 보여준다.
-i info. 패키지에 대한 상세한 정보를 보여준다.
-l list. 패키지에 들어있는 파일의 목록을 표시한다.
-s state. vozlwldp 들어있는 파일의 상태를 표시한다.


# rpm -ivh package_file

-i install. 패키지 설치 명령.
-v verbose. 처리 상태를 표시한다.
-h hash. 해시 마크로 진행 상태를 보여준다.


# rpm -Uvh package_file 패키지 업그레이드

# rpm -e package_file 패키지 삭제
# rpm -e --nodeps package_file 패키지 의존성 무시 삭제

IP Address 변경 및 확인

서버,보안
* IP Address 변경 및 확인

/etc/sysconfig/network(호스트 네임, 도메인 네임, 게이트 웨이)
/etc/sysconfig/network-scripts/ifcfg-eth0(onBoot=yes, Bootproto=dhcp)
/etc/rc.d/init.d/network restart~~~!!!
/etc/dhcp.conf 파일로 모든 네트웍 정보 확인
/etc/hosts 파일등 시스템 환경화일 변경


* user 추가 후 데몬이 인식케

telnet, ftp에서 useradd 찾을려면
/etc/rc.d/init.d/proftpd restart
/etc/rc.d/init.d/network restart


* mount

# mount -t iso9660 /dev/cdrom /mnt/cdrom -> CD-rom 인식
# mount -t ext2 /dev/fd0 /mnt/floppy -> Floppy 인식
# mount -t vfat /dev/fd0 /mnt/floppy -> MS-Dos 인식

# mount /mnt/cdrom
# mount /mnt/floppy

# cd /mnt/cdrom
# cd /mnt/floppy

# umount /mnt/cdrom
# umount /mnt/floppy

리눅스 여러가지 문제점 해결 - 초보

서버,보안
* Apache 서버에서 localhost만 보이고 딴곳에서 안보일때
: 방화벽 문제.... 콘솔에서 -> ipchains -F

* mysql에서 sock 따질때
-> usr/local/bin/safe_mysqld start

* table 접근 error~!
-> grant all privileges on dbName . * to root @ "hostName"

* 프로세스 죽이기
rpm -e --nodeps mysql

* 시스템 시작시 설정 외...
ntsysv, netconfig, init5

httpd.conf 파일 번역판

서버,보안
# 이문서는 누군가가 아파치 환경설정화일 httpd.conf의
# 주석문을 한글로 번역해 놓은건데요
# 제가 와우리눅스 까치버전에 맞게끔 조금 고쳤어요
# 이 글을 복사하셔서 /etc/httpd/conf/httpd.conf에
# 그대로 쓰셔도 아무런 문제 없이 사용 하실수 있습니당.
##################################################
#
# 작성 : 김 정 균 <admin@oops.kr.net>;;
#
#############################################################
#
# 문제가 발생했을 때에는 httpd.conf (srm.conf, access.conf) 설정 파일의
# 문법을 제대로 지켰는지 먼저 점검하고 다른 아파치 관리자들에게 도움을
# 요청하는 것이 좋습니다.
#
# /usr/sbin/httpd 명령에 -t 옵션을 주면 문법만 점검합니다.
# 기타 다른 옵션에 대하여 알고 싶을 때에는 -h 옵션을 사용하십시오.
#
# 예1) 문제가 없는 경우
#
# # /usr/sbin/httpd -t
# Syntax OK
#
# 예2) 설정에 실수가 있는 경우
#
# #/usr/sbin/httpd -t
# Syntax error on line 91 of /etc/httpd/conf/httpd.conf:
# ServerType must be either 'inetd' or 'standalone'
#
#############################################################
# --
#
# 간단한 용어 정리)
#
# --
#
# Rob McCool 씨의 NCSA 서버 설정 파일에 기초한 것임.
#
# 이 파일은 아파치(Apache) 서버 주 설정 파일이다. 이 파일에 들어있는
# 설정 지시자(directive)를 통해 서버의 작동 방식을 지시한다.
# 각 지시자에 대한 자세한 정보를 원하면 http://www.apache.org/docs를
# 참고하라.
#
# 정확한 이해 없이 대충 읽어나가는 일이 없도록 하자. 여기에 적은 내용을
# 그대로 여러분의 상황에 적용시키려 하지 말라. 다음 내용은 실제 지시
# 내용을 위한 힌트라고만 생각하자. 내용에 대하여 의문이 있을 때에는
# 온라인 문서를 참조하라. 이 사실에 대하여 지금 여러분에게 충분히
# 경고해 두었음을 밝히는 바이다.
#
# 아파치 서버는 이 파일을 읽고 난 후, /home/httpd/conf/srm.conf 파일을
# 처리하고 그 다음 /home/httpd/conf/access.conf 파일을 읽는다.
# 지금 현재 이 설정 파일 안에서 ResourceConfig, AccessConfig 지시자를 사용하여
# 설정 파일 이름을 바꾸면, 변경된 이름의 설정 파일을 읽는다.
# (여기서 /home/httpd 부분은 아파치 서버의 기본 디렉토리로 대체하여
# 생각하면 된다. 예를 들어 여러분이 직접 아파치를 컴파일하여 설치하는
# 경우에는 일반적으로 /usr/local/apache 가 된다. 컴파일하여 직접 설치할
# 때에는 패키지와 충돌되지 않도록 둘 중 하나만 사용하라.)
#
# 지시자는 3 개의 기본적인 섹션으로 묶여 있다:
#
# 1. 아파치 서버 프로세스의 전반적인 작동을 제어하는 지시자
# ('global environment, 전체 환경')
#
# 2. 가상 호스트에 의해 처리되지 않는 요청을 모두 처리하는 주 서버 또는
# 기본 서버의 작동을 제어하는 지시자.
#
# 이 지시자 내용은 모든 가상 호스트의 기본값이기도 하다.
# 3. 다른 IP 주소 또는 다른 호스트 이름에 대한 요청을 처리할 가상
# 호스트 설정
#
# 설정 파일과 로그 파일 이름 : 만약 파일 이름이 "/"로 (또는 Win32 버전의
# 경우 "드라이브명:/" ) 시작하면 주어진 파일 이름 그대로를 사용한다.
# 그러나 "/" 로 시작하지 않을 때에는 ServerRoot 의 값이 그 앞에 추가된다.
# 따라서 "logs/foo.log"는 ServerRoot 값 (예를 들어 "/usr/local/apache")이
# 앞에 추가되어 서버는 최종적으로 "/usr/local/apache/logs/foo.log"를
# 사용한다.
#
#############################################################

### 섹션 1 : 전체 환경 (Global Environment) => 이곳 부터는 실제 아파치 서버의 중요한 설정부분입니다.

#
# 이 섹션에 적힌 지시자는 예를 들어 아파치 서버가 처리할 수 있는 동시
# 요청의 갯수라든지 다른 설정 파일의 이름 등 아파치 서버의 전반적인
# 작동에 영향을 미친다.
#
# 서버 유형(ServerType)은 inetd 또는 standalone 둘 중 하나이다.
# inetd 방식은 유닉스 플랫폼에서만 지원된다.
#
ServerType standalone
# => standlone타입과 inetd타입이 있으나 클라아언트의 요구에 신속한 반응을
#위해서는 standalone모드를 권장합니다.

#
# 서버 루트(ServerRoot) : 서버의 설정 파일, 에러 파일, 로그 파일이
# 기록되는 디렉토리의 최상위 경로명.
#
# 주의! 만약 서버 루트를 NFS (또는 기타 네트웍 파일 시스템) 마운트된
# 곳에 두고자 한다면 LockFile 문서를 꼭 읽어보아야 한다.
# (<URL:http://www.apache.org/docs/mod/core.html#lockfile>;;);
# 문서를 읽고 나면 앞으로 닥칠 지 모르는 몇 가지 문제점을 피할 수 있다.
#
# 디렉토리 경로 뒤에 슬래쉬(/) 문자를 쓰지 않는다!!!
#
ServerRoot "/etc/httpd"
# => 웹서버에 관련된 환경설정 파일과 에러,로고파일들이 존재하는 위치
# 주의:디레토리의 마지막에 / 를 붙이지 말것

#
# LockFile 지시자는 아파치를 USE_FCNTL_SERIALIZED_ACCEPT 또는
# USE_FLOCK_SERIALIZED_ACCEPT 옵션을 주고 컴파일한 경우, 잠금 파일을
# 경로를 지정할 때 사용한다. 이 지시자 값은 일반적으로 기본값이
# 되도록 놔둔다. 이 값을 바꾸는 경우는 로그 디렉토리가 NFS 마운트된
# 곳에 있는 경우로서 잠금 파일은 항상 네트웍 파일 시스템이 아닌
# 로컬 디스크에 저장되어야 하기 때문이다. 주 서버 프로세서의 PID 값이
# 자동으로 파일 이름 뒤에 붙는다.
#
LockFile /var/lock/httpd.lock

#
# PidFile: 서버가 시동될 때 자신의 프로세스 고유 번호를 기록할 파일
#
PidFile /var/run/httpd.pid

#
# ScoreBoardFile: 내부 서버 프로세스 정보를 기록하는데 사용하는 파일.
# 모든 아키텍쳐에서 꼭 필요한 것은 아니다. 하지만 필요하다고 생각하는
# 경우에는 하나의 아파치 프로그램을 두 번 이상 실행시키는 경우 값이
# 중복되지 않도록 해주는 것만 잊지 않으면 된다.
#
ScoreBoardFile /var/run/httpd.scoreboard

#
# 표준 설정에서 서버는 httpd.conf, src.conf, access.conf 파일을
# 차례대로 읽어나간다. 나중에 있는 2 개의 파일은 현재 아무 내용도
# 없는 빈 상태로 배포되고 있다. 왜냐하면 모든 지시자를 그냥 하나의
# 파일에 적는 것이 더욱 명료하기 때문이다. 주석으로 처리되어 있는
# 값은 기본값이다. 서버가 이 파일 내용을 무시하도록 하기 위해서는
# "/dev/null" (유닉스의 경우) 또는 "nul" (Win32) 값을 지정한다.
#
#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf

#
# Timeout: 받기/보내기 타임 아웃 시간
# 웹 브라우저에게 타임아웃 신호를 보낸 때까지의 기다리는 시간 (단위: 초)
#
Timeout 300

# KeepAlive: 지속성(persistent) 접속을 허가할 것인가 말 것인가? => 한번 연결에 대하여 한번이상의 요청을 허용할 것인가 아닌가의 여부
# (한 번의 접속에서 여러 개의 요청을 처리할 것인가 여부)
# 허가하지 않기 위해서는 "Off"로 설정한다.
# 허가하지 않는 것과 허가하는 것과의 효율 차이는 매우 크다.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

#
# Server-pool size regulation. Rather than making you guess how many
# server processes you need, Apache dynamically adapts to the load it
# sees --- that is, it tries to maintain enough server processes to
# handle the current load, plus a few spare servers to handle transient
# load spikes (e.g., multiple simultaneous requests from a single
# Netscape browser).
#
# It does this by periodically checking how many servers are waiting
# for a request. If there are fewer than MinSpareServers, it creates
# a new spare. If there are more than MaxSpareServers, some of the
# spares die off. The default values are probably OK for most sites.
#
MinSpareServers 5
MaxSpareServers 20

#
# Number of servers to start initially --- should be a reasonable ballpark
# figure.
#
StartServers 5

#
# Limit on total number of servers running, i.e., limit on the number
# of clients who can simultaneously connect --- if this limit is ever
# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
# It is intended mainly as a brake to keep a runaway server from taking
# the system with it as it spirals down...
#
MaxClients 150

#
# MaxKeepAliveRequests: 지속성 접속 기간 동안 처리할 수 있는 최대 요청 갯수
# 0 을 넣으면 무한대이다. 높은 성능을 내기 위해서 높은 값을 추천한다.
#
MaxRequestsPerChild 1000

#
# Listen: 아파치를 기본값 이외에도 특정 IP 주소 또는 포트에 연결하도록
# 해준다. <VirtualHost> 지시자도 참고하라.
#
#Listen 3000
#Listen 12.34.56.78:80
Listen 80

#
# BindAddress: 이 옵션을 사용하여 가상 호스트를 지원할 수 있다.
# 이 지시자를 이용하여 서버가 귀기울일 IP 주소를 지시할 수 있다.
# "*", IP 주소, 또는 완전한 인터넷 도메인 이름을 사용할 수 있다.
# <VirtualHost>, Listen 지시자도 참고하라.
#
#BindAddress *
#=> 가상 호스트, 즉 실제 리얼 IP 한 개에 여러개의 도메인 네임을
#등록시킬 경우 ( 이방법으로 호스팅 사업을 하는 사업체가 많다.)
#자세한 것은 맨아래 <VirtualHost> 부부을 참고하십시요.
#버츄얼 호스트를 하실려면 #을 삭제하십시요.

#
#동적 공유 객체(Dynamic Shared Object, DSO) 지원
#
# DSO 방식으로 만들어진 모듈의 기능을 사용하기 위해서는 그 기능에 관련된
# 지시자를 사용하기에 앞서 알맞게 `LoadModule' 지시자로 모듈을
# 지시해주어야 한다. DSO 작동방식에 대하여 자세히 알고 싶은 사람은
# 아파치 1.3 배포 파일의 README.DSO 를 읽어보라. 여러분이 갖고 있는
# httpd 바이너리에 내장된(정적으로 링크되어 항상 사용가능한) 모듈 목록을
# 알고 싶을 때에는 `httpd -l' 명령을 실행한다.
# *주의* 모듈을 적재하는 순서는 매우 중요하다. 전문가의 조언 없이
# 아무렇게나 순서를 바꾸지 말라.
#
# 예 :
# LoadModule foo_module modules/mod_foo.so
#
# 모듈 관련 문서는 HTML 형식으로 "/home/httpd/manual/mod" 에 놓아두었다.
#
# *주의* LoadModule 설정을 하나라도 바꾸었다면 LoadModule 설정 뒤에 따라
# 나오는 AddModule 설정도 똑같이 바꾸어주기 바란다.
#
#LoadModule mmap_static_module modules/mod_mmap_static.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule env_module modules/mod_env.so
LoadModule config_log_module modules/mod_log_config.so
LoadModule agent_log_module modules/mod_log_agent.so
LoadModule referer_log_module modules/mod_log_referer.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule status_module modules/mod_status.so
LoadModule info_module modules/mod_info.so
LoadModule includes_module modules/mod_include.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule asis_module modules/mod_asis.so
LoadModule imap_module modules/mod_imap.so
LoadModule action_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule anon_auth_module modules/mod_auth_anon.so
LoadModule db_auth_module modules/mod_auth_db.so
#LoadModule digest_module modules/mod_digest.so
#LoadModule proxy_module modules/libproxy.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule example_module modules/mod_example.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule bandwidth_module modules/mod_bandwidth.so
#LoadModule put_module modules/mod_put.so

#
# 다음 모듈은 아파치 펄 모듈로서 CGI 스크립트로 펄을 많이 사용하는
# 사람들에게 펄 코드 실행 속도의 향상을 가져다 줍니다.
#
# 주의 : 설정을 바꾼 후 한 가지 할 일이 더 있다.
# <Location /perl> ... </Location>
# 위와 같은 설정을 찾아서 펄 스크립트를 사용할 수 있는
# 디렉토리를 설정해주어야 한다.
#
<IfDefine HAVE_PERL>
LoadModule perl_module modules/libperl.so
</IfDefine>

#
# 확장 모듈
#
<IfDefine HAVE_PHP>
LoadModule php_module modules/mod_php.so
</IfDefine>

#
# 다음 모듈은 MySQL 데이터베이스와 더불어 서버 스크립팅 언어로 인기를
# 누리고 있는 PHP3 모듈입니다.
#
<IfDefine HAVE_PHP3>
LoadModule php3_module modules/libphp3.so
</IfDefine>
<IfDefine HAVE_PHP4>
LoadModule php4_module modules/libphp4.so
</IfDefine>
<IfDefine HAVE_DAV>
LoadModule dav_module modules/libdav.so
</IfDefine>
<IfDefine HAVE_ROAMING>
LoadModule roaming_module modules/mod_roaming.so
</IfDefine>
<IfDefine HAVE_SSL>
LoadModule ssl_module modules/libssl.so
</IfDefine>

#
# 모듈 실행 순서를 정확하게 하기 위해 사용 가능한 모듈(정적 또는 공유
# 모듈 포함)로부터 완전한 목록을 다시 만들어 둔 것이다.
# [LOADMODULE 섹션을 하나라도 수정했다면 이 부분도 역시 알맞게 수정하라]
#
ClearModuleList
#AddModule mod_mmap_static.c
AddModule mod_vhost_alias.c
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_log_agent.c
AddModule mod_log_referer.c
#AddModule mod_mime_magic.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
#AddModule mod_speling.c
AddModule mod_userdir.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_auth_anon.c
AddModule mod_auth_db.c
#AddModule mod_digest.c
#AddModule mod_proxy.c
#AddModule mod_cern_meta.c
AddModule mod_expires.c
AddModule mod_headers.c
#AddModule mod_usertrack.c
#AddModule mod_example.c
#AddModule mod_unique_id.c
AddModule mod_so.c
AddModule mod_setenvif.c
#AddModule mod_bandwidth.c
#AddModule mod_put.c
<IfDefine HAVE_PERL>
AddModule mod_perl.c
</IfDefine>
<IfDefine HAVE_PHP>
AddModule mod_php.c
</IfDefine>
<IfDefine HAVE_PHP3>
AddModule mod_php3.c
</IfDefine>
<IfDefine HAVE_PHP4>
AddModule mod_php4.c
</IfDefine>
<IfDefine HAVE_DAV>
AddModule mod_dav.c
</IfDefine>
<IfDefine HAVE_ROAMING>
AddModule mod_roaming.c
</IfDefine>
<IfDefine HAVE_SSL>
AddModule mod_ssl.c
</IfDefine>

#
# ExtendedStatus 지시자는 "server-status" 처리기가 호출되었을 때
# 아파치가 "매우 자세한" 상태 정보를 생성시킬 것인지
# (ExtendedStatus On) 아니면 매우 기본적인 정보만 생성시킬 것인지를
# (ExtendedStatus Off) 제어한다. 기본값은 Off 이다.
#
#ExtendedStatus On

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

### 섹션 2: '주(Main)' 서버 설정

#
# 이 섹션에 있는 지시자는 <VirtualHost> 정의에 의해 처리되지 않는
# 모든 요청에 응답할 '주' 서버가 사용할 값을 정한다.
# 이 값들은 또한 이 파일 뒷 부분에서 정의할 모든 <VirtualHost>
# 컨테이너의 기본값을 제공하기도 한다.
#
# 여기 나오는 모든 지시자는 <VirtualHost> 컨테이너 안에서도 사용할
# 수 있으며 그 안에서 사용되면 해당 가상 호스트에 대하여 전체
# 기본값을 무시하고 새롭게 정한 값이 채택된다.
#
#
# 만약 ServerType ('Global Environment' 섹션에서 설정)이 "inetd"인
# 경우, inetd 설정 내용을 따르기 때문에 다시 몇 가지 지시자는
# 아무런 효력을 발휘하지 않는다.
# ServerAdmin 지시자까지 그냥 건너뛴다.
#
#
# Port: 독립실행형(standalone) 서버가 요청을 기다리는 포트.
# 1023 번보다 낮은 번호의 포트에 대해서는 httpd가 처음에는
# root 권한으로 실행되어야 한다.
#
Port 80
# => 웹서버의 포트번호 (아파치 웹서버는 80을 기본포트로 합니다.)

#
# httpd가 다른 사용자 또는 그룹 권한으로 실행되게 하려면 우선은
# httpd가 root 사용자 권한으로 실행되고 나서 설정한 다른 사용자
# 권한으로 전환해야 한다.
#
# User/Group: httpd가 실행된 권한의 사용자/그룹의 이름(또는 #번호).
# . SCO (ODT 3)에서는 "User nouser"와 "Group nogroup"을 사용한다.
# . UPUX 에서는 nobody로 실행하는 경우 공유 메모리를 사용할 수
# 없을 것이다. 이 때는 www 등의 사용자를 만들고 그 사용자 권한으로
# 실행되도록 한다.
# 주의) 몇몇 커널들은 60000 이상의 (unsigned) 그룹 값을 설정하면
# setgid(Group), semctl(IPC_SET) 함수를 거부한다.
# 이런 시스템에서는 Group #-1을 사용하지 말라!
#
User nobody
Group nobody
# => 웹서바를 실행할 때 소유권을 갖는 사용자와 그룹
# * 주의 : 사용자와 그릅을 root로 하면 보안상 위험!
#
# ServerAdmin: 서버에 문제가 발생했을 때 메일을 보낼 메일 주소.
# 이 주소는 예를 들어 에러 문서와 같이 서버가 생성하는 페이지에
# 나타날 것이다.
#
ServerAdmin admin@yourdomain.co.kr

#
# ServerName은 클라이언트 프로그램에게 돌려주는 서버 이름이 다른 경우
# 호스트 이름을 설정할 수 있게 해준다. (예를 들어, 호스트의 실제 이름이
# 아닌 'www'를 사용하도록 하는데 사용할 수 있다.)
#
# 주의: 호스트 이름을 아무렇게나 만들어선 안된다. 이 이름은 여러분의
# 호스트에 주어진 타당한 DNS 이름이어야 한다. 잘 모르겠으면 네트웍
# 관리자에게 문의하라.
# 호스트가 등록된 DNS 이름을 갖고 있지 않는 경우에는 이 곳에 IP 주소를
# 적는다. 어찌 되었든 IP 주소를 사용하여(예를 들어 http://123.45.67.89/)
# 접속할 수 있다. 이런 식으로 해서 리다이렉션이 작동하도록 할 수 있다.
#
#ServerName localhost

#
# DocumentRoot: 제공할 문서의 상위 디렉토리.
# 기본적으로 모든 요청은 이 디렉토리로부터 처리된다. 하지만
# 심볼릭 링크나 앨리어스(alias)를 사용하여 다른 위치를 가리키도록
# 할 수 있다.
#
DocumentRoot "/var/www/html"
# 와우리눅스 까치버젼은 "/var/www/html"

#
# Each directory to which Apache has access, can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# permissions.
#
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# 다음 내용은 여러분이 설정한 DocumentRoot 값으로 변경해서 사용한다.
#
<Directory "/var/www/html">
# => 브라우저에서 도메인 주소를 쳤을 경우 index.html파일이 위치하는 디렉토리

#
# 다음 값에는 "None", "All", 또는 "Indexes : index.html이 없을 경우
# 디렉토리를 보여 줄 것인지를 결정", "Includes : 서버측의 SSI를 허용할 것인지를 결정",
# "FollowSymLinks : 서버가 디렉토리의 심볼릭 링크를 따를 것인가를 결정"
# "ExecCGI :cgi프로그램을 실행 시킬건질 결정", "MultiViews"의 자유로운 조합이
# 가능하다.
#
# "MultiViews" 만큼은 "Options All"을 사용한다 할 지라도 명시적으로
# 적어야만 작동한다는 사실을 알아두자.
#
Options Indexes Includes FollowSymLinks

#
# 다음은 각 디렉토리에 위치한 .htaccess 파일에서 어떤 옵션을
# 마음대로 제어할 수 있는지 결정한다.
# "All" 또는 "Options", "FileInfo", "AuthConfig", "Limit"의 자유로운
# 결합이 가능하다.
#
AllowOverride None

#
# 서버로부터 자료를 얻어갈 수 있는 위치를 제어한다.
#
#Order allow,deny
# > CGI를 실행시킬려면 #표시하여야 함
Allow from all
</Directory>

#
# UserDir: ~user 요청을 받았을 때 사용자의 홈 디렉토리 뒤에 추가할
# 디렉토리 이름.
#
#

# 주의 : 알짜 리눅스 시스템에서는 사용자가 자신의 홈 디렉토리에 public_html
# 디렉토리를 만들어도 외부에서 홈 페이지를 볼 수 없다.
# 왜냐하면 각 계정 홈 디렉토리에 대한 보안을 중요하게 생각했기 때문에
# 홈 디렉토리에 대하여 사용자 계정과 사용자 자신의 그룹 이외에는
# 아무런 접근 허가권도 갖고 있지 않기 때문이다. =>
# 초기의 계정 디렉토리의 퍼미션은 644입니다.
#
# 개인 홈 디렉토리를 가질 사람은 chmod a+x ~ 명령을 일단 실행해주어
# (보통) nobody 권한의 아파치 프로세스가 홈 디렉토리에 접근할 수
# 있도록 허가해주어야 한다.
# 물론 public_html과 홈 페이지 파일에 대하여 모든 사용자가 최소한
# 읽기 권한은 갖도록 설정해주어야 한다.
#
UserDir public_html www web htdocs

#
# UserDir 디렉토리에 대한 접근을 제어한다. 다음은 사용자 홈 페이지에
# 대하여 읽기만 가능하도록 한 예제 설정 내용이다. 참고 자료로
# 사용하기 바란다.
#
#<Directory /home/*/public_html>
# =>글<Directory "/home/httpd/html">을 참조하세요!
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Options Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
# Order deny,allow
# Deny from all
# </Limit>
#</Directory>

#
# DirectoryIndex: 준비된 HTML 디렉토리 인덱스로 사용할 파일이나
# 파일 목록의 이름을 나열한다. 여러 개를 나열할 때는 스페이스로
# 구분한다.

DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.cgi
# => 브라우저가 맨처음 홈페이지 디렉토리에서 찾을 파일

#
# AccessFileName: 디렉토리에 대하여 접근 제어 정보 내용을
# 담고 있을 파일 이름
#
AccessFileName .htaccess


#
# 다음 행은 웹 브라우져가 .htaccess 파일을 접근할 수 없도록 하는
# 설정이다. .htaccess에는 인증 정보가 들어있는 경우가 빈번하므로
# 보안 상 이유로 이 파일에 대한 접근은 불허해야 한다.
# 웹 방문객들이 이 파일을 보게 하고 싶으면 다음 행들을 주석 처리하라.
# 만약 AccessFileName 설정을 다른 파일명으로 바꾸었다면 알맞게
# .htaccess를 그 이름으로 바꾸어준다.
#
<Files ~ "^.ht">
Order allow,deny
Deny from all
</Files>

#
# CacheNegotiateDocs: 기본적으로 아파치는 내용에 따라 협상된 문서에
# 대해서는 "Pragma: no-cache" 내용을 전송한다. 이 행은 프록시 서버로
# 하여금 문서를 캐쉬하지 않도록 요청한다. 다음 행의 주석을 풀면
# 이 기능을 해제하고 모든 프록시가 문서들을 캐쉬할 수 있도록 한다.
#
#CacheNegotiatedDocs

#
# UseCanonicalName: (1.3 버전에 새롭게 등장) 이 설정을 켜두면,
# 아파치가 자기 참조 URL(반응이 오고 있는 서버를 다시 가리키는
# URL)을 만들 필요가 있을 때마다 "공식적인" 이름을 만들기 위해
# ServerName과 Port를 사용한다. 그렇지 않으면 아파치는 가능한 한
# 클라이언트가 제공한 호스트이름:포트 값을 사용한다.
# 이 설정은 CGI 스크립트의 SERVER_NAME, SERVER_PORT에도 영향을
# 미친다.
#
UseCanonicalName On

#
# TypesConfig 는 mime.types 파일 또는 이에 해당하는 파일을 찾을
# 위치를 결정한다.
#
TypesConfig /etc/mime.types

#
# DefaultType이란 파일 확장자와 같은 것을 통해 MIME 타입을 알 수 없는
# 문서에 대하여 사용할 기본 MIME 타입을 말한다. 여러분의 서버에 주로
# 텍스트나 HTML 문서가 많다면 "text/plain"을 쓰는 것이 좋다.
# 대부분이 실행 프로그램이나 이미지 등 바이너리인 경우에는
# 웹 브라우져가 텍스트라고 생각하여 바이너리 파일을 화면에 표시하지
# 않도록 하기 위해 "application/octet-stream"를 적는다.
#
DefaultType text/plain

#
# mod_mime_magic 모듈을 사용하면 파일의 내용을 가지고 파일의 타입에
# 힌트를 얻는다. MIMEMagicFile 지시자를 사용하여 모듈에게 힌트
# 정보가 저장되어 있는 파일을 설정한다.
# mod_mime_magic은 기본 서버의 일부가 아니다.(따라서 LoadModule
# 설정을 사용하여 모듈을 추가해야 한다.) 또는 서버를 다시 컴파일해서
# mod_mime_magic을 추가해야 한다. 그렇기 때문에 <IfModule> 컨테이너에
# 포함되어 있는 것이다. 다음 설정은 모듈이 서버에 포함되어 있을 때에만
# MIMEMagicFile 지시자를 처리하도록 해준다.
#
<IfModule mod_mime_magic.c>
MIMEMagicFile /usr/share/magic
</IfModule>

#
# HostNameLookups: 클라이언트의 이름 또는 IP 주소만을 기록할 지 여부.
# 예를 들어 www.apache.org (on) 또는 204.62.129.132 (off)
# 기본값이 off 인 이유는 각 클라이언트 요청이 올 때마다 최소한 1 번
# 이상의 네임 서버 요청이 발생하기 때문이다. 그러나 꼭 필요한 경우에는
# 이 기능을 켜둔다.
#
HostnameLookups Off
# => 이 기능을 켜두면 단 몇 달 사이에 로그 파일일이 엄청나게 불어난다.

#
# ErrorLog: 에러 기록 파일의 위치.
# <VirtualHost> 컨테이너 안에서 ErrorLog 설정을 하지 않으면
# 그 가상 호스트에 관련된 에러 메시지도 역시 이 곳에 기록된다.
# <VirtualHost> 컨테이너 안에서 에러 로그 파일을 정의하면
# 관련된 에러 메시지는 그 파일로 저장된다.
#
ErrorLog /var/log/httpd/error_log

#
# LogLevel: error_log에 기록될 메시지 분량을 제어한다.
# debug, info, notice, warn, error, crit, alert, emerg 등의 값이 가능하다.
#
LogLevel warn

#
# 다음 지시자는 CustomLog 지시자(아래 참고)에서 사용할 몇 가지
# 형식에 대한 별명을 정의한다.
#
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

#
# 접근 로그 파일의 위치와 형식(공통 로그파일 형식)
# <VirtualHost> 컨테이너 안에서 접근 로그파일 설정을 하지 않으면
# 모든 기록이 이 파일에 남게 된다. 이와 반대로 각 <VirtualHost> 마다
# 접근 로그파일을 정의하면 모든 처리가 바로 그 파일에 기록된다.
#
CustomLog /var/log/httpd/access_log common
# => 가상 호스트 각 도메인 디렉토리내에 로그파일을 두려 할경우

#
# 에이전트 로그파일과 참조자(referer) 로그파일을 갖기 위해서는
# 다음 지시 내용의 주석 처리를 해제하라.
#
# 여기서 에이전트란 여러분의 사이트에 방문하는 브라우져를 말한다.
# 에이전트 로그를 남기면 여러분의 사이트에 방문하는 브라우져의 종류에 대한
# 통계를 낼 수 있다.
#
# 참조자란 주로 배너 광고주에게 중요한 것으로서 여러분의 사이트 바로
# 직전에 방문한 사이트를 말한다.
#
#CustomLog /var/log/httpd/referer_log referer
#CustomLog /var/log/httpd/agent_log agent

#
# 하나의 로그파일에 접근, 에이전트, 참조자 정보를 다 저장하기 위해서는
# (통합 로그파일 형식) 다음 지시 내용을 사용하라.
#
# 몇 달만 운영해도 접속이 많은 사이트에서는 combined 로그 파일이 어마어마하게
# 커져서 루트 파일 시스템을 꽉 채워 버리는 일이 발생할 수 있다!
#
#CustomLog /var/log/httpd/access_log combined

#
# 부차적으로 서버가 생성하는 페이지(에러 문서, FTP 디렉토리 목록,
# mod_status, mod_info 출력 등, 그러나 CGI 생성 문서는 제외)에
# 서버 버전과 가상 호스트 이름을 포함하는 행을 추가하도록 한다.
# "Email"로 설정하면 ServerAdmin으로의 mailto: 링크를 포함한다.
# On | Off | EMail 중 하나로 설정한다.
#
ServerSignature On

#
# Aliases: 필요한 만큼의 별칭을 만들어 사용한다.(제한 없음)
# 홈페이지의 링크와 같다면 비유가 될까 ?..... 형식은 다음과 같다.
# Alias 가짜이름 실제이름
#
# 가짜 이름 뒤에 / 를 포함하면 아파치 서버는 URL에도 / 이 있어야
# 처리함을 잘 알아두자. 따라서 "/icons"는 별칭 처리되지 않고
# "/icons/"만 별칭 처리된다.
#
Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

#
# ScriptAlias: 서버 스크립트를 포함하는 디렉토리를 제어한다.
# ScriptAlias는 근본적으로 Alias와 같으나 가리키고 있는 실제 디렉토리
# 안에 들어있는 문서를 실행 프로그램으로 취급하여 실행한다.
# 맨 뒤에 붙는 "/" 에 대한 규칙은 Alias와 마찬가지이다.
#
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
# => 특정 디렉토리에서만 CGI스크립트가 실행 되길 원할 경우
<Directory /home/*>
Options ExecCGI Includes Indexes FollowSymLinks
</Directory>

#
# "/home/httpd/cgi-bin" 부분은 ScriptAlias로 별칭 처리된 실제 CGI
# 디렉토리로 설정해야 한다.
#
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

#
# Redirect를 사용하면 서버의 이름공간에 존재했으나 현재에는 존재하지 않는
# 문서에 대하여 클라이언트에게 통보할 수 있도록 해준다. 이렇게 함으로써
# 위치가 변한 새로운 문서를 어디에서 찾을 수 있는지 클라이언트에게
# 알려줄 수 있다.
# 형식: Redirect 예전URI 새URI
#

#
# 서버가 생성하는 디렉토리 목록의 표시 상태를 제어하는 지시자.
#

#
# FancyIndexing은 예쁜 디렉토리 목록 또는 표준적인 디렉토리 목록 여부를 결정한다.
#
IndexOptions FancyIndexing

#
# AddIcon으로 시작하는 지시자는 서버에게 다양한 파일, 파일명 확장자에
# 대하여 어떤 아이콘을 보여 줄 것인지 말해준다. 이 값들은
# FancyIndexing을 사용하는 경우에만 해당된다.
#
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

#
# DefaultIcon이란 명시적인 아이콘을 갖고 있지 않는 파일에 대한
# 기본 아이콘 파일을 설정한다.
#
DefaultIcon /icons/unknown.gif

#
# AddDescription은 서버 자동 생성 인덱스의 파일명 뒤에 간단한 설명을
# 넣을 때 사용한다. FancyIndexing을 사용할 때에만 보인다.
# 형식: AddDescription "설명" 화일명
#
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz

# META 태그를 사용하여 Content-type의 charset을 설정하지 않은
# 문서에 대하여 기본 문자셋을 iso-8859-1 로 해 버리는 패치에
# 대한 설정 (한글 사용을 위해서는 어쩌면 필요한 설정일지도
# 모른다. 일단 문제가 없으면 그냥 놔두는 것도 괜찮을지 모르겠지만
# 문제가 된다면 설정을 해보는 것도 괜찮을것 같다. 일단 나의 테스트
# 로는 euc-kr로의 설정은 문제가 발생한다. -- 패키저 주^^)
AddDefaultCharset Off
#AddDefaultCharset euc-kr

#
# ReadmeName은 서버가 디렉토리 목록 뒤에 내용을 덧붙여 넣을 README 파일의
# 이름을 설정한다.
#
# HeaderName은 디렉토리 인덱스 앞에 내용을 덧붙일 파일명을 설정한다.
#
# 서버는 먼저 name.html을 찾고 그것이 있으면 그 내용을 포함한다.
# 만약 없다면 서버는 name.txt 파일을 찾고 평범한 텍스트 내용으로
# 추가한다.
#
ReadmeName README
HeaderName HEADER

#
# IndexIgnore는 디렉토리 인덱싱에 있어 목록에서 제외시킬 파일명을 설정한다.
# 쉘 스타일의 와일드 카드를 사용할 수 있다.
#
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

#
# AddEncoding은 특정 브라우져(모자익/X 2.1+)로 하여금 자료를 받으면서
# 정보의 압축을 풀 수 있도록 해준다. 주의: 모든 브라우져가 이 기능을
# 지원하는 것은 아니다. 이름이 유사하기는 하지만 다음부터 나오게 될
# Add로 시작하는 지시자들은 FancyIndexing과는 관련이 없다.
#
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
<IfModule mod_negotiation.c>

#
# AddLanguage는 문서의 언어를 명시한다. 내용 협상 과정을 통해 브라우져가
# 이해할 수 있는 언어의 문서를 제공하는 것이 가능하다.
# 접미어(suffix)는 언어 키워드와 꼭 같은 필요는 없다. 예를 들어
# 폴란드어(Polish)로 된 문서는 네트웍 표준 언어 코드가 pl 이지만
# 펄 스크립트와 확연히 구별하기 위해 "AddLanguage pl .po"라고 사용한다.
#

AddLanguage ko .ko
AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it

#
# LanguagePriority는 내용 협상 중 동점이 발생하는 경우 언어 우선권을
# 부여한다. 언어의 우선권을 내림차순으로 나열하면 된다.
#
LanguagePriority en fr de
</IfModule>

#
# AddType를 사용하면 mime.types 파일 수정없이 MIME 설정을 할 수 있고
# 또는 어떤 파일들에 대하여 특정 타입으로 처리하도록 할 수 있다.
#
# php4 module이 설치되었을 경우 아래의 설정에 의해 사용을 할수 있도
# 록 한다.
#
<IfModule mod_php4.c>
AddType application/x-httpd-php .php4 .php3 .phtml .php
AddType application/x-httpd-php-source .phps
</IfModule>

# php3의 경우
<IfModule mod_php3.c>
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
</IfModule>

# 다음은 PHP/FI (PHP2)를 위한 것입니다.
<IfModule mod_php.c>
AddType application/x-httpd-php .phtml
</IfModule>

AddType application/x-tar .tgz

#
# AddHandler를 사용하면 특정 파일 확장자와 "처리기"를 연결하거나
# 특정 파일 타입에 특정 동작(action)을 연결할 수 있다.
# 서버에 내장되어 있거나 또는 Action 명령을 사용하여 추가할 수
# 있다.(아래 참고)
#
# 서버 측 포함(SSI) 또는 ScriptAlias 처리된 디렉토리 외부에
# 존재하는 CGI 스크립트를 사용하고 싶을 때는 다음 내용의
# 주석을 없앤다.
#
# CGI 스크립트를 사용하기 위해:
#
AddHandler cgi-script .cgi .pl

#
# 서버 처리 HTML 파일 사용하기 위해:
#
AddType text/html .shtml
AddType text/html .htm
AddHandler server-parsed .shtml

#
# 아파치의 send-asis HTTP 파일 기능을 사용하려면...
#
#AddHandler send-as-is asis

#
# 서버 처리 이미지 맵 파일을 사용하려면...
#
AddHandler imap-file map

#
# type map을 사용하려면...
#
#AddHandler type-map var
#

#
# perl 모듈을 사용하기 위한 설정
#
<IfModule mod_perl.c>
Alias /perl/ /home/httpd/perl/
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>

#
# Action을 사용하면 매칭되는 파일이 호출될 때마다 그 미디어 타입에 맞는
# 스크립트를 시행시킬 수 있다. 빈번하게 사용되는 CGI 파일 프로세서에
# 대하여 반복적으로 URL을 사용하지 않아도 된다.
# Format: Action media/type /cgi-script/location
# Format: Action handler-name /cgi-script/location
#

#
# MetaDir: 아파치 서버가 메타 정보 파일을 찾을 디렉토리 이름.
# 이 파일에는 문서를 보낼 때 추가하고자 하는 추가 HTTP 헤더 정보가
# 들어있다.
#
#MetaDir .web

#
# MetaSuffix: 메타 정보를 담고 있는 파일의 접미어를 설정한다.
#
#MetaSuffix .meta

#
# 사용자 정의 에러 반응 메시지 (아파치 스타일)
# 다음 3 가지 방법으로 가능하다.
#
# 1) 보통의 텍스트
#ErrorDocument 500 "The server made a boo boo.
# 주목: " 표시는 텍스트임을 알려주는 것으로서 그 자체는 출력되지 않는다.
#
# 2) 지역적인 방향 전환
# ErrorDocument 404 /missing.html
#
# 지역적 URL인 /missing.html로 방향 전환하기
# ErrorDocument 404 /cgi-bin/missing_handler.pl
#
# 주목: 스크립트나 SSI로 방향 전환시킬 수 있다.
# ErrorDocument 401 /401.html
# ErrorDocument 403 /403.html
# ErrorDocument 404 /404.html
# ErrorDocument 500 /500.html
#
#
# 3) 외부 방향 전환
# ErrorDocument 402 http://some.other_server.com/subscription_info.html
# 주목: 원래 요청과 관련있는 환경 변수의 상당수가 스크립트에
# 전달되지 못한다는 점을 알고 있어야 한다.
#
# 다음 지시자는 보통의 HTTP 반응 방식을 수정한다.
# 첫번째 것은 네스케이프 2.x 또는 그를 흉내내는 브라우져에 대하여
# KeepAlive 기능을 쓰지 않도록 한다. 이 브라우져들은 KeepAlive 구현에
# 문제점을 갖고 있기 때문이다.
# 두번째 것은 HTTP/1.1을 잘못 구현하였고 301 또는 302 (redirect) 응답에
# 대하여 KeepAlive를 제대로 지원하지 못하는 마이크로소프트 인터넷
# 익스플로러 4.0b2를 위한 것이다.
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0

#
# 다음은 기본적인 1.1 응답도 제대로 처리하지 못함으로써 HTTP/1.1 스펙을
# 위반하고 있는 브라우져에 대하여 HTTP/1.1 응답을 하지 않도록 한다.
#
BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0

#
# 다음은 WebZIP, Teleport 등의 긁어가기 program을 막기 위한 설정 이다.
BrowserMatch "WebZIP" no_access
BrowserMatch "Teleport" no_access
BrowserMatch "Teleport Pro/1.29" no_access
BrowserMatch "NamoWebEditor" no_access
BrowserMatch "WebTrack-HTTPP" no_access
BrowserMatch "WebSymmetrix" no_access
#

# perl 모듈을 사용하기 위한 설정
<IfModule mod_perl.c>
Alias /perl/ /var/www/perl/
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>

#
# Allow http put (such as Netscape Gold's publish feature)
# Use htpasswd to generate /etc/httpd/conf/passwd.
# You must unremark these two lines at the top of this file as well:
#LoadModule put_module modules/mod_put.so
#AddModule mod_put.c
#
#Alias /upload /tmp
#<Location /upload>
# EnablePut On
# AuthType Basic
# AuthName Temporary
# AuthUserFile /etc/httpd/conf/passwd
# EnableDelete Off
# umask 007
# <Limit PUT>
# require valid-user
# </Limit>
#</Location>

#
# http://servername/server-status을 통해 서버 상태 보고를 허용한다.
# 웹브라우저에서 아파치의 상태를 볼수 있게 하는 기능
# 여기서 "localhost" 부분을 허용할 도메인으로 바꿔 사용하라.
#
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

#
# http://servername/server-info를 통하여 원격 서버 설정 보고를 허용한다.
# 마찬가지로 웹 브라우저에서 서버설정을 볼 수 있다.
# (mod_info.c가 적재되어 있어야 한다.)
# 여기서 "localhost" 부분을 허용할 도메인으로 바꿔 사용하라.
#
#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

# Allow access to local system documentation from localhost
Alias /doc/ /usr/share/doc/
<Location /doc>
order deny,allow
deny from all
allow from localhost
Options Indexes FollowSymLinks
</Location>

#
# 1.1 버전 이전의 오래 된 버그를 악용하려는 사람들이 있다는 보고를 받았다.
# 이 버그는 아파치 일부분으로 제공한 CGI 스크립트와 연관있다.
# 이 부분의 주석 처리를 없애면 이 버그를 악용하는 공격이 있을 때
# phf.apache.org 상의 기록 스크립트로 방향 전환시킬 수 있다.
# 또는 support/phf_abuse_log.cgi 스크립트를 사용하여 여러분 직접 기록할
# 수도 있다.
#
<Location /cgi-bin/phf*>
Deny from all
ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>

#
# 프록시 서버 지시자. 프록시 서버 기능을 작동시키려면 다음 행의
# 주석을 해제시켜준다.
#
#<IfModule mod_proxy.c>
#ProxyRequests On
#
#<Directory proxy:*>
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Directory>

#
# HTTP/1.1 "Via:" 헤더를 처리할 것인지 여부를 결정한다.
# ("Full"은 서버 버전을 포함하고 "Block"은 나가는 모든 자료에서
# Via: 헤더를 제거한다.)
# Off | On | Full | Block 중 하나의 값을 지정한다.
#
#ProxyVia On

#
# 캐쉬 기능도 사용하기 위해서는 다음 행의 주석을 풀어준다:
# (CacheRoot가 없으면 캐쉬하지 않음)
#
#CacheRoot "/var/cache/httpd"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com

#</IfModule>
#
# 프록시 설정 끝
#
#############################################################

### 섹션 3: 가상 호스트 => 실제 IP 주소 1개에 여러개의 도메인 네임을 등록시킬 때
# 예) 203.237.102.12라는 주소에 azim.co.kr 과 linux.co.kr 과 joayo.net등등
# 여러개의 도메인을 등록 시킬때.
#
# VirtualHost: 여러분의 리눅스 박스에 여러 개의 도메인/호스트이름을
# 관리하고 싶다면 각각에 대하여 VirtualHost 컨테이너를 설정한다.
# 가상 호스트를 설정하기에 앞서 자세한 설명을
# <URL:http://www.apache.org/docs/vhosts/>;;에 들러 읽어보기 바란다.
# 가상 호스트 설정 내용을 점검해보기 위해서는 아파치를 실행할 때
# 명령행 옵션으로 '-S'를 사용한다.

#
# 이름 기반의 가상 호스트를 사용하려면 사용할 IP 주소 (최소 1 개,
# 그리고 포트 번호)를 정의해주어야 한다.
#
# 경고 : 아파치 1.2.x 버전에서만 가상 호스트 기능을 사용해 온 관리자들은
# 아파치 1.3.x 버전에서 NameVirtualHost 지시자로 IP 주소를
# 해주어야만 가상 호스트가 제대로 동작한다는 사실을 꼭 알아야 한다!!!
# 1.2 버전을 쓰다 1.3 버전으로 와서 가상 호스트가 동작하지 않는
# 문제의 99% 는 바로 NameVirtualHost 설정에 있다.
#
#
#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78

#
# 가상 호스트 예제:
# 거의 모든 아파치 지시자가 VirtualHost 컨테이너에 올 수 있다.
#
#<VirtualHost ip.address.of.www.yourdomain.com>
# ServerAdmin admin@www.yourdomain.com
# DocumentRoot /www/docs/www.yourdomain.com
# ServerName host.yourdomain.com
# ErrorLog logs/www.yourdomain.com-error_log
# CustomLog logs/www.yourdomain.com-access_log common
#</VirtualHost>
#<VirtualHost _default_:*>
#</VirtualHost>

<IfDefine HAVE_SSL>
##
## SSL Virtual Host Context
##

# Apache will only listen on port 80 by default. Defining the virtual server
# (below) won't make it automatically listen on the virtual server's port.
Listen 443

<VirtualHost _default_:443>

# General setup for the virtual host
DocumentRoot "/var/www/html"

# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on

# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
#SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A test
# certificate can be generated with `make certificate' under
# built time. Keep in mind that if you've both a RSA and a DSA
# certificate you can configure both in parallel (to also allow
# the use of DSA ciphers, etc.)
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
#SSLCertificateFile /etc/httpd/conf/ssl.crt/server-dsa.crt

# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
#SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server-dsa.key

# Server Certificate Chain:
# Point SSLCertificateChainFile at a file containing the
# concatenation of PEM encoded CA certificates which form the
# certificate chain for the server certificate. Alternatively
# the referenced file can be the same as SSLCertificateFile
# when the CA certificates are directly appended to the server
# certificate for convinience.
#SSLCertificateChainFile /etc/httpd/conf/ssl.crt/ca.crt

# Certificate Authority (CA):
# Set the CA certificate verification path where to find CA
# certificates for client authentication or alternatively one
# huge file containing all of them (file must be PEM encoded)
# Note: Inside SSLCACertificatePath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCACertificatePath /etc/httpd/conf/ssl.crt
#SSLCACertificateFile /etc/httpd/conf/ssl.crt/ca-bundle.crt

# Certificate Revocation Lists (CRL):
# Set the CA revocation path where to find CA CRLs for client
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
#SSLCARevocationPath /etc/httpd/conf/ssl.crl
#SSLCARevocationFile /etc/httpd/conf/ssl.crl/ca-bundle.crl
# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth 10

# Access Control:
# With SSLRequire you can do per-directory access control based
# on arbitrary complex boolean expressions containing server
# variable checks and other lookup directives. The syntax is a
# mixture between C and Perl. See the mod_ssl documentation
# for more details.
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)-/
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd."
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 )
# or %{REMOTE_ADDR} =~ m/^192.76.162.[0-9]+$/
#</Location>
# SSL Engine Options:
# Set various options for the SSL engine.
# o FakeBasicAuth:
# Translate the client X.509 into a Basic Authorisation. This means that
# the standard Auth/DBMAuth methods can be used for access control. The
# user name is the `one line' version of the client's X.509 certificate.
# Note that no password is obtained from the user. Every entry in the user
# file needs this password: `xxj31ZMTZzkVA'.
# o ExportCertData:
# This exports two additional environment variables: SSL_CLIENT_CERT and
# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
# server (always existing) and the client (only existing when client
# authentication is used). This can be used to import the certificates
# into CGI scripts.
# o StdEnvVars:
# This exports the standard SSL/TLS related `SSL_*' environment variables.
# Per default this exportation is switched off for performance reasons,
# because the extraction step is an expensive operation and is usually
# useless for serving static content. So one usually enables the
# exportation for CGI and SSI requests only.
# o CompatEnvVars:
# This exports obsolete environment variables for backward compatibility
# to Apache-SSL 1.x, mod_ssl 2.0.x, Sioux 1.0 and Stronghold 2.x. Use this
# to provide compatibility to existing CGI scripts.
# o StrictRequire:
# This denies access when "SSLRequireSSL" or "SSLRequire" applied even
# under a "Satisfy any" situation, i.e. when it applies access is denied
# and no other module can change it.
# o OptRenegotiate:
# This enables optimized SSL connection renegotiation handling when SSL
# directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire
<Files ~ ".(cgi|shtml)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

# Notice: Most problems of broken clients are also related to the HTTP
# keep-alive facility, so you usually additionally want to disable
# keep-alive for those clients, too. Use variable "nokeepalive" for this.
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

# Per-Server Logging:
# The home of a custom SSL log file. Use this when you want a
# compact non-error SSL logfile on a virtual host basis.
CustomLog /var/log/httpd/ssl_request_log
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"

</VirtualHost>

</IfDefine>

한 IP에 도메인을 여러개 셋팅

서버,보안
저두 초보이지만 윗분이 설명하신것은 아파치에서 Virtual host를 설명하신것 같습니다.
그리고 님이 설명하시는 것은 DNS(Domain Name Server)에 대한 질문인것 같은데..

예를 들어 111.222.333.444 란 IP에 aaa.com 과 bbb.com두개를 할당 하고 싶다는 것이 아닌지....?

http://www.kr.freebsd.org/doc/PoweredByDNS/ 에가시면 설명이 자세히 나와 있습니다. 참고 해보세요.

dns설치가 되어 있다면 /etc/named.conf 파일에 aaa.com 과 bbb.com을 형식에 맞게 넣어 주시고 /var/naemd/ 디렉토리 및에 각각의 해당 파일을 넣어 주시면 됩니다.

음... 대충 파일을 보시면 named.conf 파일은

zone "333.222.111.in-addr.arpa" IN {
type master;
file "zone-333.222.111.in-addr.arpa";
}
zone "aaa.com" IN {
type master;
file "zone-aaa.com";
}
zone "bbb.com" IN {
type master;
file "zone-bbb.com";
}
이렇게 추가 하시구요.
위에는 인버스 도메인 파일을 알려주는거구 다음 두개는 해당 도매인 파일을 아려줍니다.

다음엔 /var/named/ 디렉토리안에 zone-333.222.111.in-addr.arpa, zone-aaa.com, zone-bbb.com 세개의 파일을 만듭니다.

자세한 것은 위에 알려드린 사이트를 가보시구 대충 설명을 드리겠습니다.

먼저 zone-333.222.111.in-addr.arpa 파일은
@ IN SOA ns.aaa.com. homemaster.aaa.com. {
1999030601;
21600;
1800;
1209600;
86400)
IN NS ns.aaa.com.
444 IN PTR ns.aaa.com.

각각의 숫자는 시리얼, 갱신 주기... 등등의 시간을 나타냅니다.
특히 주의 할점은 도메인 뒤에는 항상 . 을 반드시 붙힙니다.

SOA , NS, PTR 은 각각의 예약어 이므로 형식에 맞추어서 적어 주셔야 하구요 homehamset 는 그냥 관리자의 의미이고 ns는 name server의 이므로 변경하셔도 됩니다.

다음 zone-aaa.com 파일은

@ IN SOA ns.aaa.com. homemaster.aaa.com. {
1999030601;
21600;
1800;
1209600;
86400)
IN NS ns.aaa.com.
IN A 111.222.333.444
IN MX 10 @
www IN CNAME @
ftp IN CNAME @

여기서 MX는 SendMail과 관련된 내용이구요. CANME은 별칭을 붙히는 겁니다.

예를 들어 다른 컴퓨터 또는 다른 아이피에 도메인을 할당하고 싶다면

www IN A 111.222.333.555
이렇게 해주시면 됩니다.

다음 zone-bbb.com 파일부터는 정말 간단해 집니다.
$INCLUDE zone-aaa.com
www IN A 111.222.333.444

이렇게 해주시면 됩니다.
당연히 aaa.com 과 bbb.com을 인터닉에 등록 하실때
ns.aaa.com 을 네임서버로 아이피는 111.222.333.444로 등록을 하셔야 겠지요. 

Unix의 디렉토리 구조

서버,보안
0. 개요

Windows에서는 C 드라이브 밑에 자신이 원하는 대로 디렉터리는 사용하는데, Unix, Linux의 경우는 디렉터리 구조를 잘 지키면서 사용해야 합니다.
즉, 특정 파일은 특정 디렉터리에 존재해야하는데, 응용 프로그램들의 실행 파일도 Windows처럼 마음대로 존재하는 것이 아니라 특정 디렉터리에 모여있습니다.



1. 디렉토리 구조

/bin
기본적인 시스템 명령어가 들어 있습니다.
예) ls, cp

/usr/bin
이곳에는 'vi'나 'mc'와 같은 콘솔 모드에서의 응용 프로그램을 비롯하여 'kedit'나 'gqview'와 같은 X윈도용 응용 프로그램이 들어 있습니다.

/boot
부팅에 사용되는 커널과 LILO 부팅 관련 파일이 저장되는 디렉터리입니다.

/dev
장치 파일들이 모여있는 디렉터리입니다.
리눅스는 모든 장치를 파일로 취급합니다.
따라서 여기에는 프린터와 시디롬, 플로피디스크, 하드디스크와 같은 장치 파일들이 모여있습니다.
수동으로 마운트하기 위해서는 이 디렉터리 안의 파일을 참조해야 합니다.

/etc
시스템 설정에 관련된 파일들을 저장하는 디렉터리로 여기에는 패스워드를 지정하는 'passwd', 초기에 콘솔 모드로 로그인하는지 X윈도로 로그인하는지 결정해 주는 'inittab', 전체 파일 시스템의 구성, 즉 하드디스크와 플로피디스크와 시디롬이 어떤 파일 시스템을 사용하는지를 타나내는 'fstab'등과 같은 설정 파일들이 있습니다.

/home
일반 사용자들의 디렉터리(홈 디렉터리)에 'adduser' 명령어로 사용자를 생성하면, 이 디렉터리 밑에 사용자의 디렉터리가 생기며 그 사용자와 관련된 파일들이 저장됩니다.

/lib
공유 라이브러리들이 모여 있는 디렉터리로 프로그램의 크기를 줄이기 위해 공통되는 부분을 이 곳에 따로 저장하여 프로그램을 실행할 때 마다 참조하도록 되어 있습니다.
따라서 잘못하여 이 곳의 파일을 지우면 특정 프로그램이 실행되지 않거나 아예 시스템이 중단되는 경우도 있습니다.

/mnt
각종 장치 파일들을 마운트할 때 사용하는 디렉터리입니다.
플로피디스크나 시디롬을 사용하기 위해 마운트하는 장소입니다.
자신이 임의로 다른 디렉터리에 만들어도 되지만, 기본적으로 이 곳에서 마운트 하도록 되어 있습니다.
예를 들면 시디롬은 /mnt/cdrom에 마운트 됩니다.

/root
슈퍼유저의 홈 디렉터리입니다. 이 디렉터리는 일반 유저의 홈 디렉터리 안에 있지 않고 특수하게 분리되어 있습니다.

/sbin
관리자용 프로그램 디렉터리로 관리자가 사용하는 명령어들이 모여 있습니다.
예) reboot, shutdown, fdisk

/usr/sbin
/sbin에 있는 명령어 외에 추가 명령어들이 있습니다.
주로 네트워크 설정 프로그램들이 들어있습니다.

/usr
일반적인 프로그램과 관련 파일이 설치되는 디렉터리 입니다.

/var
로그 파일이 저장되는 디렉터리입니다.

/procr
커널에 대한 정보를 가지고 있는 가상 파일 시스템으로 커널의 어떤 기능을 제어할 수 있는 역할을 가지고 있습니다. 대부분 읽기 전용이나, 일부 파일 중에는 쓰기가 가능한 파일이 존재하는 데, 이러한 파일들에 특정값을 지정하면 커널 기능이 변하게 됩니다. 

리눅스 서비스 데몬 설명

서버,보안
1. 서비스 데몬 설명

데몬명 간략한 기능 설명
amd 요청이 있을 때 장치와 NFS 호스트를 마운트시켜 주는 자동 마운트 데몬.
apmd 배터리 상태를 조회하는데 사용. 배터리 부족시 시스템 셧다운.
arpwatch 이더넷 카드와 IP 할당 관계를 보여주는 데몬.
autofs 파일 시스템(fs)을 자동으로 마운트, 언마운트.
crond 사용자가 지정한 프로그램을 특정 시간에 주기적으로 실행할 수 있도록 하는 데몬.
dhcpd 동적 호스트 통제 프로토콜에 접근할 수 있도록 하는 데몬.
gated 라우팅 데몬을 시작하거나 종료시키는 데몬.
gpm 마우스 지원해 주는 데몬. 시스템 셧다운하는 옵션 제공.
httpd 아파치 데몬.
inetd 인터넷을 관장하는 인터넷 수퍼 서버 데몬. Telnet, FTP, rlogin 요청시 실행 데몬.
inn 유즈넷 뉴스 서버로 지역 뉴스 서버 설정할 수 있는 데몬.
keytable /usr/sbin/kbdconfig로 키보드 유형을 변환.
lpd 프린터 서비스 데몬.
mcserve Midnight Command(md)끼리 네트워크를 공유시키는 데몬.
named DNS 데몬.
netfs 삼바, NFS, NCP 등을 마운트하거나 언마운트할 때 필요한 데몬.
network 설정된 네트워크 인터페이스가 부팅시 작동될 수 있도록 해주는 스크립트.
nfs NFS 서버로 작동할수 있게 하는 데몬.
nscd NIS 또는 NIS+ 를 사용할때 선택.
portmap RPC 연결에 관여하는 데몬. NFS, NIC 사용시 선택.
postgresql postgresql DB를 이용할때 선택.
random 시스템에 필요한 난수 발생 및 저장 스크립트.
routed 자동 IP 라우터 테이블이 가능하도록 하는 데몬.
ruserd 어떤 네트워크에 특정 사용자가 있는지 검색해주는 데몬.
rwhod 원격 사용자가 접속되어 있는 사용자의 목록을 볼 수 있게 해주는 데몬.
sendmail 메일 서버가 활성되도록 하는 데몬.
smb 삼바 서버가 활성되도록 하는 데몬.
sound 부팅과 종료시 사운드 믹서 설정을 저장하고 복원해 주는 데몬.
syslog 시스템에서 발생된 각종 사건을 기록해주는 서버. /var/log에 기록
ypbind NIS/YP 클라이언트용을 실행하는 데몬.
yppasswd NIS 클라이언트 사용자가 패스워드 변경할 수 있도록 하는 데몬.
ypserv 표준 NIS/YP 네트워크 프로토콜 서버.


rpm, package, pacth 설치

서버,보안
1. rpm(Red Hat Package Manager)

- 조회
# rpm -qa | more

-a : all. 현재 설치된 모든 패키지의 목록을 보여준다.
-c : configure. 패키지 안의 환경 설정 파일들을 표시한다.
-d : document. 패키지 안에 들어있는 문서를 보여준다.
-i : information. 패키지에 대한 상세한 정보를 보여준다.
-l : list. 패키지에 들어있는 파일의 목록을 표시한다.
-s : state. 패키지에 들어있는 파일의 상태를 표시한다.
-q : query. 설치 파일이 있는 디렉토리를 표시한다.

- 설치
# rpm -ivh package_file
-i : install. 패키지 설치 명령.
-v : verbose. 처리 상태를 표시한다.
-h : hash. 해시마크(#)로 진행 상태를 보여준다.
--force : 강제로 설치.
--replacepkgs : 이미 설치된 패키지 덮어 쓰기.
--replacefiles : 이미 설치된 패키지 파일 덮어 쓰기.
--percent : 설치를 퍼센트로 표시해준다.
--excludedocs : 문서 파일은 설치하지 않음.

- 업그레이드
# rpm -Uvh package_file
-u : upgrade.

- 삭제
# rpm -e package_name
-e : erase.
--nodeps : 의존성을 무시
--noscripts : 스크립트를 실행 안함.
--test : 충돌이나 의존성 문제 검사.

2. package

- 조회
# pkginfo | more
# pkginfo -l | package_name

-l : 소프트웨어 패키지에 대한 정보를 모두 보여준다.

- 설치
# pkgadd -d package_file
-d : 추가, 설치

- 삭제
# pkgrm package_name

- 정확성 검사
# pkgchk -v package_name
# pkgchk -p /etc/group
# pkgchk -l -p /usr/bin/ls
-l : 패키지가 설치된 파일에 대한 자세한 정보를 제공한다.
-v : 검사한 파일의 리스트를 제공한다.
-p : 경로명의 정확성을 검사한다.

3. gzip, unzip (파일 압축, 해제)

- 파일 압축
# gzip -r File_name

-n : 압축효율을 지정한다. (1~9)
-v : 결과를 상세히 보여준다. 각 파일의 크기, 압축율 등을 출력해준다.
-r : 각 디렉토리의 모든 파일을 차례로 압축한다.
- 압축 해제
# gzip -d File_name
# gunzip File_name

gzip으로 파일을 압축하면 원본파일은 지워지고, ".gz" 확장자를 가지는 압축파일이 만들어집니다. 허가권과 소유권은 모두 보존됩니다.

4. tar (파일 묶기, 풀기)

- 묶기
# tar cvf test.tar test1.txt test2.txt test3.txt
# tar cvf test.tar *.php
# tar cvf test.tar public_html/
# tar cvzf src.tar.gz src/

- 풀기
# tar xvf test.tar
# tar xvzf src.tar.gz

-c : create. 파일을 묶어준다.
-x : extract. 묶음을 풀어준다.
-v : verbose. 파일을 묶거나 풀때 정보를 보여준다. 진행상태 보기
-f : file. 다음에 파일명을 적어준다.
-t : list. 묶음을 풀지 않고 묶인 내용만 확인한다.
-z : 자동으로 gzip 압축/ 해제까지 해준다.

5. patch

- 설치
# patchadd 109320-03 (patch_name)

- 제거
# patchrm 109320-03

- 조회
# showrev -p | grep 109320-03 

리눅스 DNS 설치하기

서버,보안
1. Bind 설치

-. bind(Berkeley Internet Name Daemon) 파일
소스를 다운 받아 컴파일, rpm 파일로 설치, 패키지로 설치하는 방법이 있습니다.

소스 파일 다운 : ftp://ftp.isc.org/isc/bind/src rpm 파일은 리눅스 설치 CD내에 있습니다.
설치해야 하는 rpm 파일은 bind-9.1.xx.rpm, bindconf-1.xx.noarch.rpm, bind-utils-9.xx.rpm, caching-nameserver-7.xx.noarch.rpm 입니다.

-. 소스 설치
# make clean depend all install

-. rpm 설치
# -rpm -ivh rpm_FileName



2. 네트워크 파일 설정

# vi /etc/hosts

127.0.0.1 locahohost.localdomain localhost
61.78.244.88 ddiass.pe.kr ddiass

제 도메인. ddiass.pe.kr과 61.78.244.88을 예로 들겠습니다.

# vi /etc/hostname
ddiass.pe.kr

# vi /etc/resolve.conf
search ccddiass.pe.kr
nameserver 61.78.244.88

# vi /etc/sysconfig/network
NETWORKING=yes
FORWARD IPV4=no
HOSTNAME=ddiass.pe.kr
GATEWAY=61.78.244.81
GATEWAYDEV=eth0
이때, FORWARD IPV4=yes라 설정하면 자신의 컴퓨터를 라우터로 사용하겠다는 뜻입니다.

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
USERCTL=no
onBOOT=yes
BOOTPROTO=none
NETMASK=255.255.255.240
IPADDR=61.78.244.88


3. DNS 설정하기

bind를 설치하고 나면 named.conf, named.rev, named.zone, named.ca파일이 생성됩니다.
위치는 /etc/named.conf, /var/named/localhost.zone, /var/named/named.ca, /var/named/named.local 로 배치합니다.

-. name.conf 파일 수정
# vi /etc/named.conf
options {
	directory "/var/named";
};
zone "." IN {
	type hint;
	file "named.ca";
};
zone "localhost" IN {
	type master;
	file "localhost.zone";
	allow-update { none; };
};
zone "ddiass.pe.kr" IN {
	type master;
	file "ddiass.zone";
	allow-update{none;};
};
zone "0.0.127.in-addr.arpa" IN {
	type master;
	file "named.local";
	allow-update { none; };
};
zone "244.78.61.in-addr.arpa" IN{
	type master;
	file "61.78.244.rev";
	allow-update {none;};
};
여기서, ddiass.zone, 61.78.244.rev 파일은 named.conf 파일에 맞게 새로 만듭니다.

-. ddiass.zone 파일 수정
# vi /var/named/ddiass.zone
@   IN   SOA   ns.ddiass.pe.kr. root.ddiass.pe.kr. (
     1997022700 ; Serial
     28800      ; Refresh
     14400      ; Retry
     3600000    ; Expire
     86400 )    ; Minimum
     IN   NS   ns.ddiass.pe.kr.

@      IN   A	  61.78.244.89
www    IN   A	 61.78.244.89

-. 61.78.244.rev 파일 수정
# vi /var/named/61.78.244.rev
@  IN  SOA  ns.ddiass.pe.kr. root.ddiass.pe.kr.  (
    1997022700 ; Serial
    28800      ; Refresh
    14400      ; Retry
    3600000    ; Expire
    86400 )    ; Minimum
   IN      NS  ns.ddiass.pe.kr. 

89  IN  PTR  ddiass.pe.kr.
89  IN  PTR  www.ddiass.pe.kr.
쩜(.) 하나라도 소중히 여깁시다~! ^^


4. named 데몬 시작, 중지

# /etc/rc.d/init.d { start | stop | status | restart | condrestart | reload | probe }

참고 -> DNS와 BIND의 차이
DNS는 Domain Name System의 약자로써, 분산 네이밍 시스템을 뜻합니다.
즉, 도메인명을 IP 주소로 변환해주는 방법론입니다.
인터넷에 존재하는 수많은 네임서버는 각각 도메인 계층상의 일부분을 관리하고, 정보를 요구하는 클라이언트 Resolver는 규칙에 따라 분산된 자료중 원하는 정보를 찾을 수 있는 시스템, 이것을 DNS 라고 합니다.
BIND는 Berkeley Internet Name Domain의 약자로, DNS를 구현한 소프트웨어의 하나이면서, '워크맨'이란 단어처럼 DNS를 구현한 소프트웨어를 칭하는 대명사로 쓰이기도 합니다.
BIND는 거의 모든 플랫폼에 포팅되었고, 가장 널리 사용됩니다.