RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'Learning Linux/AdminCourse'에 해당되는 글 32
2009.07.27  [리눅스 관리]로그분석  
2009.07.27  [리눅스 관리]xinetd  

출처 : 대전국제IT교육센터 정성재 강사

 

1. RHEL 4와 LVM
(1) 개요
    RedHat Linux 9 및 RHEL 3 까지는 LVM 구성시 lvm 1 버전을 사용하였으나, RHEL 4는 lvm 2
   버전을 사용한다.
(2) LVM2가 LVM1과 비교해서 변화된 점
   1) LVM에 처음 생성시 사용하던 vgscan은 사용하지 않는다. LVM2에서는 자동적으로 이뤄진다.
   2) LV의 크기를 줄이거나 늘려주고, fsck 및 resize2fs 명령까지 수행하는 e2fsadm이라는 명령이
     없어지고 ext2online이라는 명령을 사용한다.

2. LVM 설정하기
(1) 설명: 약 1000MB씩 할당되어 있는 /dev/hda11, /dev/hda12을 lvm0이라는 볼륨그룹으로
          생성하고, 약 1200MB는 /ldata로 할당하고, 나머지 800MB는 /ldata2로 구성한다.
(2) 설정1: 1200MB의 /ldata 로 구성
   1) fdisk를 이용하여 파티션 생성 및 속성 변경
     fdisk /dev/hda 실행후 파티션을 생성하고, 파티션을 LVM 속성으로 변경하기 위하여
    t, 해당 파티션 선택, 8e, w을 누르고 재부팅한다.
   2) 물리적 볼륨(PV:Physical Volume) 생성
     [root@linux33 ~]# pvcreate /dev/hda11
       Physical volume "/dev/hda11" successfully created
     [root@linux33 ~]# pvcreate /dev/hda12
       Physical volume "/dev/hda12" successfully created
   3) 생성된 PV를 특정한 볼륨그룹(lvm)에 추가시키기
     [root@linux33 ~]# vgcreate lvm0 /dev/hda11 /dev/hda12
       Volume group "lvm0" successfully created
   4) 생성된 볼륨그룹 검사
     [root@linux33 ~]# vgdisplay -v
         Finding all volume groups
         Finding volume group "lvm0"
       --- Volume group ---
       VG Name               lvm0
       System ID
       Format                lvm2
       Metadata Areas        2
       Metadata Sequence No  1
       VG Access             read/write
       VG Status             resizable
       MAX LV                0
       Cur LV                0
       Open LV               0
       Max PV                0
       Cur PV                2
       Act PV                2
       VG Size               1.88 GB
       PE Size               4.00 MB
       Total PE              482
       Alloc PE / Size       0 / 0
       Free  PE / Size       482 / 1.88 GB
       VG UUID               pET6FH-n82q-ytwF-sdid-FnFj-9S9I-qM9yff

       --- Physical volumes ---
       PV Name               /dev/hda11
       PV UUID               6cuR47-E2hA-3dL4-DixC-gGEg-zxzx-n0qfQg
       PV Status             allocatable
       Total PE / Free PE    241 / 241

       PV Name               /dev/hda12
       PV UUID               0uHbHb-MVyr-n8N1-q4L7-jNpm-LSy6-MhhGoJ
       PV Status             allocatable
       Total PE / Free PE    241 / 241
   5) 논리적 볼륨(LV:Logical Volume) 생성
     [root@linux33 ~]# lvcreate -L 1200M -n ldata lvm0
       Logical volume "ldata" created
       => 관련 디바이스 파일명이 /dev/mapper/lvm0-ldata로 생성되고, 추가로 /dev/lvm0/ldata로
        심볼릭 링크파일이 생성된다.
   6) LV생성확인
     [root@linux33 ~]# lvscan
       ACTIVE            '/dev/lvm0/ldata' [1.17 GB] inherit
   7) VG 확인
     [root@linux33 ~]# vgdisplay -v
         Finding all volume groups
         Finding volume group "lvm0"
       --- Volume group ---
       VG Name               lvm0
       System ID
       Format                lvm2
       Metadata Areas        2
       Metadata Sequence No  1
       VG Access             read/write
       VG Status             resizable
       MAX LV                0
       Cur LV                0
       Open LV               0
       Max PV                0
       Cur PV                2
       Act PV                2
       VG Size               1.88 GB
       PE Size               4.00 MB
       Total PE              482
       Alloc PE / Size       0 / 0
       Free  PE / Size       482 / 1.88 GB
       VG UUID               pET6FH-n82q-ytwF-sdid-FnFj-9S9I-qM9yff

       --- Logical volume ---
       LV Name                /dev/lvm0/ldata
       VG Name                lvm0
       LV UUID                HVbvnV-MDS7-yrqy-ijn6-fPSu-xabk-ujIAhA
       LV Write Access        read/write
       LV Status              available
       # open                 0
       LV Size                1.17 GB
       Current LE             300
       Segments               2
       Allocation             inherit
       Read ahead sectors     0
       Block device           253:0

       --- Physical volumes ---
       PV Name               /dev/hda11
       PV UUID               6cuR47-E2hA-3dL4-DixC-gGEg-zxzx-n0qfQg
       PV Status             allocatable
       Total PE / Free PE    241 / 0

       PV Name               /dev/hda12
       PV UUID               0uHbHb-MVyr-n8N1-q4L7-jNpm-LSy6-MhhGoJ
       PV Status             allocatable
       Total PE / Free PE    241 / 182
         => Logical volume이 나타나고, Physical volumes에서 /dev/hda11은 모두 사용중이고,
           /dev/hda12도 일부 사용중이다.
   8) 파일시스템 생성
     [root@linux33 ~]# mkfs -t ext3 /dev/lvm0/ldata
   9) 마운트할 디렉토리 생성
     [root@linux33 ~]# mkdir /ldata
   10) 마운트
     [root@linux33 ~]# mount -t ext3 /dev/lvm0/ldata /ldata
(3) 설정 확인 및 등록
   1) 개요: 제대로 설정되었는지 확인하려면 mount, df 명령을 이용하여 확인하고, 이상이 없으면
           시스템 재부팅시에도 계속적으로 사용하기 위해 /etc/fstab에 등록한다.
   2) 설정의 확인
    ㄱ. mount 명령을 이용한 확인
       [root@linux33 ~]# mount
       /dev/hda1 on / type ext3 (rw)
       none on /proc type proc (rw)
       none on /sys type sysfs (rw)
       none on /dev/pts type devpts (rw,gid=5,mode=620)
       usbfs on /proc/bus/usb type usbfs (rw)
       none on /dev/shm type tmpfs (rw)
       /dev/hda5 on /home type ext3 (rw)
       /dev/hda2 on /usr type ext3 (rw)
       /dev/hda3 on /var type ext3 (rw)
       /dev/md0 on /raiddata type ext3 (rw)
       /dev/md1 on /raiddata1 type ext3 (rw)
       none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
       sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
       /dev/mapper/lvm0-ldata on /ldata type ext3 (rw)            // 이 부분이다.
    ㄴ. df 명령을 이용한 확인
       [root@linux33 ~]# df -h
       Filesystem            Size  Used Avail Use% Mounted on
       /dev/hda1             2.9G  191M  2.6G   7% /
       none                  252M     0  252M   0% /dev/shm
       /dev/hda5             2.0G   36M  1.8G   2% /home
       /dev/hda2             9.7G  5.8G  3.5G  63% /usr
       /dev/hda3             2.0G  191M  1.7G  11% /var
       /dev/md0              1.9G   35M  1.8G   2% /raiddata
       /dev/md1              950M   18M  885M   2% /raiddata1
       /dev/mapper/lvm0-ldata
                             1.2G   34M  1.1G   4% /ldata
        => 참고로 RHEL 4에서는 나타나는 디바이스 파일명이 RHEL 3 이전버전과 다른 것을 알 수 있다.
   3) /etc/fstab에 등록
    ㄱ. 설명: LVM을 시스템 재부팅후에도 사용하려면 /etc/fstab파일에 등록하면 된다.
    ㄴ. 예
       /dev/lvm0/ldata              /ldata                ext3    defaults        0 0
(4) 설정2: 남은 공간인 약 800MB를 /ldata2로 구성하기
   1) 설명: 남은 공간을 확인하려면 vgdisplay -v 명령을 내려 Free PE값을 확인하고 해당 PE값을
           할당하는 것이 좋다. lvcreate 로 남은 PE값을 지정하고 Logical Volume을 생성한다.
   2) 방법
    ㄱ. [root@linux33 ~]# vgdisplay -v
          => Free PE값을 확인한다.
    ㄴ. [root@linux33 ~]# lvcreate -l 182 -n ldata2 lvm0
          Logical volume "ldata2" created
         => lvm0이라는 볼륨그룹에 ldata2 이라는 Logical Volume을 생성하고 크기는 182PE
          (약 728MB)를 할당한다.
    ㄷ. [root@linux33 ~]# mkfs.ext3 /dev/lvm0/ldata2
         => 파일시스템을 생성한다.
    ㄹ. [root@linux33 ~]# mkdir /ldata2
         => /ldata2를 생성한다.
    ㅁ. [root@linux33 ~]# mount -t ext3 /dev/lvm0/ldata2 /ldata2
         => 마운트한다.
    ㅂ. mount 및 df 명령을 이용하여 확인한다.
    ㅅ. 재부팅후에도 사용하려면 /etc/fstab에 등록한다.

3. 설정된 LVM 확장하기
(1) 개요: 기존의 설정된 Logical Volume을 확장하려면 Volume Group의 공간이 남아 있어야 한다.
          만약 VG의 공간이 없으면 새로운 디스크 파티션을 PV로 생성하고 해당 파티션을 VG로
          확장한 뒤에 LV를 늘릴 수 있다.
(2) VG확장하기
   1) 설명: LV를 늘리기 위해서는 새로운 파티션을 생성한 후에 PV로 만든 후 해당 PV를 VG에
           속하게 해야 한다. 약 2000MB인 /dev/hda13을 VG에 속하게 해본다.
   2) 방법
    ㄱ. 파티션 생성: 'fdisk /dev/hda' 실행후 파티션을 2000MB로 생성하고, 속성을 LVM으로
                    변경하기 위하여 t, 해당 파티션 선택, 8e, w을 누르고 재부팅한다.
    ㄴ. PV 생성
       [root@linux33 ~]# pvcreate /dev/hda13
         Physical volume "/dev/hda13" successfully created
    ㄷ. VG 확장
       [root@linux33 ~]# vgextend lvm0 /dev/hda13
         Volume group "lvm0" successfully extended
    ㄹ. 확인
       [root@linux33 ~]# vgdisplay -v
         => 늘어난 Physical volumes를 확인한다.
(3) LV확장하기
   1) 설명: 약 1200MB가 할당된 /ldata를 1000MB를 추가하여 크기를 2200MB로 늘린다.
   2) 방법
    ㄱ. 마운트가 되어 있으면 umount 한다.
       [root@linux33 ~]# umount /ldata
    ㄴ. lvextend 명령을 이용하여 확장한다.
       [root@linux33 ~]# lvextend -L +1000M /dev/lvm0/ldata
         Extending logical volume ldata to 2.15 GB
         Logical volume ldata successfully resized
    ㄷ. lvscan이나 lvdisplay 명령을 이용하여 확장된 내용을 확인한다.
       [root@linux33 ~]# lvscan
         ACTIVE            '/dev/lvm0/ldata' [2.15 GB] inherit
         ACTIVE            '/dev/lvm0/ldata2' [728.00 MB] inherit
    ㄹ. ext2online 명령을 이용하여 파일시스템의 크기를 늘린다.
       [root@linux33 ~]# ext2online /dev/lvm0/ldata
       ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b
        => 이전 버전의 fsck 및 resize2fs 대체하는 명령으로 마운트된 상태에서도 사용가능하나
          안정성을 위해 언마운트상태에서 사용하도록 한다.
    ㅁ. df명령을 이용하여 확인한다.

4. LVM 관련명령어
(1) pvcreate
   1) 설명: 물리적 볼륨(PV:Physical Volume)을 생성하는 명령어이다. fdisk를 이용하여 파티션을
           분할하고 LVM 속성으로 지정한 뒤에 해당 파티션을 PV로 만들 때 사용하는 명령이다.
   2) 사용법
     pvcreate [option] 디바이스명
   3) option
     -ff : 강제로 생성할 때 쓴다.
   4) 사용예
    ㄱ. [root@www root]# pvcreate /dev/hdb1
          => /dev/hdb1을 물리적 볼륨으로 생성한다.
    ㄴ. [root@www root]# pvcreate -ff /dev/hdb2
          => /dev/hdb2를 오류 등을 무시하고 물리적 볼륨으로 생성한다.
(2) vgcreate
   1) 설명: 볼륨그룹을 생성하는 명령어로 생성된 PV를 지정한 볼륨그룹에 포함시키면서 생성한다.
   2) 사용법
     vgcreate [option] 볼륨그룹명 디바이스명 디바이스명
   3) option
     -s 사이즈[kKmMgGtT]: PE(물리적확장:Physical Extends]의 크기를 지정한다.
   4) 사용예
    ㄱ.[root@www root]# vgcreate lvm00 /dev/hda7 /dev/hdb1
        => lvm00 이라는 볼륨그룹을 생성하고 /dev/hda7, /dev/hdb1 이라는 PV를 포함시킨다.
    ㄴ.[root@www root]# vgcreate -s 16M lvm00 /dev/hda7 /dev/hdb1
         => lvm00 이라는 볼륨그룹을 생성하고, PE의 크기를 16MB로 지정하면서 /dev/hda7,
           /dev/hdb1 이라는 PV를 포함시킨다.
(3) vgdisplay
   1) 설명: 볼륨그룹의 속성과 정보를 보여주는 명령어이다.
   2) 사용법
     vgdisplay [option] [볼륨그룹명]
   3) option
     -v: 좀 더 자세히 보여주는 옵션으로 Volume Group이외에 Logical Volume과 Physical Volume도
        같이 보여준다.
   4) 사용예
    ㄱ. [root@www root]# vgdisplay
         => Volume Group의 내용을 보여준다.
    ㄴ. [root@www root]# vgdisplay -v lvm00
         => lvm이라는 볼륨그룹의 내용을 자세히 보여준다.
(4) lvcreate
   1) 설명: 볼륨그룹안에 LV(Logical Volume)을 생성하는 명령이다.
   2) 사용법
     lvcreate 옵션 볼륨그룹명
   3) option
     -L: LV의 사이즈를 지정하는 옵션으로 K(kilobytes), M(megabytes), G(gigabytes), T(terabyt
        es) 단위를 붙여 지정가능하다.
     -l: LV의 사이즈를 지정하는 옵션으로 pe의 개수로 용량을 지정한다. 참고로 보통 1pe당 4MB
        이다. (참고로 소문자 L임)
     -n: LV의 이름을 지정하는 옵션이다.
     -i: RAID 0같은 stripe 사용시 볼륨이름을 지정하는 옵션이다.
     -I stripe_size: 스트라이프되는 크기를 지정한다. 기본단위가 kilobytes이고 크기는 반드시
                    2의 배수(2^n: n값은 2부터 9)로 지정해야 한다.
     -s: 유동적인 디렉토리 백업에 유용한 snapshot LV를 생성하는 옵션이다.
   4) 사용예
    ㄱ. [root@www root]# lvcreate -L 2000M -n backup lvm00
         => lvm00이라는 볼륨그룹에 backup라는 이름으로 2Gigabytes 용량으로 LV을 생성한다.
           이 경우 /dev/lvm00/backup이라는 디바이스파일이 생성된다.
    ㄴ. [root@www root]# lvcreate -l 250 -n data lvm00
         => lvm00이라는 볼륨그룹에 data라는 이름으로 250pe(약 1GB)용량으로 LV을 생성한다.
           이 경우 /dev/lvm00/data라는 디바이스파일이 생성된다.
    ㄷ. [root@www root]# lvcreate -i 2 -L 1G -n striped_lv lvm00
         => /dev/lvm00/striped_lv 라는 디바이스파일을 생성하고 볼륨 2를 부여한다.
    ㄹ. [root@www root]# lvcreate -s -L 500M -n snap /dev/lvm00/lvmdata4
         => /dev/lvm00/lvmdata4의 snapshot LV인 /dev/lvm00/snap를 500MB 크기로 생성한다.
   5) 참고: LV와 디바이스파일명
     RHEL 4버전에서 생성되는 디바이스 파일명은 "/dev/mapper/VG이름-LV이름"이다. 즉, VG명이
    lvm0이고 LV명이 ldata이면 /dev/mapper/lvm0-ldata로 생성된다. RHEL 3 이전버전에서는
    /dev/lvm0/ldata형태로 디바이스파일이 생성되는데, RHEL 4에서는 이 파일을 심볼릭 링크 파일로
    추가로 생성시켜주므로 이 파일을 사용해도 된다.
(5) lvscan
   1) 설명: 디스크에 있는 Logical Volume을 찾아준다.
   2) 사용법
     lvscan [option]
   3) option
     -v: 정보를 자세히 보여준다.
   4) 사용예
     lvscan
(6) lvdisplay
   1) 설명: Logical Volume의 정보를 보여준다.
   2) 사용법
     lvdisplay [option] LV명
   3) option
     -v: 정보를 자세히 보여준다.
   4) 사용예
     [root@www root]# lvdisplay -v /dev/lvm00/data
       => /dev/lvm00/data라는 LV의 정보를 자세히 보여준다.
(7) vgextend
   1) 설명: 미리 생성된 Volume Group에 추가로 Phycical Volume을 추가할 때 사용한다.
   2) 사용법
     vgextend 볼륨그룹명 새PV명
   3) 사용예
     [root@www root]# vgextend lvm00 /dev/hdc1
       => lvm00이라는 볼륨그룹에 /dev/hdc1을 추가한다.
(8) vgreduce
   1) 설명: 볼륨그룹에 있는 Physical Volume을 삭제하는 명령이다. 물론 해당 PV의 PE가 할당되어
           있으면 제거되지 않는다.
   2) 사용법
     vgreduce [option] 볼륨그룹명 PV명
   3) option
     -a : 특별한 PV명이 없을 경우에 비어있는 PV를 모두 제거한다.
   4) 사용예
     [root@www root]# vgreduce lvm00 /dev/hdc1
       => lvm00이라는 볼륨그룹에서 /dev/hdc1을 삭제한다.
(9) lvextend
   1) 설명: Logical Volume의 용량을 확장하는 명령이다.
   2) 사용법
     lvextend 옵션 [볼륨그룹명] LV명
   3) option
     -l +사이즈: 지정한 PE수만큼 용량을 늘린다.
     -L +사이즈[kmgt]: 지정한 사이즈만큼 용량을 늘린다. 단위를 표시하지 않으면 기본 Megabytes
                      단위이다.
   4) 사용예
     [root@www root]# lvextend -L +200M /dev/lvm00/data
       => 기존의 용량에 추가로 200MB를 할당한다.
(10) lvreduce
   1) 설명: Logical Volume의 용량을 줄이는 명령이다. 늘이는 경우와는 다르게 줄이는 경우에는
           데이터가 파괴되므로 주의해야 하고, 파괴된 경우에는 다시 mkfs해서 사용해야 한다.
   2) 사용법
    lvreduce 옵션 [볼륨그룹병] LV명
   3) option
     -l -사이즈: 지정한 PE수만큼 용량을 줄인다.
     -L -사이즈: 지정한 사이즈만큼 용량을 줄인다. 단위를 표시하지 않으면 기본 단위는 Megabytes
                이고, 사이즈단위로는 kKmMgGtT를 사용할 수 있다.
   4) 사용예
     [root@www root]# lvreduce -L -500 /dev/lvm00/data
      => /dev/lvm00/data의 용량을 500MB 줄인다.
(11) lvrename
   1) 설명: 논리적 볼륨의 이름을 변경하는 명령이다.
   2) 사용법
      lvrename 원_논리적볼륨_절대경로 새로운_논리적볼륨_절대경로
      lvrename 볼륨그룹명 원_논리적볼륨명 새로운_논리적볼륨명
   3) 사용예
    ㄱ. [root@www root]# lvrename /dev/lvm00/lvmdata3 /dev/lvm00/data3
         => /dev/lvm00/lvmdata3 라는 논리적 볼륨의 이름을 /dev/lvm00/data3로 바꾼다.
    ㄴ. [root@www root]# lvrename lvm00 lvmdata3 data3
         => /dev/lvm00/lvmdata3 라는 논리적 볼륨의 이름을 /dev/lvm00/data3로 바꾼다. 결과적으
           로 바로 위의 ㄱ번 예제와 같다.
(12) lvremove
   1) 설명: 논리적 볼륨을 제거하는 명령이다. 사용중인 경우에는 제거되지 않으므로 미리 umount를
           해야 한다.
   2) 사용법
     lvremove 논리적볼륨_절대경로
   3) 사용예
     [root@www root]# lvremove /dev/lvm00/lvmdata3
      => /dev/lvm00/lvmdata3라는 논리적 볼륨을 제거한다.
(13) vgchange
   1) 설명: 볼륨그룹을 속성을 변경하는 명령으로 볼륨그룹을 사용가능여부, 최대 LV 갯수등을 변경
           할 수 있다.
   2) 사용법
     vgchange 옵션 볼륨그룹명
   3) option
     -a y|n : 볼륨그룹의 사용여부를 지정한다.
     -l 갯수: 해당 볼륨그룹에 생성할 수 있는 최대 Logical Volume수를 지정한다.
   4) 사용예
    ㄱ. [root@www root]# vgchange -a y lvm00
         => lvm00이라는 볼륨그룹을 활성화시킨다.
    ㄴ. [root@www root]# vgchange -a n lvm00
         => lvm00이라는 볼륨그룹을 비활성화시킨다. 사용중이면 중지시킬 수 없다.
    ㄷ. [root@www root]# vgchange -l 100 lvm00
         => lvm00이라는 볼륨그룹을 최대 Logical Volume수를 100개로 지정한다.
(14) vgremove
   1) 설명: 볼륨그룹을 제거하는 명령이다. 사용중이면 제거가 되지 않는 umount하고 속해있는 LV를
           전부 제거해야 한다.
   2) 사용법
     vgremove 볼륨그룹명
   3) 사용예
     [root@www root]# vgremove lvm00
      => lvm00이라는 볼륨그룹을 삭제한다.
(15) pvmove
   1) 설명: 물리적확장인 PE를 이동시키는 명령이다.
   2) 사용법
     pvmove [option] 장치명 [장치명]
   3) option
     -v: 해당 장치의 정보를 보여준다.
   4) 사용예
    ㄱ. pvmove -v /dev/hda15
         => /dev/hda15의 정보를 보여준다.
    ㄴ. pvmove /dev/hda14 /dev/hda15
         => /dev/hda15의 PE의 내용을 /dev/hda15에 그대로 이동한다.
(16) ext2online
   1) 설명: 바뀐 파일시스템의 크기를 조정하는 명령으로 예전 버전의 resize2fs 명령의 기능을
           한다. resize2fs보다 더 나아진 점으로는 기본적으로 fsck를 수행하고, 또한 mount된
           상태에서 사용가능하다.
   2) 사용법
     ext2online 디바이스 파일명
   3) 사용예
     [root@linux33 ~]# ext2online /dev/lvm0/ldata
      => /dev/lvm0/ldata의 바뀐 파일시스템의 크기를 확인하여 조정해준다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. LVM이란?
(1) 개요: 리눅스 설치시나 하드디스크 추가시에 파티션이라는 것을 나누고 공간을 할당한다. 이
          때 한번 설정한 공간을 고정이 되어 변경이나 추가가 불가능하다. LVM(Logical Volume
          Manager)은 파티션을 원하는 대로 추가하거나 제거하고 그 크기도 조절할 수 있도록
          해주는 방법이다.
(2) 관련용어
   1) 물리적 볼륨(PV:Physical Volume): 실제로 나눈 파티션을 말한다. 즉 /dev/hda8, /dev/hdb1 등
                                      을 말한다. LVM에서는 이러한 물리적 볼륨을 하나의 구성원
                                      으로 받아 들이는 형식이다.
   2) 물리적 확장(PE:Physical Extents): 일종의 블럭같은 것으로 실제 데이터가 저장되는 공간을
                                       말한다. 보통 1PE가 약 4MB정도 차지한다.
   3) 볼륨그룹(VG:Volume Group): 물리적 볼륨이 모여서 하나의 VG를 이룬다. 이것은 더 크게 말하
                                면 지정한 크기의 PE가 모여 생성되는 하나의 큰 덩어리라고 할 수
                                있다.
   4) 논리적볼륨(LV:Logical Volume): 이 논리적 볼륨이 우리가 흔히 쓰는 정규파티션과 같다. 실제
                                    만들어서 사용하는 것이 바로 이 LV이다.

2. LVM 설정하기
(1) 설명: /dev/hda8(약 800MB)과 /dev/hda9(약 800MB)을 lvm이라는 볼륨그룹으로 생성하고 1.2GB는
          /data라는 디렉토리로 400MB는 /backup으로 구성해보자. 여기서 /data는 처음에 1GB로
          할당하고 추가로 영역을 200MB 확장하는 형태로 구성한다.
(2) 설정1 : 1000MB의 /data 로 구성
   1) fdisk를 이용하여 파티션 속성을 변경: fdisk /dev/hda 실행후에 t, 해당 파티션 선택, 8e, w
                                          을 누르고 재부팅한다.
   2) 디스크에 있는 볼륨그룹을 검색하고 /etc/lvmtab 파일 생성
     [root@www root]# vgscan
   3) 물리적 볼륨(PV:Physical Volume) 생성
     [root@www root]# pvcreate /dev/hda8
     pvcreate -- physical volume "/dev/hda5" successfully created

     [root@www root]# pvcreate /dev/hda9
     pvcreate -- physical volume "/dev/hda8" successfully created
   4) 생성된 PV를 특정한 볼륨그룹(lvm)에 추가시킨다.      // 레드햇8에서는 lvm이라는 볼륨그룹
                                                            생성불가
     [root@www root]# vgcreate lvm /dev/hda8 /dev/hda9
     vgcreate -- INFO: using default physical extent size 4 MB
     vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
     vgcreate -- doing automatic backup of volume group "lvm"
     vgcreate -- volume group "lvm" successfully created and activated
   5) 생성된 볼륨그룹 검사한다.
     [root@www root]# vgdisplay -v lvm
     --- Volume group ---
     VG Name               lvm
     VG Access             read/write
     VG Status             available/resizable
     VG #                  0
     MAX LV                256
     Cur LV                0
     Open LV               0
     MAX LV Size           255.99 GB
     Max PV                256
     Cur PV                2
     Act PV                2
     VG Size               1.66 GB
     PE Size               4 MB
     Total PE              424
     Alloc PE / Size       0 / 0
     Free  PE / Size       424 / 1.66 GB
     VG UUID               RBimFr-2W6o-O6Wr-E4Ox-egs1-z87V-cha1DA

     --- No logical volumes defined in "lvm" ---


     --- Physical volumes ---
     PV Name (#)           /dev/hda8 (1)
     PV Status             available / allocatable
     Total PE / Free PE    212 / 212

     PV Name (#)           /dev/hda9 (2)
     PV Status             available / allocatable
     Total PE / Free PE    212 / 212
   6) 논리적 볼륨(LV:Logical Volume) 생성
     [root@www root]# lvcreate -L 1000M -n data lvm
     lvcreate -- doing automatic backup of "data"
     lvcreate -- logical volume "/dev/lvm/data" successfully created
   7) LV생성확인
     [root@www root]# lvscan
     lvscan -- ACTIVE            "/dev/lvm/data" [1000 MB]
     lvscan -- 1 logical volumes with 1000 MB total in 1 volume group
     lvscan -- 1 active logical volumes
   8) VG 확인
     [root@www root]# vgdisplay -v lvm
     --- Volume group ---
     VG Name               lvm
     VG Access             read/write
     VG Status             available/resizable
     VG #                  0
     MAX LV                256
     Cur LV                1
     Open LV               0
     MAX LV Size           255.99 GB
     Max PV                256
     Cur PV                2
     Act PV                2
     VG Size               1.66 GB
     PE Size               4 MB
     Total PE              424
     Alloc PE / Size       250 / 1000 MB
     Free  PE / Size       174 / 696 MB
     VG UUID               RBimFr-2W6o-O6Wr-E4Ox-egs1-z87V-cha1DA

     --- Logical volume ---
     LV Name                /dev/lvm/data
     VG Name                data
     LV Write Access        read/write
     LV Status              available
     LV #                   1
     # open                 0
     LV Size                1000 MB
     Current LE             250
     Allocated LE           250
     Allocation             next free
     Read ahead sectors     1024
     Block device           58:0
    

     --- Physical volumes ---
     PV Name (#)           /dev/hda8 (1)
     PV Status             available / allocatable
     Total PE / Free PE    212 / 0

     PV Name (#)           /dev/hda9 (2)
     PV Status             available / allocatable
     Total PE / Free PE    212 / 174
      => 논리적 볼륨부분이 나타나고 물리적 볼륨에서 /dev/hda8은 모두 사용중인 것으로 나타난다.
   9) 파일시스템 생성
     [root@www root]# mkfs -t ext3 /dev/lvm/data
   10) 마운트하여 사용한다.
      [root@www root]# mount -t ext3 /dev/lvm/data /data
(3) 참고
   1) 설명: LVM을 시스템 재부팅후에도 사용하려면 /etc/fstab파일에 등록하면 된다.
   2) 예
     /dev/lvm/data              /data                ext3    defaults        0 0
(4) 설정2: /data 디렉토리 200MB 추가하기
   1) 설명: /data를 추가하는 방법에는 lvextend 명령을 이용하는 방법과 e2fsadm 명령을 사용하는
           방법 2가지가 있다. 이 두 방법 중 하나로 Logical Volume의 용량을 늘리고, lvscan
           명령을 이용하여 확인한다.
   2) 방법1: lvextend 사용하기
    ㄱ. [root@www root]# lvextend -L +200M /dev/lvm/data
          => 기존의 용량에 추가로 200MB를 할당한다.
    ㄴ. [root@www root]# lvscan
          => LV용량이 늘어난 것을 확인할 수 있다.
    ㄷ. 참고: lvextend로 LV에 할당된 용량을 늘렸다고 하더라도, 해당 디바이스를 다시 마운트하고
             df -h 명령으로 확인해보면 늘어나지 않았음을 알 수 있다. df는  파일시스템 관련
             명령으로 실제 파일시스템이 구성된 영역에 대해 인식한다. lvextend이후에 fsck나
             resize2fs 등의 명령이 추가로 필요하다.
        예) umount /dev/lvm/data
            e2fsck -f /dev/lvm/data
            resize2fs -f /dev/lvm/data
   3) 방법2: e2fsadm 명령이용하기
     [root@www root]# e2fsadm -L +200M /dev/lvm/data
       => e2fsadm 명령은 lvextend 수행후 resize2fs 등을 자동으로 해준다.
(5) 설정3: 남은 공간(약 400MB)를 /backup 디렉토리로 사용하기
   1) 설명: 남은 공간을 확인하려면 vgdisplay -v 명령을 내려서 Free PE값을 확인하고 해당 PE값을
           할당하는 것이 좋다. lvcreate 로 남은 PE값을 지정하고 Logical Volume을 생성한다.
   2) 방법
    ㄱ. [root@www root]# lvcreate -l 124 -n backup lvm
         => lvm이라는 볼륨그룹에 backup 이라는 Logical Volume을 생성하고 크기는 약 124PE
          (약 496MB)를 할당한다.
    ㄴ. [root@www root]# mkfs -t ext3 /dev/lvm/backup
         => 파일시스템을 생성한다.
    ㄷ. [root@www root]# mount -t ext3 /dev/lvm/backup /backup
         => 마운트하여 사용한다.

3. LVM 관련명령어
(1) vgscan
   1) 설명: 디스크에 있는 볼륨그룹(VG:Volume Group)를 검색하여 /etc/lvmtab 파일과 lvm관련 데이타
          파일을 /etc/lvmtab.d디렉토리에 생성한다. fdisk를 이용하여 파티션을 속성을 LVM으로
          지정한 후에 이 명령을 사용한다.
   2) 사용법
     vgscan
(2) pvcreate
   1) 설명: 물리적 볼륨(PV:Physical Volume)을 생성하는 명령어이다. fdisk를 이용하여 파티션을
           분할하고 LVM 속성으로 지정한 뒤에 해당 파티션을 PV로 만들 때 사용하는 명령이다.
   2) 사용법
     pvcreate [option] 디바이스명
   3) option
     -ff : 강제로 생성할 때 쓴다.
   4) 사용예
    ㄱ. [root@www root]# pvcreate /dev/hdb1
          => /dev/hdb1을 물리적 볼륨으로 생성한다.
    ㄴ. [root@www root]# pvcreate -ff /dev/hdb2
          => /dev/hdb2를 오류 등을 무시하고 물리적 볼륨으로 생성한다.
(3) vgcreate
   1) 설명: 볼륨그룹을 생성하는 명령어로 생성된 PV를 지정한 볼륨그룹에 포함시키면서 생성한다.
   2) 사용법
     vgcreate [option] 볼륨그룹명 디바이스명 디바이스명
   3) option
     -s 사이즈[kKmMgGtT]: PE(물리적확장:Physical Extends]의 크기를 지정한다.
   4) 사용예
    ㄱ.[root@www root]# vgcreate lvm00 /dev/hda7 /dev/hdb1
        => lvm00 이라는 볼륨그룹을 생성하고 /dev/hda7, /dev/hdb1 이라는 PV를 포함시킨다.
    ㄴ.[root@www root]# vgcreate -s 16M lvm00 /dev/hda7 /dev/hdb1
         => lvm00 이라는 볼륨그룹을 생성하고, PE의 크기를 16MB로 지정하면서 /dev/hda7,
           /dev/hdb1 이라는 PV를 포함시킨다.
(4) vgdisplay
   1) 설명: 볼륨그룹의 속성과 정보를 보여주는 명령어이다.
   2) 사용법
     vgdisplay [option] [볼륨그룹명]
   3) option
     -v: 좀 더 자세히 보여주는 옵션으로 Volume Group이외에 Logical Volume과 Physical Volume도
        같이 보여준다.
   4) 사용예
    ㄱ. [root@www root]# vgdisplay
         => Volume Group의 내용을 보여준다.
    ㄴ. [root@www root]# vgdisplay -v lvm00
         => lvm이라는 볼륨그룹의 내용을 자세히 보여준다.
(5) lvcreate
   1) 설명: 볼륨그룹안에 LV(Logical Volume)을 생성하는 명령이다.
   2) 사용법
     lvcreate 옵션 볼륨그룹명
   3) option
     -L: LV의 사이즈를 지정하는 옵션으로 K(kilobytes), M(megabytes), G(gigabytes), T(terabyt
        es) 단위를 붙여 지정가능하다.
     -l: LV의 사이즈를 지정하는 옵션으로 pe의 개수로 용량을 지정한다. 참고로 보통 1pe당 4MB
        이다. (참고로 소문자 L임)
     -n: LV의 이름을 지정하는 옵션이다.
     -i: RAID 0같은 stripe 사용시 볼륨이름을 지정하는 옵션이다.
     -I stripe_size: 스트라이프되는 크기를 지정한다. 기본단위가 kilobytes이고 크기는 반드시
                    2의 배수(2^n: n값은 2부터 9)로 지정해야 한다.
     -s: 유동적인 디렉토리 백업에 유용한 snapshot LV를 생성하는 옵션이다.
   4) 사용예
    ㄱ. [root@www root]# lvcreate -L 2000M -n backup lvm00
         => lvm00이라는 볼륨그룹에 backup라는 이름으로 2Gigabytes 용량으로 LV을 생성한다.
           이 경우 /dev/lvm00/backup이라는 디바이스파일이 생성된다.
    ㄴ. [root@www root]# lvcreate -l 250 -n data lvm00
         => lvm00이라는 볼륨그룹에 data라는 이름으로 250pe(약 1GB)용량으로 LV을 생성한다.
           이 경우 /dev/lvm00/data라는 디바이스파일이 생성된다.
    ㄷ. [root@www root]# lvcreate -i 2 -L 1G -n striped_lv lvm00
         => /dev/lvm00/striped_lv 라는 디바이스파일을 생성하고 볼륨 2를 부여한다.
    ㄹ. [root@www root]# lvcreate -s -L 500M -n snap /dev/lvm00/lvmdata4
         => /dev/lvm00/lvmdata4의 snapshot LV인 /dev/lvm00/snap를 500MB 크기로 생성한다.
(6) lvscan
   1) 설명: 디스크에 있는 Logical Volume을 찾아준다.
   2) 사용법
     lvscan [option]
   3) option
     -v: 정보를 자세히 보여준다.
   4) 사용예
     lvscan
(7) lvdisplay
   1) 설명: Logical Volume의 정보를 보여준다.
   2) 사용법
     lvdisplay [option] LV명
   3) option
     -v: 정보를 자세히 보여준다.
   4) 사용예
     [root@www root]# lvdisplay -v /dev/lvm00/data
       => /dev/lvm00/data라는 LV의 정보를 자세히 보여준다.
(8) vgextend
   1) 설명: 미리 생성된 Volume Group에 추가로 Phycical Volume을 추가할 때 사용한다.
   2) 사용법
     vgextend 볼륨그룹명 새PV명
   3) 사용예
     [root@www root]# vgextend lvm00 /dev/hdc1
       => lvm00이라는 볼륨그룹에 /dev/hdc1을 추가한다.
(9) vgreduce
   1) 설명: 볼륨그룹에 있는 Physical Volume을 삭제하는 명령이다. 물론 해당 PV의 PE가 할당되어
           있으면 제거되지 않는다.
   2) 사용법
     vgreduce [option] 볼륨그룹명 PV명
   3) option
     -a : 특별한 PV명이 없을 경우에 비어있는 PV를 모두 제거한다.
   4) 사용예
     [root@www root]# vgreduce lvm00 /dev/hdc1
       => lvm00이라는 볼륨그룹에서 /dev/hdc1을 삭제한다.
(10) lvextend
   1) 설명: Logical Volume의 용량을 확장하는 명령이다.
   2) 사용법
     lvextend 옵션 [볼륨그룹명] LV명
   3) option
     -l +사이즈: 지정한 PE수만큼 용량을 늘린다.
     -L +사이즈[kmgt]: 지정한 사이즈만큼 용량을 늘린다. 단위를 표시하지 않으면 기본 Megabytes
                      단위이다.
   4) 사용예
     [root@www root]# lvextend -L +200M /dev/lvm00/data
       => 기존의 용량에 추가로 200MB를 할당한다.
(11) lvreduce
   1) 설명: Logical Volume의 용량을 줄이는 명령이다. 늘이는 경우와는 다르게 줄이는 경우에는
           데이터가 파괴되므로 주의해야 하고, 파괴된 경우에는 다시 mkfs해서 사용해야 한다.
   2) 사용법
    lvreduce 옵션 [볼륨그룹병] LV명
   3) option
     -l -사이즈: 지정한 PE수만큼 용량을 줄인다.
     -L -사이즈: 지정한 사이즈만큼 용량을 줄인다. 단위를 표시하지 않으면 기본 단위는 Megabytes
                이고, 사이즈단위로는 kKmMgGtT를 사용할 수 있다.
   4) 사용예
     [root@www root]# lvreduce -L -500M /dev/lvm00/data
      => /dev/lvm00/data의 용량을 500MB 줄인다.
(12) lvrename
   1) 설명: 논리적 볼륨의 이름을 변경하는 명령이다.
   2) 사용법
      lvrename 원_논리적볼륨_절대경로 새로운_논리적볼륨_절대경로
      lvrename 볼륨그룹명 원_논리적볼륨명 새로운_논리적볼륨명
   3) 사용예
    ㄱ. [root@www root]# lvrename /dev/lvm00/lvmdata3 /dev/lvm00/data3
         => /dev/lvm00/lvmdata3 라는 논리적 볼륨의 이름을 /dev/lvm00/data3로 바꾼다.
    ㄴ. [root@www root]# lvrename lvm00 lvmdata3 data3
         => /dev/lvm00/lvmdata3 라는 논리적 볼륨의 이름을 /dev/lvm00/data3로 바꾼다. 결과적으
           로 바로 위의 ㄱ번 예제와 같다.
(13) lvremove
   1) 설명: 논리적 볼륨을 제거하는 명령이다. 사용중인 경우에는 제거되지 않으므로 미리 umount를
           해야 한다.
   2) 사용법
     lvremove 논리적볼륨_절대경로
   3) 사용예
     [root@www root]# lvremove /dev/lvm00/lvmdata3
      => /dev/lvm00/lvmdata3라는 논리적 볼륨을 제거한다.
(14) vgchange
   1) 설명: 볼륨그룹을 속성을 변경하는 명령으로 볼륨그룹을 사용가능여부, 최대 LV 갯수등을 변경
           할 수 있다.
   2) 사용법
     vgchange 옵션 볼륨그룹명
   3) option
     -a y|n : 볼륨그룹의 사용여부를 지정한다.
     -l 갯수: 해당 볼륨그룹에 생성할 수 있는 최대 Logical Volume수를 지정한다.
   4) 사용예
    ㄱ. [root@www root]# vgchange -a y lvm00
         => lvm00이라는 볼륨그룹을 활성화시킨다.
    ㄴ. [root@www root]# vgchange -a n lvm00
         => lvm00이라는 볼륨그룹을 비활성화시킨다. 사용중이면 중지시킬 수 없다.
    ㄷ. [root@www root]# vgchange -l 100 lvm00
         => lvm00이라는 볼륨그룹을 최대 Logical Volume수를 100개로 지정한다.
(15) vgremove
   1) 설명: 볼륨그룹을 제거하는 명령이다. 사용중이면 제거가 되지 않는 umount하고 속해있는 LV를
           전부 제거해야 한다.
   2) 사용법
     vgremove 볼륨그룹명
   3) 사용예
     [root@www root]# vgremove lvm00
      => lvm00이라는 볼륨그룹을 삭제한다.
(16) pvmove
   1) 설명: 물리적확장인 PE를 이동시키는 명령이다.
   2) 사용법
     pvmove [option] 장치명 [장치명]
   3) option
     -v: 해당 장치의 정보를 보여준다.
   4) 사용예
    ㄱ. pvmove -v /dev/hda15
         => /dev/hda15의 정보를 보여준다.
    ㄴ. pvmove /dev/hda14 /dev/hda15
         => /dev/hda15의 PE의 내용을 /dev/hda15에 그대로 이동한다.
(17) resize2fs
   1) 설명: 파일시스템의 크기를 늘이거나 줄이는 명령이다. 단, 변경하고자 하는 파티션의 크기는
           미리 늘이거나 줄여져 있어야 한다. resize2fs 명령으로 파티션의 크기까지 조절할 수
           없다.
   2) 사용법
    resize2fs [option] 장치명 [size]
   3) option
     -f: resize2fs는 파일시스템을 분석하여 크기를 늘이거나 줄이는 명령이다. 보통 이 명령을
        수행하기 위해서는 fsck작업을 통해 파일시스템 분석이 되어야 하는데 이 옵션을 사용하면
        fsck작업없이 한번에 가능하다.
   4) 사용예
     ㄱ. resize2fs /dev/lvm00/lvmdata
          => 파일시스템의 크기를 조정한다.
     ㄴ. resize2fs -f /dev/lvm00/lvmdata2
          => fsck 등의 명령없이 파일시스템을 검사하고 파일시스템의 크기를 조정한다.
(18) e2fsadm
   1) 설명: 논리적볼륨의 확장/축소와 동시에 파일시스템의 크기도 조정하는 명령이다.
           즉 lvcreate, lvreduce, resize2fs 등의 명령어 기능을 한번에 한다.
   2) 사용법
     e2fsadm option [+|-]논리적볼륨크기 논리적볼륨_절대경로
   3) option
     -l -/+사이즈: 지정한 PE수만큼 용량을 줄이거나 늘린다.
     -L -/+사이즈: 지정한 사이즈만큼 용량을 줄이거나 늘린다. 단위를 표시하지 않으면
                  기본 단위는 Megabytes이고, 사이즈단위로는 kKmMgGtT를 사용할 수 있다.
   4) 사용예
    ㄱ. [root@www root]# e2fsadm -L +100M /dev/lvm00/lvmdata2
         => /dev/lvm00/lvmdata2의 크기를 100M 확장한다.
    ㄴ. [root@www root]# e2fsadm -L -100M /dev/lvm00/lvmdata2
         => /dev/lvm00/lvmdata2의 크기를 100M 축소한다.
    ㄷ. [root@www root]# e2fsadm -L 50M /dev/lvm00/lvmdata2
         => /dev/lvm00/lvmdata2의 크기를 50M로 한다. 그러나, 기본 PE가 4MB 단위이므로 52MB로
           생성한다.

4. LVM 활용하기
(1) 두 개의 디스크를 하나의 striped LV로 만들기
   1) 개요: LVM과 RAID는 물리적인 여러 디스크를 묶어 하나의 논리적인 디스크처럼 사용할 수
          있다는 점에서 유사하다. 그러나, LVM은 손쉽게 확장이 가능하고, 관리가 용이하다는
          장점이 있고, RAID는 밀러링(Mirroring), 스트라이핑(Striping)등 다양한 형태가
          존재한다. LVM도 RAID-0 처럼 stripe 설정을 하여 여러 디스크를 하나의 디스크로
          묶어서 사용이 가능하다.
   2) 방법
    ㄱ. 120G 짜리 두개의 디스크를 PV로 생성한다.
       예) pvcreate /dev/hdb /dev/hdc
    ㄴ. VG를 생성한다.
       예) vgcreate vg0 /dev/hdb /dev/hdc
    ㄷ. LV를 생성한다.
       예) lvcreate -i 2 -l 4 -L 228G -n sripted_lv vg0
            => 228GB짜리 스트라이핑 LV인 /dev/vg0/striped_lv가 생성된다. -i는 사용되는 PV갯수
              를 지정하는 옵션이고, -I는 저장되는 스트라이프 사이즈를 4KB로 지정하는 옵션이다.
    ㄹ. 파일시스템 생성
       예) mke2fs -j /dev/vg0/striped_lv
    ㅁ. 마운트
       예) mount -t ext3 /dev/vg0/striped_lv /data
(2) 새로운 디스크로 PV 교체하기
   1) 개요: 사용중인 디스크를 용량이 더 큰 새로운 디스크로 교체한 경우 기존디스크의 내용을
           포함하여 PE를 그대로 보존하면서 교체할 수 있다.
   2) 방법
    ㄱ. 기존의 디스크가 /dev/hdc1이고, 새롭게 장착할 디스크가 /dev/hdd1이라고 할 때 먼저
       /dev/hdd1을 PV로 생성한다.
       예) pvcreate /dev/hdd1
    ㄴ. 볼륨그룹에 /dev/hdd1을 포함시킨다.
       예) vgextend lvm00 /dev/hdd1
    ㄷ. 기존의 디스크인 /dev/hdc1의 PE를 /dev/hdd1으로 옮긴다.
       예) pvmove /dev/hdc1 /dev/hdd1
    ㄹ. 기존의 디스크를 볼륨그룹에서 제거
       예) vgreduce lvm00 /dev/hdc1
   3) 참고: pvmove를 이용하면 기존의 PE대로 새로운 디스크에 기존의 디스크의 PE를 그대로 옮겨와
           데이터를 보존할 수 있다. 그러나, 새로운 디스크가 기존의 디스크보다 용량이 클 경우
           나머지 공간을 사용하려면 e2fsadm이나 lvextend, resize2fs를 사용하여 LV를 증가시켜야
           한다. 기존의 LV명을 그대로 승계하므로, 기존의 LV 장치명에 lvextend하면 된다.
(3) snapshot LV를 이용한 백업
   1) 개요: /var이나 데이터베이스관련 디렉토리를 백업할 때 문제점은 데이터의 변동이 심하다는
           것이다. 만약 관련 디렉토리를 LVM으로 구성했을 경우 snapshot LV를 만들어 기존의
           데이터를 고정한 뒤에, snapshot LV의 디바이스파일을 마운트하여 백업하면 좀 더 안전
           하게 백업할 수 있다.
   2) 방법
    ㄱ. 사용중인 LV의 snapshot LV를 생성한다.
       예) lvcreate -s -L 500M -n snap /dev/lvm00/lvmdata4
            => /dev/lvm00/snap 이라는 디바이스파일이 생성된다.
    ㄴ. 생성된 snapshot LV를 마운트한다.
       예) mount -t ext3 /dev/lvm00/snap /backup
    ㄷ. 해당 디렉토리를 백업한다.
       예) tar zcvf backup.tar.gz /backup
    ㄹ. 백업한 후 해당 장치를 제거한다.
       예) umount /backup          또는 umount /dev/lvm00/snap
           lvremove /dev/lvm00/snap
   3) 참고: 생성한 snapshot LV는 사용후에 제거하도록 한다. 그냥 두면 약간의 성능 저하를 유발
           하므로 꼭 제거하도록 한다.

5. LVM 운영과 오류분석
(1) 물리적 볼륨(PV)생성과 오류
   1) 개요: PV를 생성하기 위해 pvcreate 실행하면 간혹 파티션 정보로 인하여 오류가 발생하는
           경우가 있다. 특히 다른 용도로 사용했던 파티션을 fdisk를 이용하여 파티션을 지우고
           다시 생성하여도 계속 오류가 발생하는 경우가 있다. 이 경우 pvcreate 명령에서 -ff
           옵션을 사용하되지만, pvcreate 전에 dd명령으로 파티션 정보를 깨끗히 지워주는 것이
           좋다.
   2) 방법
    ㄱ. [root@www root]# dd if=/dev/zero of=/dev/hda14
    ㄴ. [root@www root]# pvcreate /dev/hda14
(2) 논리적 볼륨(LV)확장과 크기
   1) 개요: 1GB를 할당하여 /dev/lvm00/lvmdata라는 LV를 생성하고 /lvmdata라는 디렉토리로 마운트
           하여 사용하였다. 공간이 부족하여 lvextend로 1GB를 추가로 할당하여 lvscan 명령으로
           확인하면 증가되었다고 나오지만 'df -h' 등의 명령으로 살펴보면 실제사용공간은 늘어
           나지 않음을 알 수 있다. 이 때는 파일시스템 관련명령어인 resize2fs로 크기를 재조정
           해야 한다.
   2) 방법
    ㄱ. umount /lvmdata
         => 사용중인 /lvmdata를 중지시킨다.
    ㄴ. lvextend -L +1G /dev/lvm00/lvmdata
         => 논리적볼륨을 1GB 증가시킨다. 물론 lvextend 명령은 파일시스템을 조작하는 것이 아니
           므로 umount하지 않아도 된다.
    ㄷ. e2fsck -f /dev/lvm00/lvmdata
         => 파일시스템을 검사한다.
    ㄹ. resize2fs /dev/lvm00/lvmdata
         => 변경된 크기로 재조정한다.
           참고로 ㄷ,ㄹ작업을 한번에 resize2fs -f /dev/lvm00/lvmdata 라고 해도 된다.
    ㅁ. mount -t ext3 /dev/lvm00/lvmdata /lvmdata
         => 다시 마운트한다.
    ㅂ. df -h
         => 용량이 변경되었는지 확인한다.
   3) 참고
    ㄱ. 설명: LV확장을 하는 lvextend와 파일시스템을 확장하는 resize2fs 두 명령을 하나의 명령
             으로 가능하다. e2fsadm 명령을 이용하면 된다. 물론 e2fsadm명령을 사용하기 전에
             umount해야 한다.
   ㄴ. 사용예
      [root@linux224 root]# e2fsadm -L +1G /dev/lvm00/lvmdata
(3) lvm정보의 확인: lvm 상태의 확인 /proc/lvm 디렉토리에서도 가능하다. 이 디렉토리 안쪽에
                    VGs라는 디렉토리가 생성되고, 그 안에 LVs, PVs 디렉토리에서 각각 논리적
                    볼륨과 물리적볼륨에 대한 생성내역을 빈파일로 같이 생성하여 목록 등을
                    확인할 수 있다.
(4) LVM 구성시 실패후 재구성하기
   1) 개요: LVM 구성시 VG생성하기 위해 vgcreate하면 오류가 나는 경우가 있는데, 일단 lvm이라
           는 이름으로 VG생성시 레드햇 리눅스버전에 따라 않되는 경우가 있으므로 lvm0등으로
           생성한다. 또한, 처음 생성 실패후 같은 VG이름으로 재시도하는 경우에는 기존의 정보
           를 삭제해야 가능하다.
   2) 방법
    ㄱ. 명령어를 이용하는 방법
        예) vgremove lvm0
    ㄴ. 수동으로 삭제하는 경우
      a. /etc/lvmtab 삭제
       예) rm /etc/lvmtab
      b. /etc/lvmtab.d 디렉토리 삭제
       예) rm -rf /etc/lvmtab.d
      c. /etc/lvmconf 파일의 내용삭제
       예) rf -rf /etc/lvmconf/*
      d. 생성된 디바이스 삭제: vgcreate 명령을 이용하여 볼륨그룹을 생성하면 '/dev/볼륨그룹명'
                              디렉토리에 관련 디바이스가 생성된다. 이 디바이스 파일을 삭제하면
                              된다.

예) rm -rf /dev/lvm0

출처 : 대전국제IT교육센터 정성재 강사

 

1. 리눅스와 보안
리눅스는 UNIX를 모태로 하여 만들어진 운영체제이다. 유닉스에 비해 다양한 하드웨어의 지원, 강
력한 네트워크 기능, 무료 공개 소프트웨어등 여러가지 이점을 가지고 급속도로 보급되어가고 있다.
리눅스의 오픈 정책으로 인하여, 운영체제 커널에서부터 일반 사용자 프로그램까지 거의 모든 것이
공개되어 있다. 이러한 정책은 일반 PC에서도 서버로 사용할 수 있게 되었다. 하지만 소스의 공개
로 인하여 해커들이 쉽게 버그를 찾아내고 테스트할 수 있어 주요 공격 대상이 될 수도 있다. 보안
과 관련된 것은 리눅스뿐만아니라, 윈도우즈계열도 위험하기는 마찬가지이다. 오히려 리눅스는 많은
사람들의 테스트와 계속적인 버그 리포트로 보안관련된 모든 것들도 무료로 지원받을 수 있다. 그러
나, 리눅스는 서버관리자가 지속적인 관심을 가지고 업데이트도 하고, 보안에 관한 기본 설정 또한
할 수 있는 만큼 강화해야 한다.


2. 물리적보안 설정
보안에 있어 가장 큰 선결조건은 바로 물리적 보안이다. 아무리 소프트웨어적으로 보안을 철저히
했더라고 누구나 쉽게 접근이 가능하다면 소용이 없다. 일단 중요한 시스템이라면 관계자이외의
접근을 막아야 한다. 그 다음에 해야 될 것이 BIOS보안이다. 일단 CMOS SETUP에서 플로피디스크나
CD-ROM드라이브로의 부팅을 불가능하게 설정해야 되며 패스워드를 설정하여 시스템을 보호해야 한
다.

3. 불필요한 서비스의 제거
리눅스 설치후에 불필요한 서비스(예를 들면 서버전용으로 사용한다면 X 윈도우도 필요없다)를 찾
아 제거하는 것이 중요하다. 응용프로그램의 버그를 통한 해킹 시도도 빈번하므로 이러한 서비스들
만 제거하더라도 위험요소를 많이 줄일 수 있다.

4. 리눅스 파일과 보안 설정
(1) /etc/lilo.conf : 만약 리눅스가 부팅할 때 부트 프롬프트에서 'single, 'linux single', 'lin
                     ux -s'등으로 부팅하면 1인용 싱글 유저환경으로 들어가게 된다. 이 경우의
                     보안상의 문제는 시스템이 패스워드를 물어 보지 않는데 있다. 이런 상황을
                     막으려면 password를 설정해야 한다. /etc/lilo.conf파일안에 다음과 같이 두
                     라인을 설정한다.
                     password=1234
                     이렇게 설정하면 항시 암호를 물어보고, 1234라고 입력해야 한다. 이렇게 설정
                     하면 모든 레벨에서 암호를 입력해야 가능하다. 일반모드는 그대로 로그인하고
                     특정계층, 즉 /etc/inittab파일에서 기본설정된 런레벨이 아닌경우에만 암호를
                     묻도록 설정할 수도 있다. 이 경우에는 'restricted'라고 추가로 입력하면 된
                     다.
                     password=1234
                     restricted
                     또한, 이렇게 설정했을 경우에는 일반사용자들이 볼 수 없도록 이 파일의 권한
                     도 제한해야 된다.

(참고1) chattr(change attrib)
   1) 설명: Red Hat리눅스에서 사용되는 ext2파일시스템에서만 사용되는 명령어로 루트사용자도
           파일을 변경할 수 없도록 설정하는 명령어이다.
   2) 사용법
     chattr option  filename
   3) option: immnutable 욥션을 사용한다.
     +i : 파일을 수정, 삭제, 이름의 변경과 링크도 만들 수 없도록 설정한다.
     -i : 특수설정을 해제한다.
   4) 특징
     ㄱ. ls명령으로도 설정된 것이 나타나지 않는다.
     ㄴ. 설정유무는 lsattr명령으로 확인해야 한다.
   5) 사용예
     ㄱ. [root@www /etc]# chattr +i /etc/lilo.conf
           => 불변하도록 설정한다.
     ㄴ. [root@www /etc]# lsattr /etc/lilo.conf
         ---i-------- /etc/lilo.conf
           => chattr 명령이 설정되어 있음을 알 수 있다.

(2) /etc/securetty : 콘솔모드에서 root 사용자가 로그인할 수 있는 터미널창의 리스트를 나타낸
                     다. 사용자 로그인과 관련된 데몬이 login 프로그램이다. 이 login프로그램이
                     참조하는 파일이다. 만약 tty1 으로 root사용자의 로그인을 막으려면 그 항목
                     을 삭제하거나 맨앞에 '#'을 표시하면 된다. 참고로 telnet으로 root를 허가하
                     려면 이 파일을 삭제하거나 이 파일안에 pts/0 등을 적어주면 로그인이 가능하
                     다. 그러나, 절대 이러한 설정은 하면 안된다.
(3) /etc/fstab
   1) 설명: /etc/fstab파일은 해당 파티션에 대한 정보를 담고 있는 파일이다. 이 파일을 이용하여
           보안을 강화할 수 있다. 보통 /home과 /var파티션 등에 SUID 및 SGID의 파일을 제한한다.
   2) fstab에서 보안과 관련된 옵션
     - default: 다음과 같이 네가지의 기본값을 가지고 있다.
      a. 부팅할 때 mount -a 명령으로 마운트할 수 있다.
      b. 읽기 및 쓰기 파일시스템으로 마운트된다.(read-write)
      c. setuid와 setgid를 사용할 수 있다. (suid)
      d. 문자장치와 블록장치를 모두 지원한다.
     - usrquota: 사용자의 용량을 제한하는 disk quota를 사용할 때 해당 파티션에 적는다.
     - noquota: 해당파티션에서 사용자들의 quota를 설정하지 않는다.
     - nosuid: 해당파티션에서 SUID나 SGID를 설정을 허용하지 않는다.
     - nodev: 해당파티션에서 문자나 특별한 장치(디바이스)를 허용하지 않는다.
     - noexec: 해당파티션에서 모든 실행 파일들을 실행할 수 없다.
     - suid: 해당 파티션에서 SUID나 SGID의 사용을 허가한다.
     - ro: 해당파티션을 읽기전용(read-only)으로 설정한다.
     - rw: 해당파티션을 읽고 쓰기(read-write)모드로 설정한다.
   3) 사용예
     LABEL=/cache            /cache                  ext3    defaults,nodev        1 2
     LABEL=/home             /home                   ext3    defaults,nosuid        1 2
     LABEL=/tmp              /tmp                    ext3    defaults,nosuid,noexec        1 2
   4) 참고: 변경한 파일시스템 내용을 재부팅없이 mount하기
     mount -o remount /home
(4) /etc/issue : 콘솔창으로 접속했을 때 메시지를 나타내주는 파일로 보통 리눅스에서는 커널의
                 버전의 출력되므로 커널버전의 유출을 막는다.
(5) /etc/issue.net : telnet등 원격으로 접속했을 때 메시지를 나타내주는 파일로 역시 커널의 버
                     전이 출력되므로 내용을 지우거나 변경하여 커널버젼의 유출을 막는다.

(참고2) /etc/issue와 /etc/issue.net의 설정
   이 파일은 현재 리눅스에서는 재부팅하면 다시 리눅스 디스트리뷰더가 지정한 값이 들어가도록
  /etc/rc.d/rc.local파일에 등록되어 있다. 따라서 현재 시스템에서 값을 변경하면 변경한 이후로
  로그인한 사용자에게는 그 내용이 보이지만 만약 시스템을 재부팅하게 되면 다시 기본값이 되므로
  계속적으로 그 값이 반영되도록 하려면 /etc/rc.d/rc.local파일에서 이 두 파일의 관련 부분을
  삭제해야 한다.

(6) /etc/bashrc : 사용자의 파일생성 권한을 설정하는 umask를 지정하는 파일로 가능한 제한된 값
                  으로 조정한다. 주로 쓰이는 값은 022, 033이고, 가장 제한적인 값은 077이다.
(7) /etc/login.defs: 사용자 패스워드의 길이 등을 설정할 수 있는 파일이다. 이 파일의 항목중에
                     'PASS_MIN_LEN    5'의 값을 수정하여 패스워드의 최소길이를 늘이도록 한다.
(8) /etc/profile: root로 로그인한 관리자가 일정시간 동안 작업을 하지 않았을 경우에 접속이
                  끊기도록 설정한다.
                 'TMOUT=시간(초단위)'를 추가한다. 일반사용자는 '~/.bashrc'파일에 넣어 개인적
                  으로 설정할 수 있다.
(9) /etc/security/console.apps: 이 디렉토리에는 일반사용자가 콘솔을 통해 접근할 수 있는 명령
                                어가 들어있다. shutdown, reboot, halt등 시스템과 직접적으로
                                연관있는 명령어를 삭제한다.
(10) /etc/services: 접속포트와 관련있으므로 chattr명령을 사용하여 보호하도록 한다.
(11) /etc/pam.d/su: su(substitute user)명령을 지정한 사용자 이외에 할 수 없도록 설정한다.
                    다음과 같은 두 줄을 삽입한다.
   예) auth sufficient /lib/security/pam_rootok.so debug
       auth required /lib/security/pam_wheel.so group=wheel
        => 이 설정은 su명령으로 root가 될 수 있는 사용자를 wheel이라는 그룹 사용자만 허용하도
          록 설정한 것이다.
(12) /etc/inittab: crtl+alt+del키를 눌러도 셧다운이 되지 않도록 한다. 다음과 같은 항을 찾아
                   주석처리한다.
   예)ca::ctrlaltdel:/sbin/shutdown -t3 -r now
(13) /etc/rc.d/init.d: 이 디렉토리에는 시스템이 부팅할 때 띄워야할 데몬관련 스크립트들이 위
                       치하고 있다. 퍼미션을 root권한자만이 읽고, 쓰고, 실행할 수 있는 상태로
                       설정한다.
(14) /etc/nologin: 이 파일을 생성하게 되면 root이외의 다른 사용자는 로그인을 할 수 없게 된다.
                   보통 이 파일안에는 일반사용자가 로그인시 거부될 때 나타나는 메시지가 기록
                   된다.

5. 기초 보안 설정
(1) 리눅스 설치시에 자동으로 생성되는 계정중에 사용하지 않는 계정은 없애도록 한다. lp, adm,
    sync, shutdown, halt, news, uucp, operator, games, gopher, mail, ftp등이 해당된다. 또한
    계정 삭제후에도 동일한 이름으로 그룹이 생성되어 있을 수도 있으니 /etc/group에서도 삭제
    한다.
(2) root계정의 접속 시간 제한 설정
   1) 설명: root로 로그인한 상태에서는 자리를 비우지 말아야 한다. 자리를 비우는 경우에는 로그
           아웃을 하는 것이 좋다. 그러나 로그아웃을 잊는 경우가 있다. 일정시간뒤에 자동으로
           로그아웃이 되게 설정해보자.
   2) 방법
     /etc/profile에 'TMOUT'라는 변수를 이용하여 설정할 수 있다. 기본 단위는 초이다.
(3) 리눅스 단일 사용자모드의 제한
   1) 설명: 부팅시 'LILO:' 프롬프트에서 'linux single', 'linux 1'등을 입력하면 패스워드를 없이
           부팅가능한 단일 사용자 모드로 부팅이 된다. 이 경우에는 루트패스워드를 바꿀 수 있는
           상태가 된다. lilo를 이용하지 않고 이 모드의 접속시에 루트 패스워드를 입력하도록 설
           정하자.
   2) 방법: /etc/inittab파일에서 'id:5:initdefault:'항목 아래에 '--:S:wait:/sbin/sulogin'이라
           고 입력한다. 그러면 리눅스 단일사용자 모드 부팅시에 패스워드를 물어본다.
(4) 섀도우 패스워드는 꼭 사용하도록 한다. 만약 섀도우 패스워드를 사용하지 않을 경우에는
    pwconv명령을 사용하여 섀도우 패스워드를 사용하도록 한다.
(5) SUID, SGID가 설정되어 있는 프로그램을 찾아 관련없는 프로그램에서 set-bit를 제거한다.
   예) find / -type f \( -perm -4000 -o -perm -2000 \) \-exec ls {} \;
       chmod a-s [program]
(6) 쉘을 사용한 기록관리
   1) 설명: bash에서는 자주 사용하는 명령이나 긴 명령들을 다시 사용하는 history기능을 지원
           한다. 보통 ~/.bash_history에 사용자가 사용한 명령을 1000개 저장한다. 시스템자원을
           아끼고 사용기록을 노출하지 않기 위해 bash가 명령을 조금만 저장하도록 설정하고, 로그
           아웃할 경우에는 이 것을 지우도록 한다.
   2) 사용법
     ㄱ. /etc/profile에서 HISTSIZE의 값을 줄인다.
     ㄴ. /etc/skel/.bash_logout파일에 다음과 같이 명령을 추가한다.
        rm -f $HOME/.bash_history
(7) 프로세스, 메모리등 자원의 사용제한
   1) 설명: 일반사용자들이 프로세스와 메모리 사용량을 제한하여 DOS(Denial Of Service attack)를
           하지 못하게 한다.
   2) 사용법
     ㄱ. /etc/security/limits.conf에서 아래부분의 주석을 풀고 설정한다.
        *               soft    core            0
        *               hard    rss             10000
        *               hard    nproc           20
          => root를 제외한 일반사용자들은 core파일을 생성하지 못하고, 메모리사용량은 10MB로
            제한하고, 프로세스는 20개로 제한한다. *는 서버에 login하는 모든 사용자를 말한다.
     ㄴ. /etc/pam.d/login파일에서 아래부분의 추가한다.
        session    required     /lib/security/pam_limits.so
(8) su 명령어 제한하기
   1) 설명: su 명령은 일반사용자가 root사용자로 전환할 수 있는 명령어이다. 이 명령어를 사용자
           에 따라 제한할 수 있다.
   2) 사용법
    ㄱ. /bin/su 명령어의 퍼미션을 변경한다.
       chmod 4750 /bin/su
        => 일반사용자에게는 어떠한 권한도 주지않고, 그룹에는 읽기와 실행권한을 부여한다.
    ㄴ. /bin/su명령어의 사용자 그룹을 변경한다.
       chgrp wheel su
        => su 실행파일의 그룹을 wheel이라는 그룹으로 변경한다.
    ㄷ. su 명령을 사용할 사용자들을 wheel 그룹에 속하게 한다.
      a. 방법 1: 그룹을 관리하는 파일은 /etc/group이다. 이 파일목록중에서 4번째필드가 추가로
                해당 그룹을 사용자를 지정할 때 쓰는 필드이다.
          wheel:x:10:root,posein
           => posein이라는 사용자를 wheel이라는 그룹으로 지정하였다.
      b. 방법 2: usermod 명령을 사용하여 지정한다.
         usermod -G wheel posein
    ㄹ. xinetd 데몬을 다시 구동한다.
       /etc/rc.d/init.d/xinetd restart

출처 : 대전국제IT교육센터 정성재 강사

 

1. 프록시의 개요
  프록시서버는 보통 네트워크 속도가 느린 환경에서 보다 빠른 인터넷을 이용하기 위해 사용한다.
서비스를 하는 서버에 캐시서버를 만들어 자주 방문하는 사이트를 캐시서버에 저장하여 사용자들이
똑같은 사이트를 접속을 시도할 때 캐시서버의 저장된 데이터 정보를 전달해 줌으로써 속도를 빠르
게 한다. 또한 접근통제 등의 네트워크 보안을 유지할 때도 사용할 수 있다.


2. Squid의 개요 및 설치
(1) 개요: 스퀴드는 리눅스에서 사용하는 프록시서버 프로그램으로 HTTP,FTP캐싱을 지원하고, DNS
          검색 등을 지원한다. 관련사이트는 http://www.squid-cache.org이다.
(2) 설치하기
   1) 최신버전중에서 안정버전으로 /usr/local/src디렉토리에 다운로드한다.
     (squid-2.5.STABLE1.tar.gz)
   2) 소스의 압축을 푼다
     [root@mybestone src]# tar zxvf squid-2.5.STABLE1.tar.gz
   3) 압축이 풀린 디렉토리로 이동한다.
     [root@mybestone src]# cd squid-2.5.STABLE1
   4) 설치될 디렉토리만 설정한다.'
     [root@mybestone squid-2.5.STABLE1]# ./configure --prefix=/usr/local/squid
   5) 컴파일한다.
     [root@mybestone squid-2.5.STABLE1]# make
   6) 설치한다.
     [root@mybestone squid-2.5.STABLE1]# make install

3. Squid설치후 생성되는 디렉토리
(1) bin : squid실행과 관련된 스크립트 프로그램이 있다.
(2) etc : squid관련 환경설정파일인 squid.conf가 위치하고 있다.
(3) libexec : 서버운영과 관련된 스크립트 파일이 있는 디렉토리이다.
(4) lib : 프로그램 개발에 필요한 라이브러리 정보를가진다.
(5) man : man명령관련 정보파일을 가진다.
(6) sbin : squid 서버를 실행하고 관리하는 squid라는 명령이 위치하는 디렉토리이다.
(6) share : squid를 사용하면서 생기는 에러 메시지에 대한 정보 파일을 가진다.
(7) var : 로그 파일에 대한 정보를 가진다.

3. Squid 설정
(1) 환경설정파일: 환경설정파일은 squid.conf이다. 소스로 컴파일했을 경우에 전체경로는 /usr/loc
                  al/squid/etc/squid.conf가 된다.
(2) 주요환경설정
   1) http_port 3128
       => 스퀴드 프록시서버의 서비스포트를 지정해준다. 기본값은 3128이다.
   2) cache_mem 8 MB
       => 스퀴드서버에서 사용하는 캐시 사이즈를 설정해준다.
   3) maximum_object_size 4096 KB
       => 캐시 서버에 저장될 수 있는 객체 즉 파일의 크기를 제한해주는 옵션이다.
   4) cache_dir ufs /usr/local/squid/cache 100 16 256
       => 캐시가 저장될 경로를 지정해주는 항목으로 크기와 생성될 하위 1차 및 2차 디렉토리의 수
         를 지정한다. 현재 설정은 /usr/local/squid/cache디렉토리에 캐시데이터들이 최대 100메가
         까지 저장될 수 있고, 캐시가 저장될 1차디렉토리는 16개로 설정하고 그 밑에 2차디렉토리
         수를 256개로 설정한다.
   5) cache_access_log /usr/local/squid/logs/access.log
       => 접근로그를 기록하는 파일을 설정한다.
   6) cache_log /usr/local/squid/logs/cache.log
       => 캐쉬설정에 관한 로그를 기록하는 파일을 설정한다.
   7) cache_store_log /usr/local/squid/logs/store.log
       => 저장되는 로그를 기록하는 파일을 설정한다.
   8) debug_options ALL,1
       => 스퀴드가 동작할 때 오류체크 기능을 사용하여 로그파일에 기록할 수 있게 하는 옵션이다.
         현재 설정은 모든 항목에 대해 기본적인 값만 로그에 남도록 설정한 것이다.
   9) acl all src 0.0.0.0/0.0.0.0
       => ACL은 Access Control의 약자로 프록시 서버에 접근할 수 있는 범위를 설정하는 옵션으로
         http_access와 함께 사용해야 한다. all의 범위는 src옵션으로 지정한 범위는 속하는 네트
         워크를 지정한다. 현재처럼 0.0.0.0/0.0.0.0으로 설정하면 모든 네트워크에 대해서 프록시
         서버에 접근할 수 있다. 자신의 프록시서버에 제한없이 모든 네트워크들이 접근할 수 있도
         록 설정한 후 httpd_access로 프록시 서버사용권한을 부여할 수 있다.
   10) http_access deny all
       => 클라이언트가 프록시 서버에 접속을 허용할 것인지 거부할 것인지 결정해주는 옵션으로
         acl과 함께 사용된다. http_access다음에 all 또는 deny를 지정하고 acl리스트 중 하나를
         지정해 사용한다.
     사용예)
       ㄱ. acl all src 0.0.0.0/0.0.0.0
           http_access allow all
            => 모든 네트워크들이 자신의 프록시서버를 이용할 수 있게 지정한 것이다. 이 경우에는
              네트워크 트래픽을 초래할 수 있다.
       ㄴ. acl members src 192.168.3.0/255.255.255.0
           acl all src 0.0.0.0/0.0.0.0
           http_access allow members
           http_access deny all
            => 192.168.3.0네트워크주소를 members범위로 규정하여 http_access에서 프록시서버
              접속을 허용하고, 다른 네트워크에 대해서는 접속을 거부한다.
   11) cache_mgr webmaster
        => 캐시서버의 관리자 계정을 지정한다.
   12) cache_effective_user nobody
       cache_effective_group nogroup
        => 스퀴드 서버를 작동시킬 유저와 그룹명을 지정해준다. 보통 둘다 nobody로 설정한다.

4. Squid 실행
(1) 데몬 실행
   1) /usr/local/squid/sbin/squid -z
     => 스왑디렉토리를 초기화한다.
   2) /usr/local/squid/sbin/squid
     => 데몬을 띄운다.
(2) 데몬실행시 오류분석
   1) 서버 호스트네임이 없는 경우: squid -z 실행시 나타난다.
     [root@www193 squid]# sbin/squid -z
     FATAL: Could not determine fully qualified hostname.  Please set 'visible_hostname'

     Squid Cache (Version 2.5.STABLE1): Terminated abnormally.
     CPU Usage: 0.008 seconds = 0.002 user + 0.006 sys
     Maximum Resident Size: 0 KB
     Page faults with physical i/o: 245
     Aborted
      => (해결책)
        squid.conf 에 'visible_hostname 호스트이름'을 지정해 준다.
   2) cache 디렉토리가 없는 경우 : squid -z 실행시 나타난다.
     [root@mybestone /usr/local/squid/sbin]# ./squid -z
     2002/12/02 00:28:18| Creating Swap Directories
     FATAL: Failed to make swap directory /usr/local/squid/var/cache: (13) Permission denied
     Squid Cache (Version 2.5.STABLE1): Terminated abnormally.
     CPU Usage: 0.000 seconds = 0.000 user + 0.000 sys
     Maximum Resident Size: 0 KB
     Page faults with physical i/o: 9
      => 해결책
        ㄱ. mkdir /usr/local/squid/var/cache 해서 디렉토리를 생성한다.
        ㄴ. chmod 777 /usr/local/squid/var/cache해서 권한을 설정한다.
   3) logs디렉토리에 권한이 없는경우
     ㄱ.원인: squid 데몬을 띄운 후 클라이언트가 웹브라우저를 띄우고 프록시 서버를 실제적으로
             사용하면 squid 데몬이 죽는 경우가 발생한다. 직접적인 로그기록(프로세스아이디 등)
             을 할 수 없기 때문에 발생한다.
     ㄴ. 해결책 : nobody가 로그를 기록할 수 있도록 설정한다.
        chmod 777 /usr/local/squid/var/logs

5. Squid 서버 실행절차

(1) squid.conf에서 환경설정을 한다.
    vi /usr/local/squid/etc/squid.conf
(2) cache 영역으로 사용할 공간을 /usr/local/squid/var디렉토리밑에 생성한다.
    mkdir /usr/local/squid/var/cache
(3) 모든 사람들이 접근할 수 있도록 허가권을 설정한다.
    chmod 777 /usr/local/squid/var/cache
(4) 스왑디렉토리(캐시용 디렉토리)를 초기화한다.
    /usr/local/squid/sbin/squid -z
(5) 데몬을 실행한다.
    /usr/local/squid/sbin/squid

6. 클라이언트에서 프록시서버 설정하기
(1) 개요
  웹브라우저마다 다르므로 각 프로그램의 환경설정에서 해주면 된다.
(2) 설정
   1) Explorer
     ㄱ. [도구]-[인터넷옵션]-[연결]에서 LAN설정을 선택한다.
     ㄴ. [프록시서버]에서 프록시서버사용에 체크한다.
     ㄷ. 주소란에 프록시서버 IP주소를 적고 포트는 3128을 적는다.
     ㄹ. [고급]버튼을 클릭하여 [모든 프로토콜에 같은 프록시서버 사용]을 선택한다.
   2) 네스케이프
     ㄱ. [Edit]-[Preferences]-[Avanced]-[Proxies]항목을 선택한다.
     ㄴ. [Manual proxy configuration]를 클릭한 다음 [View]버튼을 누른다.
     ㄷ. 서버와 포트번호를 입력한다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 삼바(SAMBA)란?
(1) 개요: 마이크로소프트와 인텔은 윈도우시스템이 다른 시스템의 디스크나 프린터같은 자원을
          공유할 수 있도록 Server Message Block(SMB)이라는 프로토콜을 개발하였는데, 삼바란
          이 SMB를 이용하여 리눅스와 윈도우와의 자료 공유 및 하드웨어를 공유할 수 있도록
          해준다. 현재 마이크로소프트에서는 SMB라는 이름보다는 좀 더 범위가 큰 CIFS(Common
          Internet File System)라는 프로토콜로 부른다. 이 프로토콜은 SMB 프로토콜에 LanMana
          ger와 NetBIOS 프로토콜까지 포함한다.
(2) 삼바의 기능
   1) 리눅스파티션과 윈도우와의 공유
   2) 윈도우파티션과 리눅스와의 공유
   3) 리눅스의 프린터와 윈도우와의 공유
   4) 윈도우의 프린터와 리눅스와의 공유


2. 삼바(SAMBA)의 설치
(1) rpm패키지로 설치하기
   1) 설치의 확인
     rpm -qi samba 나 rpm -qa |grep samba 명령등을 내려 삼바가 설치되어 있는지 확인한다.
   2) 설치하기
    ㄱ. 레드햇 리눅스계열을 설치했을 경우에는 CD-ROM드라이브를 마운트한다.
    ㄴ. /RedHat/RPMS디렉토리로 이동한다.
    ㄷ. rpm -Uvh samba* 명령을 내려 설치한다.
(2) 소스로 설치하기
   1) 만약 기존에 삼바가 설치되어 있으면 제거한다.
   2) cd /usr/local/src 명령을 내려 이동한다.
   3) 삼바의 공식사이트인 http://www.samba.org에서 소스파일(samba-2.2.5.tar.gz)를 다운받는다.
   4) tar zxvf samba-2.2.5.tar.gz 명령을 내린다.
   5) cd samba-2.2.5
   6) cd source
   7) ./configure --prefix=/usr/local/samba
   8) make
   9) make install
   10) 삼바소스디렉토리에서 examples라는 디렉토리의 smb.conf.default파일을 /usr/local/samba/
      lib/smb.conf파일로 복사한다.
   11) 삼바를 실행하는 스크립트파일을 /etc/rc.d/init.d/디렉토리에 복사한다. 삼바소스 디렉토리
      에서 packging/RedHat 디렉토리에 보면 삼바구동스크립트파일인 smb.init이 있는데 이 파일을
      samba라는 이름으로 복사한다.
       예) cp smb.init /etc/rc.d/init.d/samba
   12) 데몬실행파일 PATH가 설정된 경로로 복사한다. 보통 소스로 설치하면 데몬을 실행하는 파일인
      smbd와 nmbd가 /usr/local/samba/sbin디렉토리에 있다. 이 경로는 현재 PATH설정이 안 되어있
      으므로 PATH를 설정하거나 /usr/sbin디렉토리에 복사한다.
       예) cp smbd nmbd /usr/sbin

2. 삼바의 구성
(1) 데몬: 삼바를 이용하기 위해서는 두 개의 데몬이 필요하다.
   1) 기본데몬
    ㄱ. smbd: SMB데몬 - 파일과 프린터공유, 사용자의 권한부여 및 확인
    ㄴ. nmbd: 클라이언트를 위해 NetBIOS nameserver를 지원하고 browsing(서비스통지)한다.
   2) 스크립트 데몬파일: 실제 데몬을 구동하고 정지시키는 데몬으로 스타트시키면 smbd와 nmbd
                        데몬을 띄운다.
    /etc/rc.d/init.d/smb start|stop
(2) 환경파일: smb.conf
   1) 개요: smb.conf는 삼바의 환경설정파일로 파일안의 구성은 win.ini와 비슷하다. 크게 Global
           Setting과 Share Denition으로 나누고 다시 각 내용은 [] 기호를 이용하여 섹션(Section)
           으로 구분한다.
   2) 역할: 삼바를 제어하는 환경파일이다. 이 파일에서 외부와 공유시킬 시스템 자원과 어떠한
           제약을 할 것인지를 지정한다.
   3) 위치: 보통 /etc디렉토리에 위치하나 배포판에 따라 /etc/samba디렉토리에 위치할 수도 있다.
   4) 파일내부의 유형
    ㄱ. #으로 시작하는 행: 이 행은 주석처리되어 무시된다.
    ㄴ. ;으로 시작하는 행: 이 행들도 주석행으로 간주되어 무시된다. 보통 이런 행은 설정행이
                          작동하지 않도록 하는데 사용된다. ;대신에 #을 사용해도 된다. 이 두
                          가지 유형의 주석이 사용되는 이유는 #은 유닉스에서 사용하는 주석이고.
                          ;는 윈도우에서 사용하는 주석이라 두 가지 모두 사용한다.
    ㄷ. [ ]을 사용하는 행: 섹션을 정의한다. 하나의 섹션이 정의된 후 그 다음 섹션이 정의될 때
                          까지의 행들은 해당 섹션에 속한다.
    ㄹ. name = value 행: 사용하는 옵션과 해당값을 설정하는 행들이다.
   5) 기본적인 섹션
    ㄱ. [global]: 삼바서버의 전체적인 환경설정을 담당하는 섹션
    ㄴ. [homes]: 사용자들이 자신의 홈디렉토리로 접근할 때의 권한을 설정하는 섹션
    ㄷ. [printers]: 프린터관련 권한을 설정하는 섹션
(3) 실행파일
   1) smbclient
    ㄱ. 설명: 유닉스를 위한 삼바클라이언트 명령어로 윈도우의 서버로 접근하기 위해 사용한다.
    ㄴ. 사용법
       smbclient [option] [접속하고자할 호스트명]
    ㄷ. option
       -L: 접속하고자할 호스트명을 입력한다.
       -U: 접속할 때의 사용자명을 입력한다.
    ㄹ. 사용예
      a. [root@www root]# smbclient -L system2 -U administrator
          => system2라는 호스트에 administrator라는 권한으로 접속한다.
      b. [root@www root]# smbclient -L system2 -U administrator%1234
          => system2라는 호스트에 administrator라는 권한으로 접속하는데 패스워드는 1234이다.
      c. [root@www root]# smbcleint \\\\system2\work -U administrator
          => system2라는 호스트의 work라는 디렉토리를 administrator권한으로 접속한다.
   2) smbmount
    ㄱ. 설명: 공유된 윈도우폴더를 유닉스에서 마운트할 때 사용하는 명령이다.
    ㄴ. 사용법
       smbmount 윈도우호스트의_공유폴더 마운트할_디렉토리명 [-o option]
    ㄷ. option: -o를 기본적으로 적어야 하고 key=value형태로 적는다.
       username: 사용자의 권한을 적는다.
    ㄹ. 사용예
       [root@www root]# smbmount //system2/work /mnt/win -o username=administrator
        => system2의 work라는 공유폴더를 /mnt/win이라는 디렉토리로 마운트한다. 권한자는
          administrator이다.
   3) smbprint: 삼바 호스트의 프린터에 프린트를 하기 위한 스크립트
   4) smbprint.sysv: smbprint와 같지만 System V계열 유닉스에서 사용한다.
   5) smbstatus: 현재의 삼바 연결상태를 보여준다.
   6) smbrun: 삼바 호스트의 응용프로그램 실행을 용이하게 하는 스크립트이다.
   7) testparm
    ㄱ. 설명: 삼바의 환경설정파일인 smb.conf파일의 설정이 제대로 되었는지 확인하는 명령이다.
    ㄴ. 사용법
       testparm [환경설정파일경로] [IP주소]
    ㄷ. 사용예
      a. [root@www root]# testparm
          => 현재 서버에서 /etc/smb/smb.conf파일의 설정을 확인한다.
      b. [root@www root]# testparm /etc/smb/smb.conf 192.168.1.3
          => 192.168.1.3의 IP주소를 갖는 삼바서버의 /etc/smb/smb.conf파일의 설정을 확인한다.
   8) nmblookup
    ㄱ. 설명: WINS 서버에 질의할 때 사용하는 명령이다. DNS서버에 질의하는 nslookup명령과 유사
             하다.
    ㄴ. 사용법
       nmblookup option
    ㄷ. option
       -U: 서버이름을 지정한다. 보통 -R옵션과 같이 사용한다.
       -R: 조회할 이름을 지정한다.
    ㄹ. 사용예
      a. [root@www root]# nmblookup samba.org -R 'IRIX#1B'
          => samba.org 라는 서버에 IRIX#1B라는 이름을 조회한다.
      b. [root@www root]# nmblookup \*
          => 브로드캐스트 영역에 있는 모든 이름을 조회한다.

3. smb.conf를 이용한 세팅
(1) 전체설정(Global Setting)
   1) workgroup = MYGROUP
     => 윈도우의 작업그룹처럼 공유그룹을 지정한다.
   2) server string = Samba Server
     => 서버에 대한 설명을 부여해 준다.
   3) hosts allow = 192.168.1. 192.168.2. 127.
     => 삼바 서버에 접속을 허용할 호스트를 지정하는데 사용한다. 접속할 허용할 호스트는 아이피
       주소, 호스트명 등을 지정할 수 있으며, 네트워크/넷마스크형태로도 지정할 수 있다. 또한
       EXCEPT라는 키워드와 와일드문자도 사용가능하다. 참고로 삼바서버에 접속이 불가능하게 하
       려면 hosts deny로 설정한다.
        예) 1. hosts allow = 192.168.1. 192.168.2. 127.
              => 192.168.1.0 네트워크대역에 속한 모든 호스트들과 로컬시스템(127.0.0.0네트워크)
                에서 접속이 가능하다.
            2. hosts allow = 192.168.1. EXCEPT 192.168.1.220 192.168.1.244
              => 192.168.1.220 과 192.168.1.244를 제외한 192.168.1.0 네트워크에 속한 모든 호스
                트들이 삼바 서버에 접속할 수 있다.
            3. hosts allow = 192.168.1.0/255.255.255.0
              => 192.168.1.0 네트워크에 속한 모든 호스트들의 접속을 허용한다.
            4. hosts allow = posein, xitem
              => posein과 xitem이라는 호스트들만 삼바 서버 접속을 허용한다.
   4) printcap name = /etc/printcap
     => 서버에 의해 사용되는 printcap name을 겹쳐쓰기 하고자 할 때 그 위치를 지정한다.
   5) load printers = yes
     => 삼바 서버의 printcap에 정의된 모든 프린터 목록이 자동적으로 로딩되게 할 것인가를 지정
       하는 옵션이다. 네트워크 프린터를 삼바서버에 연결하여 사용하고자 한다면 선택해야 한다.
   6) printing = lprng
     => 프린터 시스템 종류를 지정하는 옵션으로 비표준 프린터시스템이 아니면 지정할 필요가
       없다.
   7) ;  guest account = pcguest
     => 공유 설정 섹션에서도 사용하는 항목으로, guest ok로 명시되어 있는 서비스에 접근할 유저
       를 지정해 준다. 보통 클라이언트가 손님서비스(guest service)에 접속할 수 있게 된다. 이러
       한 유저는 /etc/passwd파일안에 존재하는 계정이어야 하며, 보통 "nobody"로 설정하면 된다.
   8) log file = /var/log/samba/%m.log
     => 삼바 서버에 접속하는 호스트의 접속 로그에 대한 기록을 저장하는 파일을 지정한다.
   9) max log size = 0
     => 로그 파일의 최대 크기를 KB단위로 제한두려고 할 때 사용되는 옵션이다. 제한을 두었을
       경우에 이를 초과하게 되면 .old확장자를 가진 파일로 저장되고 새로운 파일이 생성된다.
       현재처럼 0으로 설정하면 파일의 크기에 제한을 두지 않는다.
   10) security = user
      => 보안관련 옵션으로 클라이언트가 삼바서버에 접속할 때 인증 레벨을 부여하는 옵션이다.
        보안모드에는 4가지모드가 있는데 user, share, server, domain등이다.
    * 4가지 모드
     user: 삼바 서버에 접속하는 클라이언트는 먼저 반드시 윈도우 시작시 사용자명과 패스워드로
          로그인을 한 후에 삼바 서버에 접속할 때 같은 사용자명으로 패스워드를 확인한 후에
          접속이 이루어진다.
     share: 유효한 사용자명과 패스워드로 삼바 서버에 로그인을 하지 않아도 서버에 접속할 수
           있게 하므로, 삼바 서버 인증과정을 필요로 하지 않을 때 이 레벨로 지정하면 된다. 공
           유 디렉토리 접근에 제한을 두는 경우에 사용할 수 있다.
     server: 윈도우 NT와 같은 다른 삼바 서버가 존재해야 하며, 다른 삼바 서버에 사용자명과 패스
            워드를 전달하여 올바른지를 확인한다.
     domain: 윈도우 NT서버가 있어야 가능하며, 삼바서버가 사용자명과 패스워드를 윈도우NT의 도메
            인 컨트롤러(Domain Controller)에 전달하여 유효한지 확인하는 방법이다.
   11) ;   password server = <NT-Server-Name>
      => 보안옵션에서 server나 domain값을 설정했을 경우에 윈도우 NT같은 다른 삼바서버의
        NetBIOS이름으로 지정한다.
   12) ;  password level = 8
       ;  username level = 8
       => 패스워드 레벨과 유저 레벨을 설정하는 것으로 8개 문자를 사용하도록 설정한다.
   13) encrypt passwords = yes
      => 삼바서버에 클라이언트의 접속이 이뤄지는 과정에서 인증을 위하여 암호화 패스워드 옵션을
        사용할 수 있다. 암호화된 패스워드를 지정하는 옵션이다.
   14) smb passwd file = /etc/samba/smbpasswd
      => 이 옵션은 encrypt passwords항목과 같이 사용되는 것으로 암호화된 삼바 사용자의 아이디
        와 패스워드가 기록되는 파일이다. 이 파일에 패스워드를 추가하는 명령은 smbpasswd이다.
   15) ;  unix password sync = Yes
       ;  passwd program = /usr/bin/passwd %u
       ;  passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password(생략)
      => 클라이언트 호스트에서 사용자의 패스워드를 변경할 수 있도록 해주는 옵션이다. 단, 이
        경우에는 encrypt password, smb passwd file 두 옵션을 반드시 사용해야 한다.
   16) ;  username map = /etc/samba/smbusers
       => 리눅스 사용자 이름과 삼바 사용자 이름이 서로 다를 경우 서로 매핑시키기 위한 사용한
         다.
   17) ;   include = /etc/samba/smb.conf.%m
      => 접속하는 각 클라이언트마다 서로 다른 설정을 사용할 수 있게 해주는 것으로 %m은 접속하
        는 NetBIOS이름으로 대치된다.
   18) socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
      => 사용자의 로컬 네트워크상에서 삼바서버가 최적의 성능을 발휘할 수 있도록 튜닝할 때 사용
        한다. IPTOS_LOWDELAY, IPTOS_THROUGHPUT 등의 옵션이 있다.
   19) ;   interfaces = 192.168.12.2/24 192.168.13.2/24
      => 삼바에 연결된 네트워크 인터페이스를 설정하는 것으로, 인터페이스는 IP/netmask조합으로
        지정할 수 있다. 즉, 위의 설명은 삼바서버가 서로 네트워크 인터페이스를 사용할 때 사용하
        는 것으로 192.168.12.2 호스트와 192.168.2.2 호스트에 연결을 허용한다는 의미이다.
   20) ;   remote browse sync = 192.168.3.25 192.168.5.255
       ;   remote announce = 192.168.1.255 192.168.2.44
      => 동기화시킬 원격 브라우저를 설정하는 부분이다.
   21) ;   local master = no
      => 이 옵션은 삼바서버가 nmbd에 의해 서브넷상에서 로컬마스터브라우저가 될 수 있도록 허용하
        는 것으로 no라고 설정하면 nmbd데몬은 서브넷상에서 로컬 마스터브라우저가 되지 않는다.
   22) ;   os level = 33
      => 삼바서버가 브라우저 선거에 있어서 자신을 알릴 수 있는 레벨을 설정하는 것으로 이 값에
        의해서 nmbd데몬이 로컬브로드캐스트지역에서 WORKGROUP에 대해 로컬마스터 브라우저가 될
        수 있는지 결정된다. 이 값을 0으로 설정하면, nmbd데몬은 윈도우 머신에 대해서 선거권을
        상실하므로 로컬마스터 브라우저가 되질 못한다. (관련문서는 BROWSING.txt)
   23) ;   domain master = yes
      => 이 옵션은 삼바가 도메인 마스터 브라우저가 되도록 해준다. 이것은 삼바와 서브넷간의
        브라우저 리스트를 모집할 수 있게 해준다. 만일 NT도메인 컨트롤러를 가지고 있다면 이
        기능을 사용해서는 안된다.
   24) ;   preferred master = yes
      => 삼바구동시 로컬 마스터 선거를 강요하여 선거에서 이길 수 있게 보다 많은 가능성을 부여
        해주는 옵션이다. 이 옵션은 domain master = yes옵션과 같이 사용하여 nmbd데몬에 의해
        도메인 마스터가 될 수 있도록 해준다.
   25) ;   domain controller = <NT-Domain-Controller-SMBName>

      => 이 옵션은 호환성 문제로 현재는 사용하는 않는다.
   26) ;   domain logons = yes
      => 삼바서버가 WORKGROUP에 윈도우98 도메인 로그온 역할을 할 것인지의 여부를 지정한다.
   27) ;   logon script = %m.bat
       ;   logon script = %U.bat
      => 사용자가 성공적으로 로그인을 하였을 때 다운로드하여 작동할 수 있도록 배치파일(*.bat)
        또는 NT명령파일(.cmd)을 지시해 주는 옵션이다. 배치파일은 마지막 줄에 cr/if가 들어있어
        야 하므로 도스편집기에서 만드는 것을 권장한다. 내용은 사용자가 임의대로 지정할 수 있
        다.
         예) 보통 모든 클라이언트 머신들이 서버와 똑같은 시간에 시간을 맞추도록 할 수 있다.
            NET TIME \\SERVER /SET /YES
   28) ;   logon path = \\%L\Profiles\%U
      => 윈도우98 및 NT에서 user.dat과 같은 로우밍 프로파일(roaming profile)을 어디에 지정할
        것인가를 지정해 주는 옵션이다. %L은 서버의 NetBIOS이름으로 대치되고, %U는 사용자 이름
        으로 대치된다. 이 옵션을 사용할 때 [Profile]공유 항목에서 주석을 풀어 주어야 한다.
   29) ;   wins support = yes
      => 삼바서버에서 nmbd데몬이 wins서버의 역할을 할 수 있는지 여부를 지정한다. 만일 이 옵션
        을 선택하기 위해서는 반드시 다중 서브넷 네트워크를 가지고 있어야 하며, wins서버로 될
        특정 nmbd데몬이 있어야 한다.

    (참고) WINS(Windows Internet Naming Service)
          마이크로소프트 윈도우NT 서버의 일부인 WINS는 각 구성 변경에 수반되는 사용자 또는
         관리자가 없는 IP주소들과 컴퓨터 이름 및 위치들과의 결합을 관리한다. WINS는 컴퓨터
         이름과 IP주소를 서로 매칭시켜 데이터를 테이블내에 자동으로 만드는데, 이 이름들은
         다른 사람의 컴퓨터 이름과 중복되지 않도록 고유한 이름으로 견지한다. 컴퓨터가 다른
         장소로 옮겨지면, IP주소의 서브넷 부분이 변경될 수 있다. WINS를 사용하면 새로운 서
         브넷 정보가 WINS테이블내에서 자동으로 갱신된다. WINS는 어떤 컴퓨터가 네트워크에 처음
         정의될 때 IP주소를 협상하는 NT서버의 DHCP를 보충하여 완전하게 한다.
          예를 들면 같은 네트워크에서 사람이 많아지면 네트워크에 부하도 많이 발생한다. 이 경우
         WINS를 사용하면 컴퓨터이름과 IP목록을 관리해주기 때문에 동보통신에 의한 부담을 줄일
         수 있다.

   30) ;   wins server = w.x.y.z
      => wins 서버가 있을 경우 wins server IP값을 지정하는 옵션이다.
   31) ;   wins proxy = yes
      => nmbd에 의해서 wins기능을 갖추지 못한 호스트들을 대신하여 브로드캐스트 이름 질의를
        대신 응답해 줄 수 있도록 지정해 주는 옵션이다. 이것을 사용하려면 네트워크상에 최소
        하나 이상의 WINS서버가 있어야 한다.
   32) dns proxy = no
      => nmbd데몬이 wins server역할을 하고, 등록되지 않는 NetBIOS이름을 찾아줄 때 DNS server
        를 사용하여 NetBIOS이름을 찾아줄 것인지의 여부를 지정하는 옵션이다.
   33) ;  case sensitive = no
       => 대소문자를 보존할 필요가 있을 때 설정하는 부분이다.

(2) 공유 정의(Share Definitions) : 삼바 서버에 접속할 수 있는 사용자의 홈디렉토리를 설정해
                                   주는 부분이다.
   1) [homes]
       comment = Home Directories
       browseable = no
       writable = yes
        => 사용자의 홈 디렉토리 서비스 사용을 위한 기본적인 설정을 해주는 항목이다. comment는
          간단한 설명문, browseable은 공유이름을 브라우저에 표시할 수 있게 하는 기능, writable
          은 쓰기허용을 설정한다.
   2) [netlogon]
        comment = Network Logon Service
        path = /home/netlogon
        guest ok = yes
        writable = no
        share modes = no
         => 도메인 로그온을 사용하고자 할 때 사용한다. 일반적으로 사용하지 않는다.
   3) [Profiles]
       path = /home/profiles
       browseable = no
       guest ok = yes
        => 특정한 프로파일을 지정할 때 사용한다. 일반적으로 사용하지 않는다.
   4) [printers]
       comment = All Printers
       path = /var/spool/samba
       browseable = no
       guest ok = no
       writable = no
       printable = yes
        => 삼바프린터를 네트워크 공유프린터로 사용하고자 할 경우에 설정한다. BSD계열의 프린터
          시스템을 사용하면 일일이 프린터를 정의하지 않아도 된다.
   5) [tmp]
       comment = Temporary file space
       path = /tmp
       read only = no
       public = yes
        => 여러 사람들이 파일을 공유할 목적으로 유효하게 사용할 수 있다. 현재 기본값인 /tmp
          는 임시작업공간 디렉토리이므로 /var/tmp처럼 다른 디렉토리를 만들어서 사용하도록
          한다.
   6) [public]
       comment = Public Stuff
       path = /home/samba
       public = yes
       read only = yes
       write list = @staff
        => 공개적으로 접근이 가능한 디렉토리이지만 staff그룹에 있는 사용자들을 제외한 사용자
          들은 오직 읽기만 사용가능하다.
   7) 사용자정의 섹션
     예) [posein]
           comment = shared-files in posein directory         // 간단한 설명이다.
           path = /home/posein/pds                      // 공유디렉토리의 경로를 지정한다.
           read only =no    // 공유디렉토리를 읽기만 가능하게 할지를 지정한다.
           writable = yes  // write ok = yes와 같은 옵션으로 쓰기가 가능하다.
           valid user = posein xitem prehee  // 서비스디렉토리에 사용가능한 사용자를 말하며,
                                               만약 이 옵션이 생략되면 모든 사용자가 접근할
                                               수 있다.
           public = no      // guest ok와 같은 옵션으로 no로 설정하면 다른 사용자들은 이용할
                              수 없고 개인사용자만 사용할 수 있게 된다.
           browseable = no  // 이용 가능한 공유리스트를 보여줄 것인가를 지정하는 것으로 no로
                              지정하면 리스트를 보여주지 않는다.
           printable = no   // 서비스로 지정된 디렉토리에 스풀파일을 지정할 것인가를 지정하
                              는 것으로, 프린터 공유 디렉토리가 아니므로 대부분 no로 설정한다.
           create mask =0765 // create mode와 같은 옵션으로 파일을 생성할 때 사용되는 모드를
                               나타낸다.
        (참고) samba 에서 공유디렉토리를 지정할 때 사용하는 옵션 설명
              - read only : 공유 디렉토리를 읽기만 가능하게 할 것인지를 결정
              - writable, write ok : 공유 디렉토리를 쓰기 가능하게 할 것인지를 결정
              - valid users : 공유 디렉토리에 로그인할 수 있는 사용자를 결정
              - public, guest ok : 다른 사용자들이 이용하게 할 지를 결정
              - browseable : 공유 디렉토리의 리스트를 보여줄 지를 결정
              - printable : 공유 디렉토리에 스풀 파일을 지정할 것인지를 결정
              - path : 공유할 디렉토리의 절대경로를 지정
              - comment : 간단한 설명을 적음
              - create mask, create mode : 파일을 생성할 때의 모드를 결정. umask값형태로 지정.
              - write list : 쓰기가 가능한 특정 사용자를 지정

4. 삼바를 이용하여 공유하기
(1) 리눅스 드라이브를 윈도우와 공유하기
   1) /etc/samba/smb.conf파일의 편집
    #======================= Global Settings =====================================
    [global]
     workgroup = WORKGROUP   // 윈도우의 워크그룹과 동일한 그룹을 지정한다.
     server string = FILE SERVER  // 리눅스서버에 대한 설명을 적는다.
     hosts allow = 192.168.0. 203.247.51. 127.  // 접근허용할 네트워크 범위를 지정한다.
     security = share
    #============================ Share Definitions ==============================
    [public]
    comment = samba            // 간단한 설명
    path = /home/posein/samba   // 공유디렉토리 지정
    public = yes
    writable = yes
    printable = no
     (참고) public으로 공유하고 writable = yes이면 공유한 해당디렉토리에 다른 사용자계층의
           퍼미션에서 쓰기권한을 부여해야 한다.
   2) 삼바 데몬을 다시 가동한다.
    /etc/rc.d/init.d/smb restart
   3) 삼바 서버에서 테스트하기
    [root@mybestone /root]# testparm
    Load smb config files from /etc/samba/smb.conf
    Processing section "[homes]"
    Processing section "[printers]"
    Processing section "[public]"
    Loaded services file OK.
    Press enter to see a dump of your service definitions
   4) /etc/hostname이라는 파일을 생성하여 윈도우에서 확인할 이름을 지정한다.
     예) linux
   5) 윈도우에서 확인하기
     네트워크환경 => linux 라는 컴퓨터이름이 생성된다. linux를 더블클릭해서 확인해보면 public
    이라는 공유폴더가 보인다.
   6) smbstatus로 서버 체크하기
    [root@mybestone /etc]# smbstatus

    Samba version 2.2.0
    Service      uid      gid      pid     machine
    ----------------------------------------------
    public       nobody   nobody   14568   posein_note (192.168.0.3) Fri Jul 26 01:18:18 2002

    No locked files
(2) 리눅스 클라이언트에서 윈도우 공유 폴더 접근하기
   1) 윈도우 PC설정 (윈도우 2000기준)
    ㄱ. 전체컴퓨터이름과 작업 그룹명 확인
       바탕화면의 [내컴퓨터]를 오른쪽버튼클릭한뒤 [네트워크식별]항목을 보고 확인한다.
        예) 전체컴퓨터이름: posein_note
            작업그룹: 신경회로망
    ㄴ. 공유할 폴더선택 및 공유설정
    ㄷ. 바탕화면의 [네트워크환경]의 등록정보에서 'Microsoft네트워크 파일 및 프린터공유'가
       있는지 확인한다.
   2) 리눅스에서 윈도우 접근(1): smbclient명령의 이용
    ㄱ. smbclient명령을 이용하여 정보확인하기
       [root@mybestone /etc]# smbclient -L posein_note -U administrator
       added interface ip=203.247.40.252 bcast=203.247.40.255 nmask=255.255.255.0
       added interface ip=192.168.1.1 bcast=192.168.1.255 nmask=255.255.255.0
       Got a positive name query response from 203.247.40.244 ( 203.247.40.244 )
       Password:
        => 패스워드를 입력하면 정보를 보여준다.
    ㄴ. 접근하여 읽거나 쓰기작업하기
       [root@mybestone /etc]# smbclient \\\\posein_note\\work -U administrator
       added interface ip=203.247.40.252 bcast=203.247.40.255 nmask=255.255.255.0
       added interface ip=192.168.1.1 bcast=192.168.1.255 nmask=255.255.255.0
       Got a positive name query response from 203.247.40.244 ( 203.247.40.244 )
       Password:
       Domain=[신경회로망] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]
       smb: \>
        => 패스워드를 정확히 입력하면 위와 같이 프롬프트가 나타난다. ?를 입력하면 기본적으로
          사용할 수 있는 명령어의 리스트가 나타난다.
   3) 리눅스에서 윈도우접근(2): smbmount명령의 이용- mount명령어와 같은 형식으로 윈도우 공유
                                                    폴더와 그 폴더를 리눅스에서 마운트할 디렉
                                                    토리가 필요하다.
    ㄱ. 마운트한다.
       [root@mybestone /etc]# smbmount //posein_note/work /mnt/win -o username=administrator
       Password:
        => 패스워드를 입력하면 해당디렉토리로 마운트된다. /mnt/win이라는 디렉토리는 생성되어
          있어야 하면 -o는 사용자이름을 지정하기 위한 옵션이다.
    ㄴ. cd /mnt/win으로 이동하여 읽거나 쓰기를 한다.

5. 삼바 User레벨로 사용하기
(1) User레벨관련 주요 파일 분석
   1) /etc/samba/smb.conf
    ㄱ. 설명: 삼바의 환경설정파일로 크게 두 개의 섹션으로 구분되어 있다.
    ㄴ. Section
      a. [global] : 삼바와 관련된 전체적인 환경설정을 하는 부분으로
      b. [share definition] : 공유영역으로 여러 섹션이 존재한다. 주요 섹션은 다음과 같다.
        - [homes] : home디렉토리와 관련된 설정을 할 수 있다.
        - [printers] : 프린터와 관련된 설정을 할 수 있다.
        - [tmp] : /tmp 디렉토리와 관련된 설정을 할 수 있다.
    ㄷ. magic cookies: 삼바의 smb.conf에서도 아래의 magic cookies를 사용할 수 있다.
       %u : 현재 사용중인 유저
       %g : 현재 사용중인 유저 그룹
       %m : 클라이언트의 NetBIOS이름
       %v : 버전
       %h : 호스트이름
       %p : 서버의 홈디렉토리 경로
       %d : 서버의 프로세서ID
       %S : 현재 사용되는 서비스 이름
       %P : 현재 사용되는 서비스의 루트 디렉토리
       %U : 세션의 유저
       %G : 셔션의 유저그룹
       %H : %u로 주어진 유저의 홈디렉토리
       %L : 서버의 NetBIOS이름
       %M : 클라이언트 머신 이름
       %N : NIS 홈디렉토리 서버의 이름
       %I : 클라이언트 머신 IP
       %T : 날짜와 시간
   2) /etc/samba/smbusers : 삼바사용자들을 설정하는 파일이다.
   3) /usr/bin/smaadduser : 삼바사용자들의 패스워드를 등록하는 명령이다.
   4) /var/log/samba : 삼바의 로그가 기록되는 파일이다.
   5) /var/spool/samba : 프린터의 스풀디렉토리이다.
(2)  삼바서버의 인증레벨
   1) 설명: smb.conf파일의 [global]섹션의 security항목에서 설정한다.
   2) security 레벨의 설정
    ㄱ. share : 인증과정을 거치지 않고 접근이 가능하다. smb.conf파일에서 hosts allow항목에 지정
               된 호스트라면 비밀번호없이 삼바를 사용할 수 있다.
    ㄴ. user
      a. 설명: 사용자의 인증을 거치는 레벨이다.
      b. 윈도우 사용자의 접속법 : 삼바서버에 설정한 계정과 패스워드로 접속한다.
      c. smb.conf파일에서의 설정 : [global] 섹션의 encrypt passwords = yes, smb passwd file =
                                  /etc/smbpasswd 설정을 추가로 해야 한다.
      d. 삼바의 사용계정: /etc/passwd에 있는 계정이어야 한다.
      e. 삼바사용자의 지정: smbpasswd 명령을 이용하여 사용자 계정과 비밀번호를 설정한다.
    ㄷ. server
      a. 설명: 사용자 정보를 담고 있는 윈도우서버와 같이 다른 운영체제가 삼바서버에 대한 사용
              자와 패스워드를 인증을 전달하는 방법이다.
      b. smb.conf파일에서의 설정: password server 지시자에 인증할 서버의 IP를 적는다.
    ㄹ. domain : 삼바서버가 윈도우 서버의 도메인 컨트롤러에 사용자명과 패스워드를 전달하여
                인증하는 방법으로 server레벨과 비슷하다.
(3) 삼바관련 명령어
   1) smbpasswd
    ㄱ. 설명: 삼바서버의 사용자 계정을 만들거나 패스워드를 설정하는 명령이다.
    ㄴ. 사용법
       smbpasswd option user_id
    ㄷ. option
       -a : 사용자계정을 추가시에 사용한다.
       -x : 사용자계정을 삭제한다.
   2) smbadduser
    ㄱ. 설명: 삼바서버의 사용자계정을 만드는 명령이다.
    ㄴ. 사용법
       smbadduser 계정명:계정명
        => 콜론(:)을 기준으로 앞의 계정명은 Unix에서 사용할 이름이고 뒤의 계정명은 윈도우에서
          사용하는 계정명이다.
    ㄷ. 사용예
       smbadduser posein:posein
        => posein이라는 사용자를 추가한다.
(4) user레벨로 삼바서버 사용하기
   1) 리눅스서버에서 설정하기
     ㄱ. smb.conf파일 설정
        security = user                // user레벨로 변경

        encrypt passwords = yes       // 활성화시킨다.
        smb passwd file = /etc/samba/smbpasswd   // 활성화시킨다.
     ㄴ. 사용자추가하기
        [root@www samba]# smbpasswd -a posein  // posein이라는 계정을 추가하였다. 리눅스서버의
                                                 계정으로 한다.

        New SMB password:                            // 패스워드를 설정한다. 반드시 리눅스서버의
                                                     //패스워드와 같지 않아도 된다.
        Retype new SMB password:
        unable to open passdb database.
        Added user posein.

출처 : 대전국제IT교육센터 정성재 강사

 

1. NFS(Network File System)이란?
(1) 개요: NFS는 Sun Microsystems사에서 개발된 것으로 TCP/IP네트워크 상에서 다른 컴퓨터의 파일
          시스템을 마운트하고 공유하여 상대방의 파일 시스템 일부를 마치 자기 자신의 디렉토리인
          것처럼 사용할 수 있게 해준다. NFS가 사용되는 주된 이유는 고용량의 하드디스크를 탑재
          하고 있는 몇 대의 워크스테이션이 네트워크의 다른 컴퓨터들에게 파일 시스템서비스를
          해줌으로써 모든 컴퓨터들이 필요 이상의 자원을 가질 필요도 없고 소프트웨어를 여기저기
          깔아둘 필요도 없어지게 된다. NFS는 사용이 편리한 대신에 보안에 상당히 미약하기 때문
          에 주의해서 사용해야 한다.
(2) NFS서버의 설정
   1) 설명: NFS서버는 언제든지 클라이언트가 마운트할 수 있도록 준비되어 있어야 하며 NFS는 rpc.
          mountd와 rpc.nfsd 두 데몬을 가지고 있다. 참고로 /etc/rc.d/init.d/nfs 스트립트를 실행
          하면 이 두 데몬을 실행시킨다.
   2) 관련데몬: NFS를 사용하기 위해서는 다음과 같은 데몬을 실행시켜야 한다.
     ㄱ. netfs: 삼바, NFS, NCP등을 마운트하거나 언마운트해주는 데몬으로 NFS 서버데몬을 띄우기
               전에 미리 실행시켜야 한다.
     ㄴ. nfs: NFS서비스를 해주는 데몬이다. 참고로 이 데몬을 실행시키려면 먼저 /etc/exports
             파일을 설정해야 한다.
     ㄷ. portmap: RPC(Remote Procedure Call)연결에 관여하는 데몬으로 NFS, NIS을 사용할 때 필
                 요함으로 실행시켜야 한다.
     ㄹ. nfslock: 파일잠금을 제공하는데 이것은 동시에 여러 사람들이 동일한 파일을 수정하는
                 것을 막는다.
    (참고) 데몬의 확인
          [root@www init.d]# rpcinfo -p
             program vers proto   port
              100000    2   tcp    111  portmapper
              100000    2   udp    111  portmapper
              100024    1   udp  32768  status
              100024    1   tcp  32768  status
              100011    1   udp   1022  rquotad
              100011    2   udp   1022  rquotad
              100005    1   udp  32771  mountd
              100005    1   tcp  32769  mountd
              100005    2   udp  32771  mountd
              100005    2   tcp  32769  mountd
              100005    3   udp  32771  mountd
              100005    3   tcp  32769  mountd
              100003    2   udp   2049  nfs
              100003    3   udp   2049  nfs
              100021    1   udp  32772  nlockmgr
              100021    3   udp  32772  nlockmgr
              100021    4   udp  32772  nlockmgr
            => (설명)
              rpc.mountd: 외부의 요청에 반응하는 NFS 마운트 프로토콜이다. 클라이언트들이 서버
                         를 이용할 수 있도록 디렉토리를 공유해주는 역할을 한다. NFS는 접속해제
                         방식으로 웹서버처럼 접속요청이 있을 때만 연결이 이루어진다.
              rpc.nfsd: 서버측에서 rpc.mountd에 의해 마운트되면 클라이언트는 rpc.nfsd로 서버에
                       요구를 보내게 된다. 이 요구를 처리하는 주 데몬이다.
              rpc.lockd: 파일잠금을 제공하는데 이것은 동시에 여러 사람들이 동일한 파일을 수정
                        하는 것을 막는다.
              rpc.statd: rpc.lockd와 함께 작동하면 NFS서버가 비정상적으로 종료되었거나 리부팅
                        했을 경우 복구하는 역할을 한다.
              rpc.rquotad: 원격 쿼터 서버로서 NFS서버의 파일 시스템을 마운트한 로컬 유저의 쿼
                          터에 넘겨준다.
          [root@www /]# ps ax
            => rpc.mountd와 nfsd 데몬이 실행중인지 확인하면 된다.
   2) 관련파일: /etc/exports
     ㄱ. 개요: 파일에 마운트를 허가할 디렉토리와 마운트를 허가할 호스트 목록을 설정한다.
     ㄴ. /etc/exports에서 사용가능한 옵션들
        root_squash: 클라이언트에서 루트를 서버상에 nobody사용자로 매핑한다.
        no_root_squash: 서버와 클라이언트 모두 같은 루트(root)를 사용한다. 즉 클라이언트에서의
                       root의 요청을 서버의 root로 매핑한다.
        ro: 파일 시스템을 읽기 전용(read only)로 마운트한다.
        rw: 파일 시스템을 읽고 쓸수 있도록 마운트한다.(read write)
        insecure: 인증되지 않은 접근도 가능하도록 한다.'
        link_relative: 심볼릭 링크를 상대 심볼릭 링크로 바꿀 때 사용한다.
        noaccess: 지정된 디렉토리에는 접근을 금지한다. 특정시스템에 대한 공유 디렉토리 일부를
                 접근 못하게 할 경우에 사용한다.
        (참고) 가장 많이 나오는 옵션으로 root_squash와 no_root_squash가 있는데 squash라는 뜻이
              '짓누르다', '억압하다'라는 뜻이 있다. 따라서 root_squash라는 것은 root를 짓누르
              다. 즉 root사용자를 무시한다는 뜻이고 no_root_squash는 그 반대의 뜻이다.
     ㄷ. /etc/exports파일의 예
        /home/ftp/pub *.sample.com(ro)
        / master(rw) trusty(rw,no_root_squash)
        /projects proj*.local.domain(rw)
        /data 192.168.0.0/255.255.255.0(ro)
        /work 192.168.0.2(rw)
        /pub *(ro, insecure, root_squash)
        /pub/private *.social.com(noaccess)
         => (설명)
           1. /home/ftp/pub디렉토리를 sample.com도메인을 사용하는 모든 사용자가 읽는 것을 허용
             한다.
           2. /디렉토리를 master, trusty호스트가 읽기/쓰기를 허용한다.
           3. 도메인이름이 local.domain이고 호스트이름이 proj로 시작하는 호스트에 대해서 /pro
             jects라는 디렉토리로 읽기/쓰기를 허용한다.
           4. 네트워크주소가 192.168.0 대역에 속한 모든 호스트에 대해서 data디렉토리를 읽기만
             허용한다.
           5. /work 디렉토리를 192.168.0.2 호스트만 read and write권한으로 설정한다.
           6. /pub디렉토리에 읽기전용으로 마운트할 수 있고, 인증없이 마운트가 가능하며 마운트하
             는 모든 컴퓨터의 루트를 서버에서 nobody로 접근할 수 있게한다.
           7. /pub/private디렉토리는 social.com에 해당하는 시스템은 접근할 수 없다.
   3) NFS 서버설정예
     ㄱ. /etc/exports에 설정한다.
       예) /data 192.168.3.220/255.255.255.0(rw)
     ㄴ. 데몬을 띄운다. (netfs, portmap, nfs)
       예) /etc/rc.d/init.d/nfs start
     ㄷ. 해당디렉토리의 퍼미션을 푼다.
       예) chmod 777 /data
(3) NFS 클라이언트에서 사용하기
   1) 설명: 클라이언트에서는 mount명령을 이용하여 NFS서버의 파일시스템을 이용할 수 있다.
   2) 마운트형식
     ㄱ. 명령행에서 마운트하기
        mount -t nfs NFS-서버:Exported디렉토리 마운트포인트
     ㄴ. /etc/fstab에 정의하여 부팅시마다 사용하기
        NFS-서버:/디렉토리   마운트포인트   nfs   options 0 0
   3) 사용예
     ㄱ. mount -t nfs nfs.linux.co.kr:/usr/local /usr/local
        => nfs.linux.co.kr의 /usr/local디렉토리를 자신의 /usr/local디렉토리에 nfs파일시스템
          타입으로 마운트한다.
     ㄴ. mount -t nfs 203.247.xxx.100:/data /pds
        => 203.247.xxx.100의 /data라는 디렉토리를 현재 시스템의 /pds라는 디렉토리로 마운트한
          다.
     ㄷ. /etc/fstab을 이용한 nfs마운트 설정예
        nfs.linux.co.kr:/usr/local   /usr/local   nfs   timeo=15,intr   0 0
         => nfs.linux.co.kr의 /usr/local디렉토리를 자신의 /usr/local디렉토리에 nfs파일시스템
           으로 마운트한다. 타임아웃시간을 1.5초로 하고, 파일시스템을 인터럽트할 수 있는 옵션
           을 설정하였다.
       (참고) /etc/fstab에 사용되는 NFS마운트관련옵션
             timeo=n : RPC 타임아웃이 발생되고 나서 첫번째 재전송 요구를 보낼때 사용되는 시간
                      기본값은 7(1/10초)
             intr : 주 타임아웃이 발생되었을 때 신호를 보내 NFS호출을 인터럽트한다.
             rsize=n : NFS서버로부터 읽어들이는 바이트 수 지정. 기본값은 1024바이트
             wsize=n : NFS서버에 쓰기할 때 사용하는 바이트 수지정. 기본값은 1024바이트
             retrans=n : 주타임아웃을 발생시키는 부타임아웃을 재전송 회수 기본값은 3번의 타임
                        아웃
             port=n : NFS서버와 연결할 수 있는 포트번호 지정
             fg : 첫번째 NFS마운트 시도에서 타임아웃이 발생되면 즉시 중단함. 기본값
             hard : 주타임아웃이 발생되면 server not responding을 출력하고 무한정 재시도
             soft : 주타임아웃이 발생되면 프로그램에게 I/O 에러 보고
   4) 참고: NFS를 사용가능한 지 클라이언트 점검
    ㄱ. 설명: 클라이언트에서 NFS를 사용하기 위해서는 파일시스템에서 nfs를 지원하는지 점검해야
             한다.
    ㄴ. 확인하기
       [root@www root]# cat /proc/filesystems
       nodev   rootfs
       nodev   bdev
       nodev   proc
       nodev   sockfs
       nodev   tmpfs
       nodev   shm
       nodev   pipefs
               ext2
       nodev   ramfs
               iso9660
       nodev   devpts
               ext3
       nodev   usbdevfs
       nodev   usbfs
       nodev   autofs
       nodev   binfmt_misc
       nodev   nfs             // 이 부분이 있어야 한다.
        => /proc/filesystems는 현재 시스템에서 지원하는 파일시스템 목록을 담고 있는 파일이다.
    ㄷ. 나타나지 않는 경우
       modprobe nfs
        => nfs를 모듈로 올린다.
    ㄹ. 모듈로 올릴 때 에러가 발생하는 경우
       커널에서 nfs모듈이 설정되지 않은 경우이다. '/usr/src/리눅스버전'디렉토리로 이동한 뒤에
      make menuconfig를 실행하여 File sysmtem => Network Filesystem => NFS Client 관련항목을
      선택하고 재컴파일한다.
(4) 관련명령어
   1) exportfs
     ㄱ. 설명: NFS에서 익스포트된 리스트를 보여준다.
     ㄴ. 사용법
        exportfs [option]
     ㄷ. 옵션
        -v : 익스포트된 리스트를 자세히 보여준다.
        -r : 익스포트된 내역을 다시 읽어들인다.
     ㄹ. 사용예
        a. [root@www /]# exportfs
           /data           192.168.0.3/255.255.255.0
        b. [root@www /]# exportfs -v
           /data           192.168.0.3/255.255.255.0(rw,async,wdelay,root_squash)
        c. [root@www /]# exportfs -ar
             => 현재 설정된 내역이나 변경된 내역을 다시 읽어들인다.
   2) showmount
     ㄱ. 설명: NFS서버의 마운트된 정보를 보여준다.
     ㄴ. 사용법
        showmount [option]
     ㄷ. option
        -a : host:dir 형태로 출력한다.
        -e : 익스포트리스트를 보여준다.
     ㄹ. 사용예
        a. [root@www /]# showmount
           Hosts on www:
           192.168.0,3
        b. [root@www /]# showmount -a
           All mount points on www:
           192.168.0.3:/data
        c. [root@www /]# showmount -e
           Export list for www:
           /data 192.168.0.3/255.255.255.0

1. 개요
FTP서버란 말 그대로 File Transfer Protocol 서버, 즉 파일을 업로드하고 다운로드할 수 있도록
해주는 서버이다. 리눅스에서 초기에는 Wu-ftp를 주로 사용했지만, 기능이 부족하고 보안상 취약하여
현재는 ProFTPd를 많이 사용하고 있다. 이 ProFTPd를 이용하여 FTP서버를 구축한다.


2. 설치
(1) 설명: Proftpd의 공식사이트는 http://www.proftpd.net이다. 다운로드가 목적이라면 ftp를 이용
          하여 ftp.proftpd.net으로 접속하면 된다. proftpd는 RPM패키지로 설치하거나 소스로 설치
          할 수 있다.
(2) RPM으로 설치하기
   1) ftp.proftpd.net에 접속한 뒤에 anonymous 계정으로 접속한다.
   2) /distrib/packages/RPMS 디렉토리로 이동한다.
   3) 3개의 파일을 다운로드 받는다.
     proftpd-1.2.8rc2-1.i386.rpm
     proftpd-inetd-1.2.8rc2-1.i386.rpm
     proftpd-standalone-1.2.8rc2-1.i386.rpm
   4) 다운받은 파일 중 원래 프로그램파일인 proftpd-1.2.8rc2-1.i386.rpm을 설치한다.
     예) rpm -Uvh proftpd-1.2.8rc2-1.i386.rpm
   5) proftpd를 단독데몬으로 작동하려면 proftpd-standalone-1.2.8rc2-1.i386.rpm를 설치하고
     xinetd데몬으로 작동하려면 proftpd-inetd-1.2.8rc2-1.i386.rpm을 설치한다.
     예) rpm -Uvh proftpd-standalone-1.2.8rc2-1.i386.rpm
(3) 소스컴파일설치하기
   1) ftp.proftpd.net에 접속한 뒤에 anonymous 계정으로 접속한다.
   2) /distrib/source로 이동한다.
   3) 최신 버전인 proftpd-1.2.7.tar.gz을 /usr/local/src에 다운받는다.
   4) 압축을 푼다.
     tar zxvf proftpd-1.2.7.tar.gz
   5) 압축을 푼 디렉토리로 이동한다.
   6) 환경설정을 한다.
     ./configure --prefix=/usr/local/proftpd --enable-shadow
       => --enable-shadow는 자동으로 패스워드를 지원하도록 하는 옵션이다.
         참고로 --sysconfdir=/etc 옵션으로 컴파일하면 /etc/디렉토리에 설치한다.
   7) 컴파일한다.
     make
   8) 설치한다.
     make install

3. ProFTPd서버의 특징
(1) proftpd.conf파일에서 모든 환경설정이 이루어지며, 전체적인 설정구성이 아파치의 환경 설정
   파일과 유사하다.
(2) FTP서버를 독립적인 데몬형태(Standalone)으로 작동시킬수도 있고, xinetd서버로 선택해서
   작동시킬수 있다.

4. proftpd.conf파일 분석
(1) 설명: 보통 이 파일은 /etc 디렉토리에 위치하나 배포판에 따라 /etc/proftpd 디렉토리에 위치
          하기도 한다.
(2) 주요환경설정
   1) ServerName                      "Proftpd FTP Server"
       => 서버의 이름을 나타내는 항목이다.
   2) ServerType                      standalone
       => 서버의 작동모드를 선택하는 부분이다. standalone은 proftpd자체의 데몬으로 독립적으로
         실행시키는 경우이다. 만약 슈퍼데몬인 xinetd에 의해 실행되려면 inetd라고 설정한다.
   3) DefaultServer                   on
       => 하나의 FTP서버에 여러 개의 아이피 주소가 존재할 경우 이들 주소에 대해서 접속요청이
         있을 때 작동할 지를 결정한다. on이면 접속을 허가하고 off면 접속거부메시지를 보여주면
         서 접속이 되지 않는다.
   4) Port                            21
       => 서비스에 사용할 포트를 말한다. 만일 기본 서비스 포트를 변경하고자 한다면 /etc/servi
         ces파일 내에서 ftp서비스의 포트를 변경한 후에 이 옵션에서 변경된 서비스포트로 지정하
         면 된다.
   5) Umask                           022
       => 새롭게 생성되는 파일과 디렉토리 퍼미션에 적용될 마스크를 지정해 준다. 허가권은 디렉
         토리인 경우에는 777, 파일인 경우에는 666에서 이 값을 뺀 값이 기본설정허가권이다.
   6) MaxInstances                    30
       => 서버가 standalone모드로 작동할 때 생성될 수 있는 최대 자식의 프로세스수를 설정한다.
   7) User                            nobody
      Group                           nobody
       => 데몬을 실행할 사용자와 그룹의 소유권을 지정한다. 일반적으로 nobody로 작동된다.
   8) RootLogin                       off
       => root계정으로의 로그인여부를 지정한다.
   9) DeferWelcome                    on
       => 클라이언트가 서버에 접속했을 때 완전한 인증이 이루어질 때까지 호스트의 어떠한 정보
         도 제공하지 않도록 하는 것으로 보안유지를 위해 사용한다. 기본값은 on상태로 사용하면
         된다.
   10) DefaultRoot                   /
        => FTP 서버에 일반 계정으로 접속한 사용자에게 최상위 디렉토리를 지정해주는 것이다.
          만약 위와 같이 / 로 설정하면 / 디렉토리까지 접근가능하다. 일반 계정자의 홈디렉토리를
          최상위로 설정 즉 ~/ 로 하면 홈디렉토리가 최상위가 되므로 그 상위단계로의 접근을 막을
          수 있다. <Anonymous> ~ </Anonymous> 영역내에서는 사용하지 않는다.
   11) <Directory />

       AllowOverwrite                on
       </Directory>
        => 특정한 디렉토리의 권한을 설정하는 부분이다. 현재 설정은 기존에 있던 똑같은 파일에
          덮어쓰기를 허가할 것인지를 나타낸다. 현재 설정은 덮어쓰기를 허가한다.
   12) <Anonymous ~ftp>
        => 익명의 사용자가 로그인할 디렉토리를 지정한다.
       User                          ftp
       Group                         ftp
        => 익명의 사용자의 로그인을 위해 데몬이 ftp 사용자와 그룹으로 작동하게 하도록 하기위한
           설정이다.
       UserAlias                     anonymous ftp
        => anonymous계정이외에도 ftp라는 계정으로도 로그인할 수 있도록 하기 위한 설정이다.
          이 설정을 서버 입장에서 보면 실제 계정은 ftp라는 계정밖에 존재하지 않는다. 그러나 일
          반적인 FTP서버에서는 anonymous라는 계정으로 익명의 접속을 허가한다. 따라서 ftp라는
          계정을 anonymous라는 계정으로 로그인할 수 있도록 해주는 설정이다. 만약, 익명의 계정
          을 park로 허가하려면 "UserAlias               park ftp"로 설정한다.
       MaxClients                    10 "Sorry, maxium users %m -- try again later"
        => 서버에 접속할 수 있는 최대 클라이언트수를 지정한다. 접속차단과 함께 메시지를 보여줄
          수 있으며 %m은 접속할 수 있는 최대 클라이언트수를 나타낸다. 접속자 수를 제한하지
          않으려면 이 값을 none으로 설정한다.
       MaxClientsPerHost             2 "Sorry, Over 2 connection not allow"
        => 한 호스트당 접속할 수 있는 개수를 지정한다.
       DisplayLogin                  welcome.msg
        => 클라이언트가 서버에 접속했을 때 환영메시지를 전달해주는 메시지파일을 지정하는 항목
          이다. 파일은 상대경로나 절대경로로 지정할 수 있으며, 상대경로로 지정할 경우 user가
          접속했을 때 처음 디렉토리를 기준으로 찾게된다. 일반 user의 경우에는 user의 홈디렉토
          리가 기준이 되며, user의 홈디렉토리에 지정한 파일이 있으면 접속시에 메시지를 출력해
          주고 없더라도 파일이 없다는 등의 에러는 발생하지 않는다.
       DisplayFirstChdir             .message  
        => 클라이언트가 cwd명령어를 통해 이동할 때 클라이언트에게 출력할 메시지를 적는 파일을
          지시한다. 즉, 접속한 사용자가 cd명령을 이용해 처음으로 다른 디렉토리로 접근할 때
          접근한 디렉토리에 .message 파일이 잇으면 file의 내용을 보여주게 된다. 이 파일의
          내용은 FTP서버에 접속하여 디렉토리에 처음 접근할 때에만 보여준다.
       RequireVal!idShell             off
        => /etc/shells 파일에 정의되지 않는 shell을 사용하는 유저에게 FTP 접속을 허락하거나
          거절하는 것을 지정하는 항목이다. 기본적으로 ProFTP서버에 서는 on상태이므로 /etc/she
          lls에 User들이 사용하는 shell이 없으면 Login할 수 없게 된다. 그러므로 anonymous User
          로 접속을 하고자 한다면 RequireVal!idShell을 off로 해주어야 login이 된다.
       <Limit> ~ </Limit>
        a. 설명: 주어진 문맥속에서 FTP명령어를 사용하는데 제한을 두기 위하여 사용되는 지시자
                이다.
        b. FTP명령어
          -CWD : 작업 디렉토리를 변경할 때 클라이언트에게 전송
          -MKD : 새로운 디렉토리를 만들 때 클라이언트에게 전송
          -RNFR(Rename From), RNTO(Rename To): 디렉토리 항목의 이름을 변경할 때 클라이언트에게
                                              쌍으로 전송
          -DELE(Delete) : 파일을 삭제할 경우 클라이언트에게 전송
          -RMD : 디렉토리를 삭제할 경우 클라이언트에게 전송
          -RETR(Retrieve): 서버에서 클라이언트로 파일 전송
          -STOR(Store): 클라이언트에서 서버로 파일 전송
          -READ: 파일 읽기를 다루는 모든 FTP명령(디렉토리 목록은 제외)
          -WRITE: 파일 또는 디렉토리 쓰기/생성/삭제를 다루는 모든 FTP명령
          -DIRS: 디렉토리 목록을 다루는 모든 FTP명령(LIST, NLST, CWD)
          -LOGIN: 접속이 제한된 유저들을 anonymous부분에서는 허가할 때 사용한다.
            예) <Limit LOGIN>

                  AllowAll
                </Limit>
          -ALL: 모든 FTP명령
        c. 사용예
          1. <Limit DIRS>
             DenyAll
             </Limit>
              => 익명으로 접속한 후에 해당 디렉토리 상태에서 DIRS에 관련된 모든 명령어는 Deny
                All로 지정하여 모두 실행을 거부하도록 하는 것이다. 이러한 설정을 했을 경우에는
                ls명령을 실행하더라도 목록이 나오지 않지만, cd명령을 사용하여 디렉토리 이동은
                가능하다.
          2. <Limit DIRS READ WRITE>
             Order Allow, Deny
             Allow from 192.168.3.63 192.168.3.64
             Deny from all
             </Limit>

              => Order지시자는 호스트별 허가와 거부정책를 사용하기 위한 설정이고, 실질적인
                설정은 Allow에서 사용허가할 호스트를 지정하고 Deny에서 거부할 호스트를 설정하
                면 된다.
          3. anonymous FTP 설정 예제

User ftp Group ftp UserAlias anonymous ftp MaxClients 10 "최대 접속가능인원은 %m 명 -잠시 뒤에 다시 접속" MaxClientsPerHost 2 "한 호스트당 최대 2명까지입니다!" DisplayLogin welcome.msg DisplayFirstChdir .message RequireVal!idShell off AllowAll Order Allow, Deny Allow from mybestone.com DenyAll AllowAll 4. anonymous FTP 설정 예제(2) - download라는 디렉토리가 anonymous 유저에게 저장만 가능하고, 삭제가 불가능하도록 설정 User ftp Group ftp UserAlias anonymous ftp MaxClients 5 "최대 접속가능인원은 %m 명 -잠시 뒤에 다시 접속" MaxClientsPerHost 1 "한 호스트당 최대 1명까지입니다!" DisplayLogin welcome.msg DisplayFirstChdir .message RequireVal!idShell off AllowAll DenyAll
(3) 유용한 환경설정
   1) DefaultRoot
    ㄱ. 설명: 사용자들을 그룹별로 FTP접속되는 디렉토리를 설정한다.
    ㄴ. 특징
       a. 이 지시자를 사용하면 상위디렉토리를 볼 수가 없다.
       b. <Anonymous>지시자에는 이 기능을 포함하고 있으므로 사용하면 안된다.
    ㄷ. 사용예
      a. DefaultRoot                     ~
          => 최상위 디렉토리를 개인 홈디렉토리로 제한
      b. DefaultRoot                     /home/ftp/ terran, zerg, !protoss
          => terran, zerg그룹은 /home/ftp로 설정하고 protoss그룹은 제외한다.
   2) HiddenStor             on/off
     => on으로 설정하면 업로드중인 파일이 다운로드되는 것을 막을 수 있다.
   3) HiddenNoAccess
     => <Directory> 또는 <Anonymous>로 지정되어 있는 블럭에 로그인했을 경우 접근
       권한이 사용자에게 디렉토리를 보이지 않게 한다. 보통 "Permission denied"의 에러메시지를
       받는 디렉토리에 대해서 디렉토리를 볼 수 없도록 한다.


5. ProFTPd를 xinetd데몬으로 실행하기
(1) 설명: standalone모드가 아닌 xinetd로 작동하기 위해서는 /etc/xinetd.d디렉토리에 proftpd
          설정서비스 파일이 존재해야 한다.
(2) 설정하기
   1) proftpd.conf에서 "ServerType                    inetd"로 바꾼다.
   2) xinetd 서비스와 관련된 디렉토리인 /etc/xinetd.d 에 다음과 같은 형식으로 만든다.
     [root@www xinetd.d]# cat proftpd
     service ftp
     {
             disable                 = no                 // 이 부분의 값이 no 이어야 한다.
             flags                   = REUSE
             protocol                = tcp
             socket_type             = stream
             instances               = 50
             wait                    = no
             user                    = root
             server                  = /usr/sbin/in.proftpd
             log_on_success          = HOST PID
             log_on_failure          = HOST RECORD
     }
   3) xinetd데몬을 재가동한다.
     [root@www xinetd.d]# /etc/rc.d/init.d/xinetd restart

5. ProFTPd 기타설정
(1) 일반 계정으로 anonymous 사용하기 : movie라는 계정으로 anonymous사용하기
   1) movie라는 계정을 추가한다.
     useradd movie
   2) movie라는 계정이 텔넷같은 기타다른 접속을 막는다.
     vi /etc/passwd로 movie의 shell을 /bin/false로 바꾼다.
   3) proftpd.conf 파일 설정하기
User movie Group movie UserAlias anonymous movie MaxClients 10 "Sorry, maxium users %m -- try again later" MaxClientsPerHost 2 "Sorry, Over 2 connection not allow" DisplayLogin welcome.msg DisplayFirstChdir .message RequireVal!idShell off AllowAll 4) proftpd 데몬을 재시작한다.
(2) welcome.msg파일을 만들어 보자.
   1) 설명: welcome.msg파일은 접속시에 메시지를 보여주는 파일이다. 이 메시지파일은 Magic
           cookie라는 것을 사용하여 편리하게 정보를 보여준다.
   2) magic cookie
     %T : 현재 시간을 출력한다.
     %F : 사용가능한 하드 디스크 공간을 출력한다.
     %C : 현재 작업 디렉토리를 출력한다.
     %R : 원격 호스트 이름을 출력한다.
     %L : 로컬 호스트 이름을 출력한다.
     %u : ident프로토콜에 의해 확인된 사용자명을 출력한다.
     %U : 로그인시 사용된 사용자명을 출력한다.
     %M : 접속 가능한 최대 사용자수를 출력한다.
     %N : 현재 접속되어 있는 사용자수를 출력한다.
     %E : 서버 관리자의 메일 주소를 출력한다.
     %x : 사용자 클래스의 이름을 출력한다.
     %y : 사용자 클래스의 현재 접속 개수를 출력한다.
     %z : 사용자 클래스의 최대 접속 개수를 출력한다.
   3) 설정예
     --------------------------------------------------------------
     환영합니다.
     마이베스트 입니다.

        - 시스템 정보 -
     현재 당신이 접속한 서버는 %L입니다.
     남은 용량은 %F KB
     현재 접속자수는 %N / %M  입니다. (현재인원/총접속가능한 인원)
     당신은 %R에서 %U라는 사용자명으로 접속하였습니다.
     현재시각은 %T 입니다.
     문의하실 사항은 %E로 보내주세요.
   4) 접속 결과
     --------------------------------------------------------------
     환영합니다.
     마이베스트 입니다.

       - 시스템 정보 -
     현재 당신이 접속한 서버는 mybestone.com입니다.
     남은 용량은 3540236 KB
     현재 접속자수는 1 / 10  입니다. (현재인원/총접속가능한 인원)
     당신은 203.247.40.248에서 movie라는 사용자명으로 접속하였습니다.
     현재시각은 Thu Oct 10 03:06:36 2002 입니다.
     문의하실 사항은
root@mybestone.com로 보내주세요.
(3) Virtual Host 설정해보자
   1) 조건
     ㄱ. 가상 호스트 이름: ftp.linux.com
     ㄴ. 가상 호스트가 사용할 포트번호: 12345번
     ㄷ. 접속한 사용자들이 자신의 홈디렉토리를 벗어나지 못하도록 설정
   2) 설정예
     <VirtualHost ftp.linux.com>
          Port 12345
          DefaultRoot ~
     </VitrualHost>
(4) Root로 로긴하기
   1) FTP서버에 접속시 거부목록파일 역할을 하는 /etc/ftpusers 파일에서 root라는 계정을 삭제
     한다.
   2) proftpd.conf 파일에서 다음과 같은 지시자로 설정해준다.
     RootLogin                       on
   3) proftpd 데몬을 재시작하거나 xinetd 데몬을 재시작한다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 개요
리눅스에서 FTP서버를 사용하기 위해서는 FTP서버 프로그램을 설치해야 하는데, 대표적인 프로그램
이 두가지가 있다. 하나는 Wu-ftpd라는 프로그램으로 원래 리눅스에서 전통적으로 사용하던 프로그램
이다. 또 다른 하나는 Pro-FTPd라는 프로그램으로 보안상 안전하고 설정이 아파치 웹서버 프로그램이
랑 유사하다. 여기서는 레드햇 8.0에 기본으로 설치되어 있는 Wu-ftpd에 대해 알아본다.


2. Wu-ftpd서버 데몬 작동시키기
(1) 설명: Wu-ftp는 슈퍼데몬인 xinetd에 속해 있다. xinetd에 속해있는 데몬들이 위치해 있는 디렉
         토리인 /etc/xinetd.d에서 wu-ftpd라는 파일의 설정을 바꿔주면 된다.
(2) 방법
   1) 파일을 직접 변경하기
     ㄱ. 기본 설정예
        [root@www root]# cat /etc/xinetd.d/wu-ftpd
        # default: on
        # description: The wu-ftpd FTP server serves FTP connections. It uses \
        #       normal, unencrypted usernames and passwords for authentication.
        service ftp
        {
                disable = yes
                socket_type             = stream
                wait                    = no
                user                    = root
                server                  = /usr/sbin/in.ftpd
                server_args             = -l -a
                log_on_success          += DURATION
                nice                    = 10
        }
          => 데몬 작동과 관련된 항목이 disable 항목인데 이 값이 yes라서 wu-ftp가 작동하지 않는
            다. 이 값을 no 라고 바꾼다.
     ㄴ. 변경후에 xinetd 데몬을 다시 구동한다.
        service xinetd restart
   2) chkconfig 명령어 이용하기
     ㄱ. [root@www root]# chkconfig wu-ftpd on
           => 이 명령을 시행하면 /etc/xinetd.d/wu-ftpd라는 파일의 disble항목값이 no로 바뀐다.
     ㄴ. 변경후에 xinetd 데몬을 다시 구동한다.
        service xinetd restart

3. Wu-ftp서버 작동 유무 테스트하기
(1) 설명: 기본 FTP 포트인 21번 포트로 접속을 해본다.
(2) 방법
    [root@www root]# telnet localhost 21
    Trying 127.0.0.1...
    Connected to www (127.0.0.1).
    Escape character is '^]'.
    220 www FTP server (Version wu-2.6.2-8) ready.
     => FTP서버가 작동중임을 알 수 있다. 'quit'라고 치면 접속에서 빠져나온다.

4. Wu-ftp서버 관련파일
(1) /usr/sbin/in.ftpd: 실제 wu-ftp 서버의 데몬으로 기본적으로 xinetd에 의해 관리된다.
(2) /etc/ftpaccess: FTP서버에 접근 관련 설정파일이다.
(3) /etc/xinetd.d/wu-ftpd: xinetd 데몬관련 서비스 파일이다.
(4) /etc/ftpusers: FTP서버를 이용할 수 없는 유저의 목록파일이다. 기본적으로 root 계정도 이용
                   불가이므로 root계정자가 ftp를 사용하려면 이 파일목록에서 삭제해야 한다.
(5) /etc/ftphosts: 특정호스트의 FTP서버 접근 허용 유무를 설정하는 파일이다.

5. Wu-ftp서버 환경 설정
(1) /etc/ftpaccess
   1) 설명: Wu-ftp의 주 환경설정 파일이다.
   2) 기본설정과 주요항목 설명
     [root@www root]# cat /etc/ftpaccess
     This file controls the behavior! of the wu-ftpd
     # ftp server.
     #
     # If you're looking for a graphical frontend to
     # editing it, try kwuftpd from the kdeadmin
     # package.

     # Don't allow system accounts to log in over ftp
     deny-uid %-99 %65534-
     deny-gid %-99 %65534-
     allow-uid ftp
     allow-gid ftp           // 접근을 허가할 사용자와 거부할 사용자를 지정하는 부분이다. 현재
                             //설정은 uid값이 처음부터 99까지와 65534가 넘어가는 사용자는 접속
                             //을 거부한다는 뜻이고, gid도 같은 설정이다. 위에 속해있는 uid/gi
                             //d에서 ftp사용자는 허가한다는 뜻이다.


     # Chroot all users to their home directory by default
     # (comment this out if you don't want to chroot most of your users)
     guestuser *        // 모든 사용자를 guest취급한다. 즉 anonymous처럼 자기 홈디렉토리가
                        //최상위 root디렉토리로 된다.
     # If you wish to allow user1 and user2 to access other
     # directories, use the line below:
     # realuser user1,user2               // 실제 유저로 인정할 계정을 적는다.


     # The ftpchroot group doesn't exist by default, this
     # entry is just supplied as an example.
     # To chroot a user, modify the line below or create
     # the ftpchroot group and add the user to it.
     #
     # You will need to setup the required applications
     # and libraries in the root directory (set using
     # guest-root).
     #
     # Look at the anonftp package for the files you'll need.
     guestgroup ftpchroot           // 게스트그룹으로 인정할 그룹명을 적는다.

     # User classes...
     class   all   real,guest,anonymous  *     
       // FTP서버에 접속하는 사용자와 방법, 접속자의 주소를 지정한다. 기본 형식은 아래와 같다.
       // class <class> <typelist> <addrglob> [ <addrglob> ...]
       //<typelist>는 'anonymous','guest','real'이라는 keyword가 존재하며 이 3개의 키
       //워드는 콤마(comma)로 구분하고, 각각의 사이에 공백을 넘어서는 안된다.. 'real'은 실제
       //사용자계정을 말하며, anonymous는 anonymous FTP를 위한 사용자(anonymous, ftp)를 말하고,
       //guest는 손님사용자로 처리되는 사용자를 말한다. addrglob는 ftp서버에 접속하는 사용자의
       //주소를 적는다. 도메인 이름이나 IP주소로 지정하며, 와일드문자와 여러 개의 주소도 지원
       //한다.

       // 위의 예는 all이라는 class를 지정하는 것이다. typelist에  real,guest,anonymous 라고
       //지정되어 있는데, real값이 가장 먼저 나왔으므로 ftp접속사용자와 실제 계정사용자와 일치
       //하는 지를 구별한 뒤에 해당 계정의 홈 디렉토리로 접속시킨다.
     # Set this to your email address
     email root@localhost              // ftp서버의 관리자 이메일 주소를 설정한다.

     # Allow 5 mistyped passwords
     loginfails 5                     // 지정한 로그인회수 만큼 실패하면 FTP연결을 끊는다.

     # Notify the users of README files at login and when
     # changing to a different directory
     readme  README*    login           
     readme  README*    cwd=*       // 이 설정은 안내파일인 README파일이 존재할 경우 README
                                    //파일을 존재한다고 알려주는 역할을 한다. login은 로그인
                                    //할 때 알려준다는 뜻이고, cwd는 특정디렉토리로 이동시에
                                    //알려준다는 뜻이다.

     # Messages displayed to the user
     message /welcome.msg            login     
     message .message                cwd=*     // 로그인시나 디렉토리이동시에 해당 파일의 내용
                                               //을 보여준다. 여기서 참고할 점은 /welcome.msg
                                               //이다. 만약 해당 사용자를 realuser로 등록하면
                                               //로그인 경로가 '/home/사용자계정명'이 되므로
                                               //realuser설정과 비교하면서 설정해야 한다.

     # Allow on-the-fly compression and tarring
     compress        yes             all
     tar             yes             all     // compress와 tar사용을 가능하게 한다. 실제전환은
                                             //외부파일인 /etc/ftpconversions에 의해 정의되어
                                             //진다.

     # Prevent anonymous users (and partially guest users)
     # from executing dangerous commands
     chmod           no              guest,anonymous
     delete          no              anonymous
     overwrite       no              anonymous
     rename          no              anonymous          // 특정한 명령에 대한 사용자들의 사용
                                                        //허가여부를 지정한다.

     # Turn on logging to /var/log/xferlog
     log transfers anonymous,guest,real inbound,outbound  
     // FTP사용자들의 자료전송과정을 /var/log/xferlog'에 기록하도록 하는 설정이다. 현재 설정의
     //예는 'anonymous,guest,real 사용자들의 inbound(서버안으로 파일을 전송하는 것), outbound
     //(서버에서 밖으로 파일이 전송되는 것)를 기록한다.

     # If /etc/shutmsg exists, don't allow logins
     # see ftpshut man page
     shutdown /etc/shutmsg        // shutdown 명령뒤에 있는 해당파일이 존재하면 ftp접속허가를
                                  //불허하고 그 안의 메시지를 보여준다. 참고로 이 메시지는
                                  //realuser로 등록된 사용자에 한하여 적용된다.

     # Ask users to use their email address as anonymous
     # password
     passwd-check rfc822 warn    // 익명사용자에 대한 패스워드 점검 방법을 지정한다.


6. Wu-ftp서버 환경 응용예
(1) root사용자 허가하기
   1) /etc/ftpusers 에서 root 계정을 삭제하거나 주석처리한다.
   2) /etc/ftpaccess에서 allow-uid 및 allow-gid로 root계정을 설정한다.
     예) allow-uid root
         allow-gid root
          => 다른 계정사용자를 추가로 지정하려면 한 칸 띄우고 계정명을 입력한다.
            예)
                allow-uid ftp root
                allow-gid ftp root
   3) xinetd 데몬을 재시작한다.
     service xinetd restart
(2) 일반사용자를 실제사용자로 인식시키기
   1) 설명: wu-ftp의 기본 설정은 모든 사용자를 guest로 유저로 본다. 즉, 자기 계정으로 접속한다
           고 하더라도 자기 홈디렉토리가 '/'로 인식한다. 특정한 사용자를 실제사용자로 인식시키
           면 자기가 실제 접속한 디렉토리로 확인가능하고 상위의 디렉토리로 이동이 가능하다.
   2) 방법: /etc/ftpaccess 파일항목에서 realuser라는 부분이 주석처리 되어 있는데, 주석처리를
           없애고, 사용할 계정을 적는다.
     ㄱ. vi /etc/ftpaccess 파일을 연다.
     ㄴ. 'realuser 계정명' 을 적는다.
        예) realuser posein
     ㄷ. xinetd 데몬을 재가동한다.
(3) /etc/ftpaccess의 class 사용예
   1) class   all   anonymous   *
       => 모든사이트(*)에서 접속하는 모든 사용자는 all이라는 클래스로 정의되어 익명으로 접속할
         수 있다.
   2) class   member   real   203.247.xxx.100 203.247.xxx.101 210.184.xxx.241
       => 203.247.xxx.100 203.247.xxx.101 210.184.xxx.241라는 네트워크 주소로 접속하는 사용자
         들은 member라는 클래스로 정의되고, 모든 실제 계정으로만 접속가능하고, anonymous접속
         및 guest접속은 허가하지 않는다.
   3) class   member   real,anonymous   *
       => 모든 사이트로부터 접속하는 사용자들은 member라는 클래스로 정의되고, 계정접속을 시도
         하면 계정으로 접속을 처리하고, 계정이 없으면 익명 접속으로 처리한다.
(4) /etc/ftpaccess의 readme 사용예
   1) 기본설정예
     readme  README*    login
     readme  README*    cwd=*
       => 현재 기본 설정상태이다. 이 상태에서 개인 홈디렉토리에 README파일을 생성해보자.
         (접속예) Please read the file README
                  it was last modified on Tue Feb 18 00:47:20 2003 - 0 days ago
   2) 응용예
     readme /home/posein/README       login
     readme /home/posein/pds/README   cwd=*
      => /home/posein이라는 디렉토리로 접속했을 때 README파일이 존재하면 존재한다는 메시지를
        보여주고 또한 /home/posein/pds 디렉토리로 이동시 README파일이 존재하면 존재한다는 메
        시지를 보여준다.
(5) /etc/ftpaccess의 message 사용예
   1) 기본설정예
     message /welcome.msg            login
     message .message                cwd=*
      => 이 설정상태에서 개인 사용자의 홈디렉토리에 welcome.msg파일을 만들고 안에 메시지글을
        작성하면 로그인시에 보이고, 또한 특정디렉토리에서 .message라는 파일을 생성하고 그 파일
        안에 메시지글을 작성하면 디렉토리 이동시에 글이 보인다.
   2) Magic Cookies
    ㄱ. 설명: 메시지파일 작성시에 지원하는 특별한 형태의 값이다. 다른 FTP서버 프로그램인 Pro-
             FTP도 같이 지원한다.
    ㄴ. 종류
       %T : 현재 시간을 출력한다.
       %F : 사용가능한 하드 디스크 공간을 출력한다. (모든 시스템을 지원하지는 않는다.)
       %C : 현재 작업 디렉토리를 출력한다.
       %R : 원격 호스트 이름을 출력한다.
       %L : 로컬 호스트 이름을 출력한다.
       %u : ident프로토콜에 의해 확인된 사용자명을 출력한다.
       %U : 로그인시 사용된 사용자명을 출력한다.
       %M : 접속 가능한 최대 사용자수를 출력한다.
       %N : 현재 접속되어 있는 사용자수를 출력한다.
       %E : 서버 관리자의 메일 주소를 출력한다.
       %x : 사용자 클래스의 이름을 출력한다.
       %y : 사용자 클래스의 현재 접속 개수를 출력한다.
       %z : 사용자 클래스의 최대 접속 개수를 출력한다.
    ㄷ. 설정예
       --------------------------------------------------------------
       환영합니다.
       마이베스트 입니다.

          - 시스템 정보 -
       현재 당신이 접속한 서버는 %L입니다.
       현재 접속자수는 %N / %M  입니다. (현재인원/총접속가능한 인원)
       당신은 %R에서 %U라는 사용자명으로 접속하였습니다.
       현재시각은 %T 입니다.
       문의하실 사항은 %E로 보내주세요.
    ㄹ. 접속 결과
       --------------------------------------------------------------
       환영합니다.
       마이베스트 입니다.

         - 시스템 정보 -
       현재 당신이 접속한 서버는 mybestone.com입니다.
       현재 접속자수는 1 / 10  입니다. (현재인원/총접속가능한 인원)
       당신은 203.247.40.248에서 movie라는 사용자명으로 접속하였습니다.
       현재시각은 Thu Oct 10 03:06:36 2002 입니다.
       문의하실 사항은
root@mybestone.com로 보내주세요.
(6) /etc/ftpaccess의 shutdown 사용예
   1) 기본설정예
     shutdown /etc/shutmsg
      => /etc/shutmsg 파일을 생성하여 설정하면 된다.
   2) 메시지파일 : 전달메시지부분에 magic cookies를 사용할 수 있다.
    ㄱ. 기본형식
       year month day hour minute deny_offset disc_offset
       text
         => (설명)
            year: 1970년이후의 값을 적는다.
            month: 0 ~ 11로 표시한다. 주의할 점은 0이 1월이라는 것이다.
            day: 날짜를 입력한다.
            hour: 0 ~ 23의 값을 입력한다.
            minute:0 ~ 59의 값을 입력한다.
            deny_offset: 셧다운 되기 전에 새로운 접속을 거부할 시간을 지정한다. HHMM이 기본형
                        식이다.
            disc_offset: 현재 접속중인 연결을 끊을 시간을 지정한다. HHMM이 기본형식이다.
            text: 사용자에게 보여줄 메시지를 기록한다. magic cookies의 사용이 가능하다.
    ㄴ. magic cookies
       %s : 셧다운이 될 시간
       %r : 새로운 접속을 거부할 시간
       %d : 현재 연결을 차단할 시간
    ㄷ. 사용예
       2003 01 19 17 30 0100 0001
       System will be shutdown at 17:30. You connection will connected at %d
        => 2003년 2월 19일 오후 5시 30분에 FTP서버를 종료할 것이고, 새로운 접속자는 종료시간
          1시간 이전부터 접속이 금지되며, 현재 연결된 사용자는 종료 1분전에 차단된다는 메시지
          가 보여진다.
(7) /etc/ftpaccess의 passwd-check 사용예
   1) 기본형식
     passwd-check 조건 action
   2) 조건
     none : anonymous접속자들의 패스워드 체크를 하지 않는다.
     trivial : 패스워드에 @(at)문자가 포함되어 있는지만 체크한다.
     rfc822 : rtc822에 정의한 내용대로 체크한다. rfc822설정은 정확한 이메일을 기입하라는 뜻이
             라고 생각하면 된다.
   3) action
     warn : 접속자가 '조건'을 지키지 않았을 때 경고메시지를 보내고 접속은 허가한다.
     enforce: 접속자가 '조건'을 지키지 않았을 때 접속을 허가하지 않는다.
   4) 기본설정예
     passwd-check rfc822 warn
      => rfc822와 일치하는 지를 검사하고 warn 수준으로 처리한다.
   5) 응용예
     passwd-check rfc822 enforce
      => 틀린 이메일주소를 입력하면 접속이 허가되지 않는다.

7. /etc/ftphosts
(1) 설명: 이 파일은 특정호스트 및 특정 사용자의 접속을 허가할 것인지 거부할 것인지를 지정하는
          파일이다.
(2) 기본형식
    allow 사용자계정 주소
    deny  사용자계정 주소
(3) 사용예
   ㄱ. allow * *
      => 모든 호스트의 모든 사용자를 허가한다.
   ㄴ. deny * 203.247.100.*
      => 203.247.100.0 네트워크대역을 갖는 모든 사용자의 접속을 거부한다.

8. Wu-FTP관련 명령어
(1) ftpcount
   1) 설명: ftp서버를 이용하고 있는 사용자 수를 보여주는 명령이다.
   2) 사용법
     ftpcount
   3) 사용예
     [root@www root]# ftpcount
     Service class all                  -   1 users (no maximum)
(2) ftpwho
   1) 설명: ftpcount와 유사한 명령으로 서버에 접속한 사용자 정보를 보여준다.
   2) 사용법
     ftpwho
   3) 사용예
     [root@www root]# ftpwho
     Service class all:
     18847 ?        S      0:00 ftpd: 203.247.40.247: posein: IDLE
        -   1 users (no maximum)
(3) ftpshut
   1) 설명: ftp서버를 셧다운 시킬 때 사용하는 명령이다.
   2) 사용법
     ftpshut [options] time [warning-message]
   3) options
     -l 분 : 새로운 접근을 거부할 시간을 정한다.
     -d 분 : 현재접속중인 접근을 끊을 시간을 정한다.
   4) time: ftp서버를 다운시킬 시간을 말한다.
     now     : 즉시 shutdown시킨다.
     +number : 분(number값)으로 셧다운 시간을 지정한다.
     HHMM    : 24시간형식으로 셧다운 시간을 지정한다.
   5) warning-message : 경고메시지를 적는다. 75문자의 길이 형식을 취한다. magic cookies의 사용
                       이 가능하다.
   6) 사용예
     ftpshut now
      => 지금 즉시 ftp서버를 중지시킨다.
   7) 참고
     ftpshut 명령을 사용하여 셧다운이 되면 /etc/shutmsg파일이 생성된다. 따라서, 계속적으로 ftp
    서버로의 접속이 불가능해지므로 이 파일을 삭제해야 한다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 아파치란?
인터넷상에서 우리는 보통 www이라고 치면서 접속한다. www이라고 치면서 들어갈 때 우리는 특별한
프로토콜을 이용하게 되는데 그 프로토콜이 HTTP이다. 이 HTTP프로토콜을 리눅스(유닉스)에서는 보
통 httpd라는 데몬으로 서비스하며, 보통 우리는 Webserver라고 부른다. 이러한 Webserver중에서 가
장 대표적인 것이 Apache이다.


2. apache 설치
(1) 기존의 아파치 버전을 확인한다.
    rpm -qi apache
(2) 최신버전의 아파치파일을 다운받는다.
   apache_1.3.26.tar.gz을 다운받아 /usr/local/src에 위치시킨다.
(3) 압축을 푼다.
   tar zxvf apache_1.3.26.tar.gz
(4)기존의 인스톨된 apache제거하기
   1) 아파치 데몬을 정지시킴 : /etc/rc.d/init.d/httpd stop
   2) 인스톨된 아파치를 찾는다. : rpm -qi apache
   3) 찾아진 아파치를 모두 제거한다.
     예) rpm -e apache --nodeps
     (참고) 기존의 아파치를 rpm -e 명령으로 제거해도 리눅스배포판에 따라 몇몇의 디렉토리나
           파일이 제거 안 될 수도 있다. 이 경우에는 일일히 수동으로 제거해준다. 물론 제거하지
           않아도 시스템의 공간을 조금 차지하고 있을뿐 큰 지장은 없다.
(5) 설치한다. (여기서는 그냥 아파치만 설치하는 것으로 한다.)
   1) cd apache_1.3.26
   2) ./configure --prefix=/usr/local/apache
   3) make
   4) make install
   (참고) ./configure에 관련된 옵션을 확인하려면 ./configure --help명령을 내리면 된다.
(6) 아파치의 디렉토리구조
   1) 개요: 아파치를 설치하게 되면 /usr/local/apache디렉토리 아래에 bin, cgi-bin, conf,
           htdocs, libexec, logs, icons, include, proxy, man 디렉토리로 구성되며, conf디렉토리
           에 아파치 웹서버의 주 설정파일인 httpd.conf파일이 들어있다.
   2) 디렉토리설명
     ㄱ. /bin : apache사용시에 필요한 유틸리티들이 위치하는 디렉토리
     ㄴ. /cgi-bin : cgi 스크립트가 들어있는 디렉토리
     ㄷ. /conf : apache의 여러가지 환경 설정파일이 들어있는 디렉토리(httpd.conf)
     ㄹ. /icons : apache에서 사용되는 아이콘들이 들어있는 디렉토리
     ㅁ. /logs: apache서버 운영시 발생하는 여러 log들이 위치하는 디렉토리
     ㅂ. /htdocs : 웹문서들이 위치하는 기본 디렉토리이다.
     ㅅ. /include: 헤더파일들이 위치하는 디렉토리이다.
     ㅇ. /man : man 페이지에 추가할 수 있도록 만들어 놓은 파일관련 디렉토리이다.

(참고) apache관련 항목 man 명령의 메뉴얼로 등록하기
1. 설명
  /usr/local/apache/man 디렉토리에 보면 man용 메뉴얼파일이 있다. 추가로 설치한 응용프로그램들
의 메뉴얼페이지가 위치하는 /usr/local/man디렉토리에 등록하면 man 명령으로 메뉴얼페이지를 확인
할 수 있다.
2. 방법
  cp /usr/local/apache/man/man1/* /usr/local/man/man1
  cp /usr/local/apache/man/man8/* /usr/local/man/man8

3. apache의 환경설정
(1)apache의 환경설정파일
   예전의 apache서버에서는 환경 설정파일이 3가지로 나뉘어 있었다. 각각 웹서버 프로세스에 관련
  된 내용을 다루고 있는 ServerConfig파일(보통 httpd.conf)와 서버에 제공하고자 하는 자원들에
  관련된 ResourceConfig파일(보통 srm.conf), 서버에 접근을 제한하고자 하는 항목들을 가지고 있는
  AccessConfig파일(보통 access.conf)이었다. 그러나, 현재의 apache서버에서는 ServerConfig파일인
  httpd.conf파일에 모든 기능을 내포하고 있다.

(2) httpd.conf : apache에 관한 전반적인 환경설정을 하는 파일로서 '#'으로 시작되는 라인은 주석
                (comment)처리되어 실제 설정과는 관계없는 line이 된다.
   1) 구성
    ㄱ. Global Environment: 아파치를 전반적으로 제어하는 부분(전체환경설정)
    ㄴ. Main Server Configuration: 가상호스트에서 처리되는 않는 요청을 모두 처리해주는 주서버
                                  또는 기본 서버의 작동을 제어하는 부분(메인서버 환경설정)
    ㄷ. Virtual Host: 다른 IP와 호스트 이름을 처리하는 가상호스트 설정부분
   2)주요설정 : httpd.conf파일은 세가지 섹션 설정으로 구성되어 있다.
    ### Section 1: Global Environment
     -ServerType standalone : 서버 타입을 어떤 방식으로 운영할 것인지 설정하는 부분이다. 두가
                             지 방법을 선택할 수 있다. 슈퍼데몬인 inetd에 의하여 작동되냐 아니
                             면 단독(standalone)이냐로 설정하는데 linux는 응답속도가 빠른 stan
                             dalone 으로 동작한다. 기본값이다.
     -ServerRoot "/usr/local/apache": 웹서버가 설치되는 디렉토리를 나타낸다. 이 곳에 환경설정
                                     파일, log파일, 에러파일, 실행바이너리 등이 위치한다.
     -PidFile /usr/local/apache/logs/httpd.pid : 서버가 시작할 때 자신의 프로세스 ID를 기록할
                                                파일을 나타낸다.
     -ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard 
       : Internal server process정보를 기록할 때 사용한다. 모든 아키텍쳐에서 요구되는 것은 아
        니며, 필요한 경우 아파치 실행 프로세스의 값이 겹치지 않도록 해주면 된다.
     -Timeout 300 : 받기/보내기 타임 아웃 시간을 설정한다.
     -KeepAlive On : 지속적인 접속을 허가할 것인지 말 것인지를 설정하는 부분이다. 즉, 하나의
                    프로세스가 실행됐을 때 처음부터 끝까지 이 프로세스를 요청한 사용자에게 작
                    업을 할 수 있도록 하는 기능이다. 이것을 사용하는 이유는 성능저하 때문인데,
                    예를 들면 자식프로세서가 한 가지 일만 처리하고 죽는 것이 아니라 다음의 일
                    도 처리함으로써 성능 향상을 꾀한다. 활성값은 Off이다.
     -MaxKeepAliveRequests 100 : KeepAlive가 설정되어 있을 때, 지속적인 접속 기간 동안 처리할
                                수 있는 요청 갯수를 설정하는 부분이다. 클라이언트의 요청을 몇
                                번이나 처리하고 다시 처음 상태로 돌아가는지를 설정한다. 최대
                                요청갯수 0을 넣으면 무한대이다. 높은 성능을 내기 위해서는 높은
                                값을 써 넣는다.
     -KeepAliveTimeout 15 : keepAlive가 설정된 상태에서 클라이언트의 요청이 타임 아웃되는 시간
                           을 나타내며 초단위이다.
     -MinSpareServers 5
      MaxSpareServers 10
       : 클라이언트에서 요청이 있을 경우 아파치 웹서버는 현재 부하에 맞게 자동으로 대응한다.
        따라서, 이 값들을 처리할 수 있는 프로세스를 충분히 여유있게 유지할 수 있는 값이다. 아
        파치 서버는 주기적으로 몇 개의 서버가 요청 대기 상태인지를 점검한다. MinSpareServers
        보다 적으면 여유 서버 프로세스를 생성하며, MaxSpareServers보다 많다면 불필요한 프로세
        스를 제거한다.
     -StartServers 5 : 처음 서버를 시작할 때 시작하는 프로세스 수치이다.
     -MaxClients 150 : 웹서버에 접속할 수 있는 최대 클라이언트의 수치를 결정한다. 즉, 동시접
                      속자의 수를 제한하는 값이다. 주의점은 운영체제상에서 만들어 낼 수 있는
                      프로세스 개수가 150개인데 그 이상의 수치를 이곳에 적는다면 서버에 과부
                      하가 걸릴 수도 있으니 주의해야 하며, 서버상에서의 최대 프로세스의 개수
                      를 서버 성능에 맞게 조절해야 한다. 최신 버전인 경우에는 1024가 기본값
                      이다.
     -MaxRequestsPerChild 0 : 자식 프로세스가 죽기전에 처리할 수 있는 요청 개수이다. 한 프로세
                             스가 너무 오랫동안 사용되면 메모리, 자원 낭비가 될 수 있으므로
                             자식 프로세스는 자동으로 죽는다.


    ### Section 2: 'Main' server configuration
     -Port 80 : standalone서버 방식에서 기본으로 사용하는 포트를 나타낸다. 포트번호가 1023보다
               낮을 경우에는 httpd데몬을 루트권한으로 실행해야 한다.
     -User nobody
      Group nobody
       : nobody라는 사용자와 그룹을 가진 사용자들의 요청에 의해 웹서버가 실행되게 된다. httpd
        가 다른 사용자 또는 그룹 권한으로 실행하게 하려면 우선은 httpd가 root사용자 권한으로
        실행되고 나서 설정한 다음에 사용자권한으로 전환한다.
     -ServerAdmin
root@posein.com : 서버에 문제가 발생했을 경우 보낼 관리자의 이메일주소를 적
                                   는다.
     -ServerName posein.com : 서버의 도메인이름을 적는다. 만약 도메인이 없을 경우에는 IP를 적
                             는다. 실제 이름이 아닌 가상의 이름도 가능하다.
     -DocumentRoot "/usr/local/apache/htdocs": URL상의 서버 root문서가 위치하는 디렉토리를 적
                                              는다.

     - <Directory /usr/local/apache/htdocs>
           Options Indexes FollowSymLinks
           AllowOverride None
           Order allow,deny
           Allow from all
       </Directory>
        => 특정 디렉토리를 제어할 때 사용하는 지시자를 <Directory /> ... </Directory>의 형태로
          작성하며, 각각의 디렉토리에 관한 권한등의 여러 설정등을 한다.
          * Options
            NONE : 어떤 옵션도 이용할 수 없으므로 모든 접근을 거부
            ALL : MultiViews 옵션을 제외한 모든 옵션을 부여
            Indexes : URL에 지정된 디렉토리에(index.html 같은) 지정된 파일이 없을 경우 디렉토
                     리의 파일목록을 보여주는 옵션
            Includes : 서버측의 추가적인 정보를 제공(SSI:Server Side Includes)
            FollowSymLinks : 디렉토리의 심볼릭 링크 사용 가능
            ExecCGI : CGI 스크립트를 실행할 수 있도록 함
            IncludesNOEXEC : SSI는 허용하지만 #exec 명령과 CGI 스크립트 #include 불허
            MultiViews : All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용하는 것으로
                        유사한 파일이름을 찾아주는 기능을 실행한다. 예를 들면 index라고만 입력하
                        더라도 index.*를 찾아서 보여준다.
          * AllowOverride: 사용자 인증에 관련된 지시자로 클라이언트가 웹서버의 특정 디렉토리에
                          접근할 때 해당 디렉토리에 있는 유저 인증 파일인 .htaccess 파일을
                          읽게 되는데, 여기를 None으로 설정하면 아파치 서버는 이 파일을 무시
                          하게 된다.
           None : AllowOverride를 사용하지않는다. 즉 유저 인증파일을 사용하지 않는다.
           All : httpd.conf파일의 AccessFileName 지시자로 설정한 파일을 사용하며 또한 지시자를
                사용할 수 있다.
           AuthConfig : AccessFileName 지시자에 명시한 파일에 대해서 사용자 인증 지시자 사용을
                       허락한다. AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName,
                       AuthType, AuthUserFile, require등을 사용할 수 있다.
           FileInfo : AccessFileName 지시자로 설정한 파일에 대해서 문서 유형을 제어하는 지시자
                     사용을 허락한다. AddEncoding, AddLanguage, AddType, DefaultType, ErrorDo
                     cument, LanguagePriority등을 사용할 수 있다.
           Indexes : AccessFileName 지시자로 설정한 파일에 대해서 디렉토리 Indexing을 제어하는
                    지시자 사용을 허락한다. AddDescription, AddIcon, AddIconByEncoding, AddIco
                    nByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgno
                    re, IndexOptions, ReadmeName등을 사용할 수 있다.
           Limit : AccessFileName 지시자로 설정한 파일에 대해서 호스트 접근을 제어하는 지시자
                  사용을 허락한다. Allow, Deny, order 등을 사용할 수 있다.
           Options : AccessFileName 지시자에 명시한 파일에 대해서 Options 그리고 XBiHack 등과
                    같은 지시자 사용을 허락한다. Options, XBitHack등을 사용할 수 있다.
          * Order
            => Order명령은 해당 디렉토리에 대한 IP, DNS 필터링의 순서를 설정한다. Allow는 호스
              트 접근을 허락하며, Deny는 접근을 불허한다. Allow from all은 모든 호스트로부터의
              접근을 허락한다는 뜻이며, Deny from all은 모든 호스트로부터의 요청을 거부한다는
              뜻이다.
                예) Order deny, allow
                    Deny from all
                    Allow from 호스트명

     - #<Directory /home/*/public_html>

       #    AllowOverride FileInfo AuthConfig Limit
       #    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
       #    <Limit GET POST OPTIONS PROPFIND>
       #        Order allow,deny
       #        Allow from all
       #    </Limit>
       #    <LimitExcept GET POST OPTIONS PROPFIND>
       #        Order deny,allow
       #        Deny from all
       #    </LimitExcept>
       #</Directory>

         => 개인 홈페이지 디렉토리에 대한 접근 권한을 설정한다. <Limit> </Limit>로 각각의 접근
           을 제어할 수 있다.

     -<IfModule mod_userdir.c>
          UserDir public_html
      </IfModule>
       => 사용자의 개인 홈페이지의 문서가 위치하는 디렉토리명을 적는다. 기본값이 public_html
         이지만, 너무 길다고 생각되면 www나 web등으로 바꿔도 된다.

     -<IfModule mod_dir.c>
          DirectoryIndex index.html index.php
      </IfModule>

       => 디렉토리의 인덱스파일(처음열리는 파일)로 사용할 파일이름을 적는다. 기본 index.html에
         index.htm, index.php, index.php3 index.shtml등을 추가하도록 한다.

     - AccessFileName .htaccess
        => 각각의 디렉토리의 접근을 제어하는 정보를 가진 파일 이름을 지정하며 웹 클라이언트들
          이 .htaccess파일을 볼 수 없도록 설정한다. 여기에서 사용하는 .htaccess는 권한정보를
          가지고 있으므로 보안유지 차원에서 접근을 허용해서는 안된다. 즉, 파일을 제어하려는
          디렉토리에 넣어 사용한다.

     - <Files ~ "^\.ht">
           Order allow,deny
           Deny from all
           Satisfy All
       </Files>
         => 웹 클라이언트들에게 .htaccess파일을 볼 수 있는지 여부를 결정한다.

     - #CacheNegotiatedDocs
        => 아파치는 기본적으로 협상된 문서에 대해서는 "Pragma: no-cache" 내용을 보내는데 이 설
          정은 프록시 서버들이 문서를 캐시하지 못하게 요청한다. '#'를 제거하고 옵션을 실행하면
          모든 프록시가 문서를 캐시할 수 있게 한다.

     - UseCanonicalName On : 아파치가 자신의 URL 생성시 어떤 특정한 법칙에 따라 생성을 하도록
                            지정하는 지시자이다. On이면 서버이름과 포트를 이용한 명칭을 생성
                            하고, Off이면 클라이언트에게 제공하는 호스트이름과 포트를 생성하면
                            된다.

     - <IfModule mod_mime.c>
           TypesConfig /usr/local/apache/conf/mime.types
       </IfModule>
        => mine.types파일 또는 이에 해당하는 파일을 찾을 위치를 결정한다. MIME은 Multipurpose
          Internet Mail Extension의 약자로 클라이언트 브라우저에게 어떠한 유형의 자료를 전송
          할 것인지를 조절해 주는 기능이다.

     - DefaultType text/plain : 파일 확장자를 정의해 두는 것으로 MIME타입을 알 수 없는 문서에
                              대하여 사용할 기본 MIME타입을 설정한다. 기본값은 text/plain이며,
                              이 값으로 설정하면 Mime Type을 결정하지 못할때는 기본 텍스트문
                              서 결정한다. 주로 서버에 문서 파일이 많을 경우에 사용한다. 웹 브
                              라우저상에서 실행 프로그램이나 이미지 등 바이너리인 경우 웹브라
                              우저가 바이너리라고 해석하게 하기 위해서 "application/octet-str
                              eam" 과 같은 형식을 적어주어야 한다. 이것은 웹브라우저가 실행파
                              일 등을 텍스트문서로 착각하고 브라우저상에 표시하지 않게 하기
                              위함이다.

     - <IfModule mod_mime_magic.c>

           MIMEMagicFile /usr/local/apache/conf/magic
       </IfModule>
         => mod_mime_magic 모듈을 사용할 경우 해당 파일의 내용으로 파일 타입 힌트를 얻는 역할
           을 한다. MIMEMagicFile명령은 암시를 정의하는 모듈이 어디에 위치하고 있는지를 알려
           주는 것으로 이것을 사용하기 위해서는 해당 모듈을 탑재해야 한다.

     -HostnameLookups Off : 클라이언트에서의 접속 이름 또는 IP주소만을 기록할 지를 여부를 체크
                           한다. 예를 들면 posein.com은 On값이 되며, 192.168.0.1은 Off값이다.

     - ErrorLog /usr/local/apache/logs/error_log
       => 웹서버가 에러가 발생했을 경우 에러에 관한 기록파일을 설정한다. 참고로 <VirtualHost>
         지시자에서 ErrorLog 설정을 하지 않았다면 여기에서 언급한 설정을 따른다. 로그 파일의
         경우는 계속해서 사용량이 증가하므로 수시로 용량을 줄여야 한다.

     - LogLevel warn
        => 로그메시지의 크기를 제어하는 부분이다. 옵션에는 debug, info, notice, warn, error,
          crit, alert!, emerg 등이 있다.

     - 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
        => CustomLog 지시자에서 사용할 별명을 정의하는 곳으로 각각의 의미는 다음과 같다.
          %h : 호스트명
          %l : 리모트 로그이름
          %u : 사용자 인증에 사용된 유저명
          %t : 시간
          %r : 요청한 내용의 첫번째 줄
          %s : 서버상태
          $b : 전송량(헤더 포함) -바이트수
          %{헤더} : 요구된 헤더 내용
          %U : 요구한 URL

     - CustomLog /usr/local/apache/logs/access_log common
        => 클라이언트들이 웹서버에 접근한 정보를 기록해 주는 access_log 파일의 위치를 설정한
          다. <VirtualHost> 지시자에서 이 설정 부분이 없을 경우 여기서 설정한 위치로 모
          두 저장된다. 가상 호스트별로 따로 접근 로그파일을 만들고 싶으면 이 설정을 각각의
          <VirtualHost> 지시자 안에 넣으면 된다.

     - #CustomLog /usr/local/apache/logs/referer_log referer
       #CustomLog /usr/local/apache/logs/agent_log agent
         => 브라우저(agent)와 접속자(referer) 기록 파일을 갖고자 한다면 위 주석을 제거한다.

     - #CustomLog /usr/local/apache/logs/access_log combined
         => access, agent, referer 정보를 하나의 파일에 모두 저장하기를 원한다면 combined 옵션
           을 이용한다.

     - ServerSignature On
        => 아파치 서버가 생성하는 페이지(에러문서, FTP 디렉토리 list, mod_status, mod_info
          output, CGI 생성 문서 제외)에 서버 버전과 가상호스트 이름을 포함하는 행을 넣는 것을
          설정한다. 옵션에는 On | Off | Email 등이 있고 On으로 설정하면 서비스중인 가상호스트
          의 이름과 서버 버전을 포함한 라인을 보여주고, Email의 경우 ServerAdmin으로의 mailto:
          링크도 포함된다.

     - # EBCDICConvertByType  On=InOut text/* message/* multipart/*
       # EBCDICConvertByType  On=In    application/x-www-form-urlencoded
       # EBCDICConvertByType  On=InOut application/postscript model/vrml
       # EBCDICConvertByType Off=InOut */*
        => EBCDIC 코드 셋을 사용하는 메인프레임을 위한 설정이다. EBCDIC는 IBM이 대형운영체계
          에서 사용하기 위해 개발한 알파벳 및 숫자를 위한 바이너리 코드를 말한다. EBCDIC는
          IBM S/390 서버의 운영체계인 OS/390에서 사용되는 텍스트파일용 코드로서 많은 회사들이
          자기 회사의 오래된 응용프로그램과 데이터베이스를 위해 아직도 사용하고 있다. 그러나
          IBM PC나 위크스테이션용 운영체계에서는 텍스트 표현방법에 있어 자신들의 고유한 체계인
          EBCDIC 대신 산업계 표준인 ASCII를 사용한다. EBCDIC 파일내에서 각 알파벳이나 숫자는
          8비트의 이진수로 표현되므로 총 256개의 문자가 정의된다.

     - Alias /icons/ "/usr/local/apache/icons/"
        => 웹 문서 루트 디렉토리(DocumentRoot dir)외의 다른 디렉토리에서도 문서를 저장할 수
          있게 해 주는 별칭을 설정하는 부분으로 별칭의 설정은 Alias /별칭/ "path"하면 된다.
          디렉토리 설정은 앞에서 사용한 옵션을 사용하면 되고, 별칭은 하나 이상 여러 개를 만들
          어 사용 가능하기 때문에 필요한 만큼 만들어 사용하면 된다.

     - IndexOptions 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^^
         => IndexOptions에서 FancyIndexing으로 설정되어 있을 경우에 사용되며 각각의 파일 및
           확장자에 따른 아이콘의 모양을 정해준다.

     - DefaultIcon /icons/unknown.gif
         => 앞에서 설정되어 있지 않은 파일에 대하여 사용하는 아이콘이다.

     - #AddDescription "GZIP compressed document" .gz
       #AddDescription "tar archive" .tar
       #AddDescription "GZIP compressed tar archive" .tgz
         => 서버에서 만들어지는 인덱스에 있는 파일 뒤에 짧은 주석을 달 수 있도록 한다. 위의
           경우에는 확장자가 .gz이면 "GZIP compressed document"라는 설명을 보여주게 된다.

     - ReadmeName README
       HeaderName HEADER
        => 서버가 디렉토리 목록 뒤에 붙여넣을 README 파일의 이름을 설정하며, HeaderName은 디렉
          토리 인덱스 앞에 내용을 넣을 파일의 이름을 설정한다. 즉, 디렉토리 목록을 보여줄 때
         화면 아래부분에 간단한 설명이 들어갈 파일을 지정한다. 예를 들면, 서버는 처음 name.ht
         ml 파일을 찾고 존재하면 그 내용을 포함한다. 만약 파일이 존재하지 않는다면 name.txt를
         찾고 txt내용을 포함한다.

     - IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
        => 디렉토리를 인덱스할 때 파일을 보이지 않게 설정하는 부분이다.

     - AddEncoding x-compress Z
       AddEncoding x-gzip gz tgz
        => 일부 브라우저에서 전송을 받으면서 정보를 압축해제할수 있도록 허용할 때 사용하는 것
          으로 모든 브라우저에서 이 기능을 지원하지는 않는다.

     - AddLanguage da .dk
       AddLanguage nl .nl
       AddLanguage en .en
       AddLanguage et .ee
       AddLanguage fr .fr
       AddLanguage de .de
       AddLanguage el .el
       AddLanguage he .he
       AddCharset ISO-8859-8 .iso8859-8
       AddLanguage it .it
       AddLanguage ja .ja
       AddCharset ISO-2022-JP .jis
       AddLanguage kr .kr
       AddCharset ISO-2022-KR .iso-kr
       AddLanguage nn .nn
       AddLanguage no .no
       AddLanguage pl .po
       AddCharset ISO-8859-2 .iso-pl
       AddLanguage pt .pt
       AddLanguage pt-br .pt-br
       AddLanguage ltz .lu
       AddLanguage ca .ca
       AddLanguage es .es
       AddLanguage sv .sv
       AddLanguage cz .cz
       AddLanguage ru .ru
       AddLanguage zh-tw .tw
       AddLanguage tw .tw
       AddCharset Big5         .Big5    .big5
       AddCharset WINDOWS-1251 .cp-1251
       AddCharset CP866        .cp866
       AddCharset ISO-8859-5   .iso-ru
       AddCharset KOI8-R       .koi8-r
       AddCharset UCS-2        .ucs2
       AddCharset UCS-4        .ucs4
       AddCharset UTF-8        .utf8
         => 문서의 언어를 표시한다. 즉, 내용 협상 과정을 통해 브라우저가 이해하는 언어의 문서를
           제공할 수 있다. 폴란드어의 경우 펄과 구분하기 위해 pl .po로 포기한다.

     - <IfModule mod_negotiation.c>

           LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
       </IfModule>
         => 내용 협상 과정에서 같은 순위를 가질 때 어느 언어에게 우선권을 부여할 것인지를 설정
           한다. 설정은 내림차순으로 나열한다.

     - AddType : 추가적으로 지원될 파일들을 적는다.
       예) php4를 사용할 경우
         AddType application/x-httpd-php .php .htm .html .inc .php4 .php3
         AddType application/x-httpd-php-source .phps
          => 즉 mime.types의 수정없이 mime을 설정가능하게 해준다.

     - #AddHandler cgi-script .cgi
        => 특정 파일 확장자나 처리기에 연결하거나 특정 파일 타입에 특정 동작 연결을 설정하는
          부분이다. 즉, 어떤 파일 확장자를 파일 종류와 무관하게 작동할 수 있게 "Hander"에 결
          합되도록 설정해 주는 것이다.

     - # Format: Action media/type /cgi-script/location
       # Format: Action handler-name /cgi-script/location
        => 매칭되는 파일이 불려질 때마다 해당 미디어 타입에 맞는 스크립트를 실행할 수 있으며,
          이 설정은 자주 사용되는 CGI 파일 프로세서에 대해 반복적으로 URL을 사용하지 않아도
          된다.

     - #MetaDir .web
        => MetaDir은 아파치가 메타 정보 파일을 찾을 디렉토리 이름을 말하는 것으로 이 파일에는
          문서를 보낼 때 추가할 추가 HTTP 헤더 정보가 있으며, MetaSuffix는 메타정보를 가지고
          있는 파일의 접미어를 설정한다.

     - # Customizable error response (Apache style)
       #  these come in three flavors
       #
       #    1) plain text
       #ErrorDocument 500 "The server made a boo boo.
       #  n.b.  the single leading (") marks it as text, it does not get output
       #
       #    2) local redirects
       #ErrorDocument 404 /missing.html
       #  to redirect to local URL /missing.html
       #ErrorDocument 404 /cgi-bin/missing_handler.pl
       #  N.B.: You can redirect to a script or a document using server-side-includes.
       #
       #    3) external redirects
       #ErrorDocument 402 http://some.other-server.com/subscription_info.html
       #  N.B.: Many of the environment variables associated with the original
       #  request will *not* be available to such a script.
         => 존재하지 않는 페이지를 요청받을 경우 또는 해당 디렉토리의 퍼미션이 없을 경우 보여
           주는 에러 메시지설정이다. 관리자 임의로 다음 3가지 중 선택해서 출력해 줄 수 있다.
             1) plain text - 보통 텍스트 화면
             2) local redirects - 내부 URL로 방향 전환
             3) external redirects - 외부 URL로 방향 전환

     - BrowserMatch "Mozilla/2" nokeepalive
       BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
        => HTTP 응답 방식을 수정한다. 첫번째 지시자는 Netscape 2.x와 유사한 브라우저에 대해
          KeepAlive기능을 사용하지 못하게 하는 설정이다. 두번째 지시자는 HTTP/1.1을 잘못 구현
          301,302(redirect)응답에 대해 KeepAlive를 제대로 지원하지 못하는 MS Explorer 4.0b2를
          위한 설정이다.

     - BrowserMatch "RealPlayer 4\.0" force-response-1.0
       BrowserMatch "Java/1\.0" force-response-1.0
       BrowserMatch "JDK/1\.0" force-response-1.0
         => HTTP/1.1 응답도 제대로 처리하지 못해 HTTP/1.1 spec를 위반하는 브라우저에 대해
           HTTP/1.1응답을 하지 않게 하는 설정이다.

     - #<Location /server-status>
       #    SetHandler server-status
       #    Order deny,allow
       #    Deny from all
       #    Allow from .your-domain.com
       #</Location>
         => 서버 상태정보를 허용할 서버이름을 적어준다. 이 설정을 하면 웹브라우저를 이용하여
           http://localhost/server-status 라고 입력하면 웹서버의 상태를 파악할 수 있다.

     - #<Location /server-info>
       #    SetHandler server-info
       #    Order deny,allow
       #    Deny from all
       #    Allow from .your-domain.com
       #</Location>

         => 원격 서버의 환경 설정을 보고받을 수 있다. 주의할 점은 mod_info.c가 로드되어 있어야
           한다. http://localhost/server-info 라고 입력하면 서버의 환경 설정을 확인할 수 있다.

     - #<Location /cgi-bin/phf*>
       #    Deny from all
       #    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
       #</Location>
         => 전 1.1버전에 있던 버그를 악용하려는 사람이 있는데, #를 제거하면 버그를 이용한 공격
           이 있을 때 phf.apache.org상의 기록 스크립터로 방향 전환을 시키게 한다. 또 다른 방법
           은 직접 support/php_abuse_log.cgi스크립트를 이용해 사용자 스스로가 저장하는 것이다.

     - #<IfModule mod_proxy.c>
       #    ProxyRequests On
     
       #    <Directory proxy:*>
       #        Order deny,allow
       #        Deny from all
       #        Allow from .your-domain.com
       #    </Directory>

         => 프록시 서버 사용을 설정하는 부분으로 프록시 서버 모듈을 포함했을 경우 #를 제거하면
           프록시 서버사용이 가능하다.

     - #    ProxyVia On
        => HTTP/1.1 "Via:"헤더를 처리할 지 여부를 설정하는 부분이다. 옵션에는 Off | On | Full
          | Block 등이 있으며 Full은 서버 버전을 포함하며, Block은 나가는 모든 자료에 "Via"를
          제거한다.

     - #    CacheRoot "/usr/local/apache/proxy"
       #    CacheSize 5
       #    CacheGcInterval 4
       #    CacheMaxExpire 24
       #    CacheLastModifiedFactor 0.1
       #    CacheDefaultExpire 1
       #    NoCache a-domain.com another-domain.edu joes.garage-sale.com
        => 캐쉬 기능을 enable하기 위해서는 #을 제거한다.


    ### Section 3: Virtual Hosts : 가상 도메인을 설정하는 부분으로 웹호스팅할 경우에 설정한다.
     -NameVirtualHost : 한 서버에서 여러도메인을 사용할 경우 설정해야 한다.
     예) 192.168.1.125라는 IP하나를 가지고 서버를 구축하여 abc.co.kr이라는 도메인을 웹호스팅
        할 경우의 설정
        NameVirtualHost 192.168.1.125
        ------------------------------------
       <VirtualHost 192.168.1.125>
          ServerAdmin
admin@abc.co.kr
          DocumentRoot /home/abc/www
          ServerName www.abc.co.kr
          ServerAlias *.abc.co.kr                   // abc.co.kr앞에 붙는 모든 2차도메인을 모
                                                    //두 abc.co.kr이라는 홈페이지가 열리도록
                                                    //설정을 할 때 쓴다.
          ErrorLog logs/abc-error-log
          CustomLog logs/abc-access_log common
       </VirtualHost>

4. apache의 실행
(1) 데몬파일을 이용한 실행
  /usr/local/apache/bin/httpd stop 한 후에 /usr/local/apache/bin/httpd start한다.
   또는
  /usr/local/apache/bin/httpd restart
(2) 스크립트파일을 이용한 실행(권장)
  /usr/local/apache/bin/apachectl stop 한 후에 /usr/local/apache/bin/apachectl start한다.
   또는
  /usr/local/apache/bin/apachectl restart
(3) 부팅할 때마다 자동적으로 실행하도록 설정하기
  /etc/rc.d/rc.local파일에 /usr/local/apache/bin/apachectl start라고 추가한다.

5. httpd명령의 사용
(1) 사용법
   httpd [option] [command] [file_name]
(2) option
   -t : 환경파일인 httpd.conf의 파일설정을 점검한다.
   -f : 새로 설정한 conf파일이 있을 경우 그 설정파일로 아파치 데몬을 띄운다.
   -S : 현재 시스템에 설정되어 있는 가상 호스트를 보여준다.
   -l : 현재 컴파일된 모듈에 대한 목록을 보여준다.
(3) 사용예
   1) /usr/local/apache/bin/httpd -t  => 문법적으로 httpd.conf의 파일 설정을 점검한다.
      Syntax OK                       => 아무 이상이 없음을 나타낸다.
   2) /usr/local/apache/bin/httpd -f httpd_test.conf => httpd_test.conf파일의 설정대로 데몬을
                                                       띄운다.
(참고) apachectl 스크립트를 이용한 httpd.conf파일의 설정 점검
/usr/local/apache/bin/apachectl configtest


6. apache의 확인
(1) 데몬의 확인 : 아파치데몬이 떠 있는지 확인한다.
   [root@house apache]# ps -aux |grep httpd 또는 ps -aux |grep apache
    root      1515  0.0  1.2  3464 1652 ?        S    23:22   0:00 /usr/local/apache
    nobody    1516  0.0  1.6  3748 2064 ?        S    23:22   0:00 /usr/local/apache
    nobody    1517  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1518  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1519  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1520  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1523  0.0  1.3  3552 1740 ?        S    23:22   0:00 /usr/local/apache
     => 어떠한 명령을 가지고 실행했느냐에 따라 달라진다. 만약 정상적으로 작동한다면 아파치데몬
       의 리스트를 보여준다. 웹서비스 프로세스들은 초기에 구동된 httpd 데몬 1개만 root권한이고
       나머지는 nobody권한으로 데몬이 실행된다. 일반사용자들이 웹브라우저를 통해서 연결되는
       데몬은 nobody권한의 httpd이다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. Apache 2.0, PHP, MySQL 설치하기
(1) 설명 : Apache 2.0.x 버전, PHP, MySQL의 설치순서는 크게 신경쓰지 않아도 되지만 보통 데이터
           베이스가 기본이 되므로 MySQL를 설치하고, Apache를 설치한 뒤에 마지막으로 PHP를 설치
           하면 된다.
(2) 설치하기
   1) Apache ,PHP, MySQL 소스파일(source파일: tar.gz로 된 파일)을 다운받아 /usr/local/src에
     위치시킨다.
      예) Apache => www.apache.org
          MySQL  => www.mysql.com
          PHP    => www.php.net

   2) 다운받은 파일들의 압축을 푼다.
    예) tar zxvf mysql-3.23.57.tar.gz
        tar zxvf httpd-2.0.47.tar.gz
        tar zxvf php-4.3.2.tar.gz
   3) 기존의 인스톨된 apache제거하기 : rpm패키지로 설치되어 있는 아파치 웹서버 프로그램을 삭
                                      제한다. 꼭 삭제할 필요는 없지만, 공간도 차지하고 새롭게
                                      설치할 아파치와 충돌될 수도 있다.
    ㄱ. 아파치 데몬을 정지시킴 : /etc/rc.d/init.d/httpd stop
         => 아파치 데몬이 작동하지 않을 수도 있다.
    ㄴ. 인스톨된 아파치를 찾는다. : rpm -qi apache 또는 rpm -qi httpd
         => 아파치 1.3 버전은 apache라는 이름으로 설치되지만, 2.0버전은 httpd라는 이름으로
           설치되므로 두 가지 모두 검색해서 나오는 것을 삭제한다.
    ㄷ. 찾아진 아파치를 제거한다.
       예) rpm -e httpd --nodeps
   4) PHP 및 MySQL도 찾아서 존재하면 삭제한다.
    ㄱ. 검색
       rpm -qi php
       rpm -qi mysql
    ㄴ. 삭제
       rpm -e php --nodeps
       rpm -e mysql --nodeps
   5) MySQL 설치하기
    ㄱ. mysql 소스파일의 압축을 푼 디렉토리로 이동한다.
       예) cd /usr/local/src/mysql-3.23.57
    ㄴ. ./configure --prefix=/usr/local/mysql --with-charset=euc_kr
          => --prefix는 인스톨한 기본 디렉토리를 지정하는 옵션이다. --with-charset=euc_kr은
            한글을 지원한다는 뜻이다. 이 옵션을 지정하지 않아도 큰 상관은 없지만 정확한 한글
           정렬을 위해 필요하다.
            (참고) 기타 많이 쓰는 옵션으로 locatstatedir= 있는데 이것은 DB데이터를 저장할
                 디렉토리를 지정하는 옵션이다.
                    예) localstatedir=/usr/local/mysql/data
    ㄷ. make
        => 소스이기 때문에 컴파일과정이 필요하다.
    ㄹ. make install
        => 컴파일한 것을 실행시켜 설치한다.
    ㅁ. 참고: MySQL의 테스트
       1. MySQL의 기본 데이터베이스생성하기 : 처음 설치시 한번 꼭 실행한다. 이 작업은 MySQL
                                             기본 데이터베이스인 mysql과 testdb를 설치해준다.
         예) /usr/local/mysql/bin/mysql_install_db
       2. MySQL데몬을 띄운다. : 설치된 디렉토리로 이동하여 데몬을 띄운다.
         예) /usr/local/mysql/bin/safe_mysqld --user=root &
       3. 실행
         예) /usr/locasl/mysql/bin/mysql -uroot mysql
       4. 성공으로 실행됐을 경우 : 다음과 같이 mysql> 이라는 프롬프트가 나타나면 정상적으로
                                  설치된 것이다. quit명령을 내려 데이터베이스에서 빠져나온다.
         예) mysql> quit
             bye
   6) apache 설치하기
    ㄱ. apache압축을 푼 디렉토리로 이동한다.
       예) cd /usr/local/src/httpd-2.0.47
    ㄴ. ./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-module=so
          => --prefix는 아파치가 설치될 디렉토리를 지정하는 것이고, --enable-mods-shared=most
            와 --enable-module=so는 DSO방식으로 PHP 모듈이 사용될 수 있도록 지정하는 옵션이다.
    ㄷ. make
    ㄹ. make install
   7) php설치
     ㄱ. php압축을 푼 디렉토리로 이동한다.
        예) /usr/local/src/php-4.3.2
     ㄴ. ./configure --with-apxs2=/usr/local/apache/bin/apxs  --with-mysql=/usr/local/mysql   
        --with-config-file-path=/usr/local/apache/conf --with-exec-dir=/usr/local/apache/bin
        --enable-track-vars --enable-trans-sid
          => (설명)
            --with-apxs2 는 PHP가 아파치데몬에 DSO 모듈로 로딩되도록 하기 위해서 apxs파일의
           위치를 지정하는 것이고 --with-mysql은 MySQL과 연동하기 위해 MySQL이 설치되어 있는
           디렉토리를 가리키는 것이다. --with-config-file-path는 php.ini파일의 경로를 지정하는
           옵션이고, --with-exec-dir은 아파치데몬의 실행경로는 지정한다. --enable-track-vars는
           HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS 배열에 있는 GET/POST/COOKIE변수들이
           어디서 왔는지 기억하고 있게 만들고 --enable-trans-sid는 보안과 관련된 옵션이다.
    ㄷ. make
    ㄹ. make install
    ㅁ. cp php.ini-dist /usr/local/apache/conf/php.ini
         => 소스디렉토리에 있는 php.ini를 /usr/local/apache/conf디렉토리에 php.ini로 복사한다.
   8) httpd.conf설정(/usr/local/apache/conf/httpd.conf의 환경파일을 설정)
    ㄱ. ServerName의 항목을 찾아 입력: 도메인이름 또는 IP주소를 입력한다.
    ㄴ. DSO support항목에서 아래 모듈부분이 활성화되어있는지 확인한다.
       LoadModule php4_module        modules/libphp4.so
    ㄷ. php관련환경설정 : AddType이라는 항목이 모여있는 곳으로 이동한 뒤 아래와 같이 추가한다.
       예)
           AddType application/x-httpd-php .php .htm .html .inc .php4 .php3
           AddType application/x-httpd-php-source .phps
   9) 아파치 데몬을 재가동한다.
    예) /usr/local/apache/bin/apachectl restart


2. Apache 2.0, PHP, MySQL 연동 확인
(1) 아파치 테스트하기
   1) 설명: 위와 같이 소스로 컴파일하면 아파치 설치디렉토리가 /usr/local/apache가 된다. 웹문서
           를 올려서 아파치 웹서버가 동작하는지 확인한다. 웹문서디렉토리는 /usr/local/apache/
           htdocs 이다.
   2) 방법
    ㄱ. /usr/local/apache/htdocs 디렉토리에 작성한 웹문서(index.html)를 올린다.
    ㄴ. 아파치데몬의 작동유무를 확인한다. 아래와 같이 재가동해도 된다.
       예) /usr/local/apache/bin/apachectl restart
    ㄷ. 웹브라우저를 띄우고 확인한다.
       예) http://localhost (리눅스의 X-window에서 로컬로 확인할 경우)
           http://192.168.0.1 (IP주소로 세팅한 경우)
           http://linux.co.kr (도메인으로 세팅한 경우)
(2)아파치와 PHP가 제대로 연동되는지 테스트해보기
   1) 설명: test.php라는 간단한 php문서를 phpinfo()라는 PHP정보를 보여주는 함수를 이용해서
           작성한 뒤에 웹상에서 불어오도록 한다.
   2) 방법
    ㄱ. 아래와 같이 test.php 를 만든다.
      <?
      phpinfo();
      ?>
    ㄴ. 위 파일을 /usr/local/apache/htdocs 디렉토리에 위치시킨다.
    ㄷ. 웹상에서 불러본다.
       예) http://localhost/test.php
           http://192.168.0.1/test.php
           http://linux.co.kr/test.php
   3) 결과
    ㄱ. 설명: php관련정보가 뜬다면 제대로 세팅된 것이다. 만약 정보가 제대로 보이지 않고  소스
             즉 위의 내용이 그대로 웹페이지에 보인다면 다음과 같이 해본다.
    ㄴ. 오류해결
      a. 재부팅하거나 'depmod -a' 명령을 내린다.
         => 관련 새로 설치된 PHP관련 모듈이 라이브러리로 올라가지 않아서 그럴수도 있으니 재부
           팅하면 리눅스서버에서 관련 모듈들을 다시 읽어들이므로 PHP가 정상적으로 작동한다.
      b. 재부팅해서 안되면 아파치와 PHP 설치시 환경설정 오류일 수 있으니 아파치와 PHP를  다시
        컴파일한다. 기존의 압축파일을 지우고 tar파일을 다시 풀고 설치해도 되고, 아니면
        make clean명령으로 지정한 설정을 초기화한뒤 다시 configure 부터 해도 된다.
(3) PHP 설치후에 Form태그와의 연동에 대하여
   1) 설명: PHP 4.2.x 버전부터 php.ini의 항목중에 register_globals라는 값이 Off되어 있다. 보안
           상 이 값이 Off가 되어 있다. (설치시에 컴파일을 다 끝내면 화면에 메시지로 찍힌다.)
           만약 이 값을 On하지 않고 Form태그를 이용해서 MySQL에 데이터를 입력하면 값이 무조건
           공백으로 들어간다. 이 값을 On 해야 된다.
   2) 방법
    1) vi /usr/local/apache/conf/php.ini 로 파일은 연다.
    2) register_globals=On 으로 바꾼다.
    3) 아파치를 재시작한다. ( PHP는 환경설정이 바뀌면 아파치에 모듈화에서 설치되어 있으므로
      아파치만 재시작하면 자동으로 관련설정이 바뀐다.)
      예) /usr/local/apache/bin/apachectl restart

1. APM에 대하여
(1) 개요
  리눅스를 서버로 사용하는 대부분의 이유는 웹서버를 구축하기 위해서이다. 웹서버는 아파치라는
프로그램을 설치하면 된다. 단순히 웹문서인 html문서만을 보여준다면 그냥 사용해도 되지만, 서버
에서 게시판이나 회원가입같은 처리를 한다면 아파치만으로는 부족하다. 그래서, 리눅스에서는 PHP
라는 웹 프로그래밍언어와 MySQL이라는 데이터베이스와 연계해서 많이 사용한다. 데이터베이스인
MySQL은 보통 먼저 설치후에 아파치가 참조하는 형태로 설치가 되기 때문에 크게 고려하지 않아도
된다. 그러나, 아파치와 PHP는 거의 하나처럼 작동하기 때문에 두 프로그램의 설치시에 고려를 해야
한다.
(2) 아파치와 PHP
  웹서버 프로그램인 아파치는 HTML문서를 보여주는 역할을 한다. PHP는 C언어같은 특별한 언어적 구
조를 가지고 있다. PHP로 작성한 문서가 HTML처럼 해석되려면 아파치에서 해석이 되도록 설치해야
한다. 아파치와 PHP가 작동하는 방식은 아파치서버에 PHP가 묻어서 작동하는 방식이다. 즉, 아파치
서버에 PHP문서를 해석할 수 있는 해석기를 장착한다고 볼 수 있다. 이렇게 장착되는 것을 모듈(Mod
ule)이라고 부르는데, 아파치에 PHP를 모듈로 장착하는 방법에는 크게 두가지 방법이 있다. 하나는
정적 모듈로 장착하는 것이고 하나는 동적 모듈로 장착하는 것이다. 아파치에 정적모듈로 PHP를 장
착하면 PHP가 아파치에 완전히 고정되므로 처리속도가 빠르다. 사용자가 많고 PHP가 많이 사용되면
정적모듈로 장착하는 것이 좋다. 단점으로는 아파치나 PHP 업데이트시에 두 가지 프로그램을 다시
설치해야 한다. 동적모듈은 흔히 DSO(Dynamic Shared Object)라 하는데, 이러한 동적모듈의 장점은
모듈이나 라이브러리를 언제든지 적재할 수 있고, 필요없을 때는 사용하지 않을 수도 있어 자원의
효율성면에서는 우수하다. 그러나, 동적모듈은 정적모듈방식에 비해 속도가 떨어진다. 참고로 현재
아파치버전에는 1.3버전 계열과 2.0버전이 있다. 1.3버전은 PHP를 정적모듈로 컴파일이 지원되지만
2.0버전은 정적모듈 방식으로 컴파일되지 않고 오직 동적모듈방식인 DSO방식으로만 컴파일된다.
만약 PHP 문서가 많다면 아파치 1.3 으로 컴파일해서 사용하는 것도 좋다.


2. Apache, PHP, MySQL 설치하기
(1) 설명 : Apache 1.3 버전, PHP, MySQL의 설치순서는 가장 기본이 되는 데이터베이스 MySQL를
           가장 먼저 설치하고, PHP, Apache 순서로 설치한다. 리눅스를 설치시에 전체설치하면
           기본적으로 Apache, PHP, MySQL이 설치되지만, 대부분 최신의 버전과는 약간 거리가
           있다. 서버구축시에는 가장 최신 버전을 다운받아 설치하는 것이 좋다. 여기서는 PHP를
           정적모듈형태로 설치 하도록 한다.
(2) 설치하기
   1) Apache, PHP, MySQL 소스파일(source파일: tar.gz로 된 파일)을 다운받아 /usr/local/src에
     위치시킨다.
      예) Apache => www.apache.org
          MySQL  => www.mysql.com
          PHP    => www.php.net

   2) 다운받은 파일들의 압축을 푼다.
    예) tar zxvf mysql-3.23.57.tar.gz
        tar zxvf apache_1.3.28.tar.gz
        tar zxvf php-4.3.2.tar.gz
   3) 기존의 인스톨된 apache제거하기 : rpm패키지로 설치되어 있는 아파치 웹서버 프로그램을 삭
                                      제한다. 꼭 삭제할 필요는 없지만, 공간도 차지하고 새롭게
                                      설치할 아파치와 충돌될 수도 있다.
    ㄱ. 아파치 데몬을 정지시킴 : /etc/rc.d/init.d/httpd stop
         => 아파치 데몬이 작동하지 않을 수도 있다.
    ㄴ. 인스톨된 아파치를 찾는다. : rpm -qi apache 또는 rpm -qi httpd
         => 아파치 1.3 버전은 apache라는 이름으로 설치되지만, 2.0버전은 httpd라는 이름으로
           설치되므로 두 가지 모두 검색해서 나오는 것을 삭제한다.
    ㄷ. 찾아진 아파치를 제거한다.
       예) rpm -e httpd --nodeps
   4) PHP 및 MySQL도 찾아서 존재하면 삭제한다.
    ㄱ. 검색
       rpm -qi php
       rpm -qi mysql
    ㄴ. 삭제
       rpm -e php --nodeps
       rpm -e mysql --nodeps
   5) MySQL 설치하기
    ㄱ. mysql 소스파일의 압축을 푼 디렉토리로 이동한다.
       예) cd /usr/local/src/mysql-3.23.57
    ㄴ. ./configure --prefix=/usr/local/mysql --with-charset=euc_kr
          => --prefix는 인스톨한 기본 디렉토리를 지정하는 옵션이다. --with-charset=euc_kr은
            한글을 지원한다는 뜻이다. 이 옵션을 지정하지 않아도 큰 상관은 없지만 정확한 한글
           정렬을 위해 필요하다.
            (참고) 기타 많이 쓰는 옵션으로 locatstatedir= 있는데 이것은 DB데이터를 저장할
                 디렉토리를 지정하는 옵션이다.
                    예) localstatedir=/usr/local/mysql/data
    ㄷ. make
         => 소스이기 때문에 컴파일과정이 필요하다.
    ㄹ. make install
         => 컴파일한 것을 실행시켜 설치한다.
    ㅁ. 참고: MySQL의 테스트
       1. MySQL의 기본 데이터베이스생성하기 : 처음 설치시 한번 꼭 실행한다. 이 작업은 MySQL
                                             기본 데이터베이스인 mysql과 testdb를 설치해준다.
         예) /usr/local/mysql/bin/mysql_install_db
       2. MySQL데몬을 띄운다. : 설치된 디렉토리로 이동하여 데몬을 띄운다.
         예) /usr/local/mysql/bin/safe_mysqld --user=root &
       3. 실행
         예) /usr/locasl/mysql/bin/mysql -uroot mysql
       4. 성공으로 실행됐을 경우 : 다음과 같이 mysql> 이라는 프롬프트가 나타나면 정상적으로
                                  설치된 것이다. quit명령을 내려 데이터베이스에서 빠져나온다.
         예) mysql> quit
             bye
   6) apache환경설정: 이 작업은 설치하는 것이 아니라 PHP의 설치를 위해 아파치가 설치될 디렉토
                     리만 configure한다.
    ㄱ. apache압축을 푼 디렉토리로 이동한다.
    ㄴ. ./configure --prefix=/usr/local/apache (아파치가 설치될 디렉토리 지정)
   7) php설치
     ㄱ. php압축을 푼 디렉토리로 이동한다.
     ㄴ. ./configure --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.28 --enable-tra
        ck-vars
          => --with-mysql은 MySQL과 연동하기 위해 MySQL이 설치되어 있는 디렉토리를 가리키는 것
            이고, --with-apache는 아파치에 static object로 인스톨한다는 것이다. 경로는 아파치
            소스가 풀려있는 곳을 가리켜야 한다. --enable-track-vars는 HTTP_GET_VARS,
            HTTP_POST_VARS, HTTP_COOKIE_VARS 배열에 있는 GET/POST/COOKIE변수들이 어디서 왔는지
            기억하고 있게 만든다. 이 옵션은 단지 Default값을 정하는 것 뿐이다.
    ㄷ. make
    ㄹ. make install
    ㅁ. cp php.ini-dist /usr/local/lib/php.ini
        => PHP의 환경설정파일인 php.ini를 라이브러리 디렉토리에 등록시킨다.

   8) apache설치
    ㄱ. apache압축을 푼 디렉토리로 이동한다.
    ㄴ. ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a
           => php를 아파치모듈로 인식하기 위해 환경 설정을 한다.
    ㄷ. make
    ㄹ. make install
   9) httpd.conf설정(/usr/local/apache/conf/httpd.conf의 환경파일을 설정)
    ㄱ. ServerName의 항목을 찾아 입력: Domain Name 또는 IP주소를 적는다.
    ㄴ. php관련환경설정 : AddType이라는 항목이 모여있는 곳으로 이동한 뒤 아래와 같이 추가한다.
       예)
           AddType application/x-httpd-php .php .htm .html .inc .php4 .php3
           AddType application/x-httpd-php-source .phps
 
1. 개요

웹서버를 운영하기 위해서는 아파치 서버가 작동을 해야한다. 배포판 리눅스를 인스톨하면 자동으
로 아파치 웹서버프로그램이 같이 인스톨되므로 기존에 인스톨된 아파치를 가지고 간단히 웹서버를
구축해 보도록 한다.

2. 웹서버 프로그램 아파치(Apache) 정보 확인하기
(1) 설명: 리눅스에서 웹서버를 운영하기 위해 사용하는 프로그램이 아파치이다. 현재 설치되어
          있는 아파치 프로그램의 정보를 확인하고 관련파일의 파악이 중요하다. 현재 레드햇 8.0
          에는 아파치 2.0 버전이 설치되어 있다. 예전에 레드햇 7.x계열에서는 apache라는 이름으
          로 설치되었지만 현재는 데몬의 이름인 httpd라는 이름으로 설치되어 있다.
(2) 확인
   1) 간단한 정보확인하기
     [root@www root]# rpm -qi httpd
     Name        : httpd                        Relocations: (not relocateable)
     Version     : 2.0.40                            Vendor: Red Hat, Inc.
     Release     : 8                             Build Date: 2002년 09월 05일 (목) 오전 06시 23분 25초
     Install date: 2003년 01월 24일 (금) 오전 12시 22분 18초      Build Host: daffy.perf.redhat.com
     Group       : 시스템 환경/ 데몬들           Source RPM: httpd-2.0.40-8.src.rpm
     Size        : 2702244                          License: Apache Software License
     Signature   : DSA/SHA1, 2002년 09월 05일 (목) 오전 07시 51분 41초, Key ID 219180cddb42a60e
     Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
     URL         : http://httpd.apache.org/
     Summary     : Apache HTTP 서버
     Description :
     Apache는 강력하고, 완전한 기능을 갖춘, 효율적이며 자유롭게
     사용이 가능한 웹 서버입니다. Apache는 인터넷 상에서 가장 인기있는
     웹 서버입니다.
   2) 설치된 파일의 목록확인하기
    ㄱ. [root@www root]# rpm -ql httpd
          => 설치된 httpd 패키지의 전체 파일 목록을 보여준다.
    ㄴ. [root@www root]# rpm -qc httpd
          => 설치된 httpd 패키지의 환경설정파일이나 실행스크립트를 보여준다.

3. 설정하기
(1) 설명: 간단히 웹서버를 구축하려면 웹서버 프로그램인 아파치의 주 환경설정파일인 httpd.conf
          파일을 설정해야 하며, 또한 웹문서(html문서)가 위치할 디렉토리의 경로를 알아야 한다.
(2) 관련파일 및 디렉토리
   1) /etc/rc.d/init.d/httpd : 아파치데몬을 실행시키는 스크립트이다.
   2) /etc/httpd/conf/httpd.conf : 아파치 주 환경 설정파일이다.
   3) /var/www/html : html문서가 위치하는 디렉토리이다.
(3) httpd.conf 설정하기
   1) 설명: /etc/httpd/conf디렉토리에 있는 httpd.conf파일을 현재 설정에 맞게 설정해야 한다.
           vi 편집기로 해당파일을 오픈한 뒤에 명령모드에서 '/항목이름'으로 찾아 변경하도록
           한다.
   2) 주요항목 설정
    ㄱ. ServerName
      a. 설명: 서버의 도메인이름을 적는 부분이다. 현재 주석처리가 되어 있으며 주석처리(#)를
              없애고 도메인을 적는다. 도메인이 없으면 IP주소를 적는다.
      b. 설정예
        ServerName 203.xxx.xxx.xxx
    ㄴ. DocumentRoot
      a. 설명: 웹문서인 html문서가 위치하는 경로를 나타낸다.
      b. 설정예
        DocumentRoot "/var/www/html"
          => 현재 웹문서가 위치하는 디렉토리는 /var/www/html이다.
    ㄷ. UserDir
      a. 설명: 개인 사용자의 홈페이지 영역을 나타낸다. 개인 홈디렉토리에서 이 지시자가 가리키
              는 디렉토리를 생성하고 웹문서를 올리면 된다. 기본 주석처리가 되어 있으니 주석을
              제거하고 설정하도록 한다.
      b. 설정예
        UserDir public_html
          => 현재 개인 사용자의 홈디렉토리는 public_html이다.
    ㄹ. DirectoryIndex
      a. 설명: 여러 웹문서중에 기본으로 인식하는 웹문서를 지정한다.
      b. 설정예
        DirectoryIndex index.html
          => /var/www/html에서 index.html을 기본 웹문서로 인식한다.

4. 웹서버로 사용하기

(1) 웹서버 구축하기
   1) vi편집기로 /etc/httpd/conf/httpd.conf 파일을 연다.
   2) /ServerName이라고 입력하여 항목을 찾는다.
   3) 주석처리(#)없애고 도메인을 적고 도메인이 없으면 IP주소를 그대로 적는다.
   4) 저장하고 빠져나온다.
   5) /var/www/html에 웹문서를 올린다. 이 곳에 올릴 기본 문서는 index.html이어야 한다.
   6) httpd 데몬을 아래의 방법중 하나로 재가동한다.
     ㄱ. service httpd restart
     ㄴ. /etc/rc.d/init.d/httpd restart
(2) 개인 사용자의 홈페이지영역 설정하기
   1) 개인사용자의 홈페이지는 홈디렉토리 아래에 public_html이라는 디렉토리를 만들어야 한다.
     예) mkdir public_html
   2) 이 디렉토리에 index.html이라는 문서를 메인페이지로 해서 넣는다.
   3) 접근권한을 설정한다. 기본값으로 개인 홈디렉토리의 접근권한은 다른사용자에게 막혀있다.
     따라서 chmod명령을 이용하여 다른 사용자의 접근권한을 부여한다. 디렉토리인 관계로 rx권한을
     부여해야 한다.
     예) chmod go+rx ID, chmod a+rx ~ 또는 chmod 755 ~
   4) 개인 홈페이지의 주소는 아래와 같다.
     http://호스트명 또는 ip/~사용자ID
(3) 참고: 사용자의 홈디렉토리 변경하기
    리눅스에서 개인 홈페이지의 영역설정을 위한 기본 디렉토리가 public_html이다. 이 디렉토리를
   보다 짧은 이름의 디렉토리로 환경을 바꿀수 있다. 역시 환경설정관련 파일은 /etc/httpd/conf/ht
   tpd.conf이다. 여기서 바꿔야 할 항목은 UserDir 이다. vi를 사용하여 편집하거나 검색할 때 대소
   문자 꼭 지켜야 한다. vi 명령모드에서 '/public_html' 이라고 찾으뒤 한 두번쯤 n키를 해당줄이
   나타난다. 이 항목의 값을 간단하게 www이라고 하자. 그럼 'UserDir public_html'을 'UserDir
   www'이라고 변경하면 된다. 변경후 꼭 httpd를 재가동해야 한다.

5. 웹서버관련 기타중요파일
(1) /etc/rc.d/init.d/httpd
   아파치 데몬을 제어(시작,중지,재시작)할 수 있는 스크립트 파일이다.
(2) /usr/bin/htpasswd
   특정 디렉토리를 제어할 때 사용하는 사용자패스워드 입력프로그램이다.
(3) /usr/sbin/httpd
   아파치 데몬이다.
(4) /etc/httpd/logs
   아파치 웹 서버에 접근 또는 에러난 부분에 대해서 기록하는 디렉토리이다. 아파치웹서버를 관리
  와 관계가 있다.
(5) /usr/sbin/apxs
   DSO(Dynamic Shared Object)기반 아파치 모듈을 컴파일할 때 사용되는 유틸리티이다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. RAID란?
RAID(Redundant Array of Independent[또는 inexpensive] Disks)는 여러 대의 하드디스크가 있을 때
동일한 데이터를 다른 위치에 중복해서 저장하는 방법이다. 데이터를 여러 대의 디스크에 저장하여
입출력 작업이 균형을 이루게 되어 전체적인 성능을 향상시킨다. 운영체제에서 하나의 RAID는 논리적
으로 하나의 디스크로 인식하여 처리된다. 현재 RAID는 데이터를 기록하는 방식과 에러를 체크하는
패리티(Parity)를 사용 등 구성방법에 따라 다양한 형태로 존재한다.

2. RAID의 이용
초기의 RAID는 저용량 하드디스크를 하나의 디스크로 확장하여 사용하는 것이 주류였으나 현재는 백
업을 가능하게 하고 안정적인 데이터의 보존과 유지기능도 한다. 또한 구성방법도 소프트웨어적 구현
과 하드웨어적 구현 등 다양한 방법으로 가능하다. 소프트웨어 RAID는 비용적인 측면에서 유리하나
보다 나은 성능을 위해서는 하드웨어 RAID가 좋다. 하드웨어 수준의 RAID에서 주목할 만한 기능은
전원이 켜있는 상태에서 하드드라이브를 교체할 수 있는 핫스왑(Hot Swap) 베이(Bay)가 있다.

3. RAID에서 사용하는 기술
(1) 스트라이핑(Striping): 스트라이핑기술은 연속된 데이터를 여러 개의 디스크에 라운드로빈방식
                          으로 기록하는 기술이다 .이 기술은 프로세서가 하나의 디스크에서 읽어
                          들이는 것보다 더 빠르게 데이터를 읽거나 쓸 수 있다면 매우 유용하다.
                          즉, 서로 겹쳐서 읽거나 쓸 수 있도록 설계된 네 개의 드라이브가 있을
                          경우, 보통 하나의 섹터를 읽을 수 있는 시간에 네 개의 섹터를 동시에
                          읽을 수 있다.
(2) 미러링(mirroring): 디스크에 에러가 발생할 경우를 대비하여 데이터의 손실을 막기위해, 데이
                       터를 하나 이상의 장치에 중복 저장하는 기술이다. 이 기법은 하드웨어 또는
                       소프트웨어 두가지 방법, 모두 구현될 수 있다.

4. RAID의 종류
(1) RAID-0
   1) 설명: 스트라이핑기술을 사용하여 빠른 입출력 속도를 제공한다. 데이터를 패리티없이 디스크
           에 분산하여 기록한다. 처리속도는 빠르나 데이터복구 능력이 없다.
   2) 그림
     

(2) RAID-1
   1) 설명: 미러링기술을 사용하여 두 개의 디스크에 데이터를 동일하게 기록한다. 스트라이프는
           사용하지 않으며, 각 드라이브를 동시에 읽을 수 있어 읽기 성능은 향상되나 쓰기 성능은
           단일 디스크 드라이브와 같다. 데이터 복구 능력이 탁월하다.
   2) 그림
     

(3) RAID-2
   1) 설명: 디스크들간의 스트라이프를 사용하며, 몇몇 디스크들은 에러를 감지하고 수정하는 ECC
           정보를 가지고 있다.
   2) 그림
     

(4) RAID-3
   1) 설명: 스트라이프를 사용하며 패리티정보를 저장하기 위해 별도로 하나의 드라이브를 사용한
           다. 입출력작업이 동시에 모든 드라이브에 대해 이루어지므로 입출력을 겹치게 할 수
           없다. 대형 레코드가 많은 곳에 적합하다.
   2) 그림
     

(5) RAID-4
   1) 설명: 블록형태의 스트라이프를 사용하며, 이는 어떤 단일 드라이브로부터 레코드를 읽을 수
           있다. 데이터를 읽을 때 중첩 입출력의 장점을 취할 수 있다. 쓰기시에는 패리티를 연산
           해야 하고, 패리티 디스크에 저장해야 하기 때문에 입출력의 중첩이 불가능하고 시스템에
           서 병목현상이 일어날 수 있다.
   2) 그림
     

(6) RAID-5
   1) 설명: 별도의 패리티 디스크 없이 회전식 패리티 어레이 분산하여 기록하지만 데이터를 중복
           저장하지는 않는 방법으로 일반적으로 많이 사용된다. 디스크에 쓰기 제한 주소를 지정
           하므로 모든 읽기/쓰기가 중첩될 수 있다. 작고 랜덤한 입출력이 많은 경우 더 나은 성능
           을 제공한다. 드라이브의 개수는 최소 3개로 구성하면 보통 5개 이상의 드라이브를 사용
           한다.
   2) 그림
     

(7) RAID-6
   1) 설명: 전체적인 구성은 RAID-5와 비슷하지만 드라이브들 간에 분포되어 있는 2차 패리티구성을
           포함함으로써 매우 높은 고장대비 능력을 제공한다.
   2) 그림
     

(8) RAID-7
   1) 설명: 하드웨어 컨트롤러에 내장되어 있는 운영체제를 사용하여 속도가 빠른 버스를 통한 캐시,
           독자적인 컴퓨터의 여러가지 특성을 포함하고 있다. 현재 하나의 업체만 이 시스템을
           제공한다.
   2) 그림
     

(9) RAID 0+1
   1) 설명: RAID-0의 스트라이핑기술과 미러링기술을 동시에 구현한 방법이다.
   2) 그림
     

(10) RAID-10
   1) 설명: RAID-1의 미러링에 스트라이프 어레이를 별도로 제공한다.
   2) 그림
     

(11) RAID-53
   1) 설명: RAID-3 방식에 별도의 스트라이프 어레이를 제공한다.
   2) 그림
    


5. 리눅스에서 RAID 구현하기
(1) 리눅스에서 지원하는 Software RAID 레벨
   1) RAID-Linear: 간단히 여러개의 파티션을 하나로 묶는 역할을 한다. 성능의 개선이나 안정성은
                  제공되지 않는다.
   2) RAID-0: RAID-Linear와 비슷하나 스트라이핑기술을 이용하여 처리속도가 빨라지는 속도향상이
             있다. 그러나, 디스크의 오류에 대한 안정성은 제공되지 않는다.
   3) RAID-1: 미러링기술을 이용하여 두 개 또는 그 이상의 디스크를 정확하게 복사본을 만들어
             유지시킨다. 오류가 발생하면 복사해둔 이미지로 데이터를 복구하게 된다.
   4) RAID-3: 패리티정보를 모아 별도의 디스크에 저장한다. 이 패리티정보를 이용하여 오류가 발생
             한 디스크의 데이터를 복구한다. 안정성은 있으나 디스크의 성능이 다소 감소한다.
   5) RAID-5: RAID-3과 비슷하게 패리티정보를 이용하나 디스크에 저장하지는 않는다. 안정성도 제
             공하고 RAID-3에 비해 디스크의 성능저하가 일어나지 않는다.
(2) 리눅스에서 RAID 관련 예제 파일
   1) 설명: 레드햇 9.0기준으로 /usr/share/doc/raidtools-1.00.3 디렉토리에 보면 각 레벨별로
           예제파일이 존재한다.
   2) 확인
     [root@redhat9 raidtools-1.00.3]# ls
     COPYING  multipath.conf.sample  raid1.conf.sample  raid5.conf.sample
     README   raid0.conf.sample      raid4.conf.sample  raidtab.sample
(3) 사용예: RAID-0 구성하기
   1) fdisk를 이용하여 두 개의 파티션을 생성한다. 속성을 부여한다.
    ㄱ. fdisk를 사용하여 2개의 partiton 생성(n)
       예) /dev/hda8, /dev/hda9로 가정
    ㄴ. 생성된 파티션의 속성 변경(t => fd)
       예) [root@linux245 root]# fdisk -l

           Disk /dev/hda: 20.4 GB, 20411080704 bytes
           255 heads, 63 sectors/track, 2481 cylinders
           Units = cylinders of 16065 * 512 = 8225280 bytes

              Device Boot    Start       End    Blocks   Id  System
           /dev/hda1   *         1        64    514048+  83  Linux
           /dev/hda2            65      1339  10241437+  83  Linux
           /dev/hda3          1340      1721   3068415   83  Linux
           /dev/hda4          1722      2481   6104700    f  Win95 Ext'd (LBA)
           /dev/hda5          1722      2103   3068383+  83  Linux
           /dev/hda6          2104      2230   1020096   83  Linux
           /dev/hda7          2231      2263    265041   82  Linux swap
           /dev/hda8          2264      2372    875511   fd  Linux raid autodetect
           /dev/hda9          2373      2481    875511   fd  Linux raid autodetect
    ㄷ. 재부팅: fdisk를 설정한 내용을 반영시키려면 재부팅하도록 한다.
   2) /etc/raidtab 파일 생성하기
    ㄱ. /usr/share/doc/raidtools-1.00.3 디렉토리에 있는 샘플파일을 복사한다.
       cp /usr/share/doc/raidtools-1.00.3/raidtab.sample /etc/raidtab
    ㄴ. /etc/raidtab 파일 편집하기
       [root@linux245 root]# cat /etc/raidtab
       raiddev /dev/md0                        // raid 디바이스명 지정
           raid-level                0         // raid 레벨 지정
           nr-raid-disks             2         // raid 갯수 지정
           persistent-superblock     1         // 기본 세팅지정
           chunk-size                4        

           device                    /dev/hda8  // 디바이스명
           raid-disk                 0          // raid 디스크 넘버로 0부터 설정
           device                    /dev/hda9
           raid-disk                 1
   3) raid device를 생성
     [root@linux245 root]# mkraid /dev/md0
     handling MD device /dev/md0
     analyzing super-block
     disk 0: /dev/hda8, 875511kB, raid superblock at 875392kB
     disk 1: /dev/hda9, 875511kB, raid superblock at 875392kB
   4) raid를 작동시킨다.
     [root@linux245 root]# raidstart /dev/md0
   5) 파일시스템을 생성한다.
     [root@linux245 root]# mkfs -t ext3 /dev/md0
   6) 사용하고자할 디렉토리 생성
     [root@linux245 root]# mkdir /data
   7) 마운트
     [root@linux245 root]# mount -t ext3 /dev/md0 /data
   8) 확인
    ㄱ. mount 확인
       [root@linux245 root]# mount
       /dev/hda6 on / type ext3 (rw)
       none on /proc type proc (rw)
       usbdevfs on /proc/bus/usb type usbdevfs (rw)
       /dev/hda1 on /boot type ext3 (rw)
       none on /dev/pts type devpts (rw,gid=5,mode=620)
       /dev/hda5 on /home type ext3 (rw)
       none on /dev/shm type tmpfs (rw)
       /dev/hda2 on /usr type ext3 (rw)
       /dev/hda3 on /var type ext3 (rw)
       /dev/md0 on /data type ext3 (rw)            // 이 부분
    ㄴ. raid 상태확인
       [root@linux245 root]# lsraid -p
       [dev   9,   0] /dev/md0         F4E8064A.0479FB89.38521B8A.D8094A34 online
       [dev   3,   8] /dev/hda8        F4E8064A.0479FB89.38521B8A.D8094A34 good
       [dev   3,   9] /dev/hda9        F4E8064A.0479FB89.38521B8A.D8094A34 good
    ㄷ. 용량의 확인
       [root@linux245 root]# df -h
       Filesystem            Size  Used Avail Use% Mounted on
       /dev/hda6             981M  116M  816M  13% /
       /dev/hda1             487M   14M  448M   3% /boot
       /dev/hda5             2.9G   33M  2.8G   2% /home
       none                   62M     0   62M   0% /dev/shm
       /dev/hda2             9.7G  4.5G  4.8G  49% /usr
       /dev/hda3             2.9G  304M  2.5G  11% /var
       /dev/md0              1.7G   33M  1.6G   3% /data
        => 2개의 파티션으로 구성하였으므로 두 개의 파티션이 합쳐진 총 용량으로 표시된다.
   9) 참고: 부팅후에도 계속적으로 사용하려면 /etc/fstab에 등록시킨다.
     예) /dev/md0                /data                   ext3    defaults        0 0
   10) Raid 해제하기
    ㄱ. 파일시스템을 언마운트한다.
       umount /data
    ㄴ. raid를 중지시킨다.
       raidstop /dev/md0
    ㄷ. fdisk로 파티션을 삭제하거나 재설정한다.
(4) 관련명령어
   1) mkraid
    ㄱ. 설명: RAID 장치를 초기화하여 만들어주는 명령어이다.
    ㄴ. 사용법
       mkraid [option] 디바이스명
    ㄷ. option
       -f : 해당 장치를 강제로 초기화시킨다. 데이타가 있더라도 다 지우고 초기화시킨다.
    ㄹ. 사용예
       mkraid /dev/md0
        => /dev/md0 이라는 RAID Device를 생성한다.
   2) raidstart & raidstop
    ㄱ. 설명: RAID 장치를 작동시키는 명령어이다.
    ㄴ. 사용법
       raidstart 디바이스명
       raidstop 디바이스명
    ㄷ. 사용예
      a. raidstart /dev/md0
          => RAID 장치를 작동시킨다.
      b. raidstop /dev/md0
          => RAID 장치를 중지시킨다.
   3) lsraid
    ㄱ. 설명: RAID 장치의 리스트를 보여주는 명령어이다.
    ㄴ. 사용법
       lsraid option [디바이스명]
    ㄷ. option : 대문자옵션을 기본적으로 사용해야 하면 만약 생략하면 array기반이다.
       -A : Array 기반으로 리스트를 확인할 때 쓴다.
       -D : Disk 기반으로 리스트를 확인할 때 쓴다.
       -R : /etc/raidtab 기반으로 리스트를 확인할 때 쓴다.
       -p : RAID 장치를 찾아 출력해준다.
   ㄹ. 사용예
     a. [root@linux245 root]# lsraid -A -p
        [dev   9,   0] /dev/md0         F4E8064A.0479FB89.38521B8A.D8094A34 online
        [dev   3,   8] /dev/hda8        F4E8064A.0479FB89.38521B8A.D8094A34 good
        [dev   3,   9] /dev/hda9        F4E8064A.0479FB89.38521B8A.D8094A34 good
          => Array 기반으로 리스트를 보여준다. 디바이스명을 /dev/md0 라고 입력해도 되고 입력
            하지 않으면 기본 장치를 찾아 보여준다.
     b. [root@linux245 root]# lsraid -D -p
          => Disk 기반으로 리스트를 보여준다.
     c. [root@linux245 root]# lsraid -R -p
          => /etc/raidtab의 내용을 출력해준다.
   4) raidhotadd
    ㄱ. 설명: Software RAID Array에서 하나의 디스크가 실패했을 경우 이것을 다른 디스크로 대체
            시켜 주는 주는 명령이다.
    ㄴ. 사용법
       raidhotadd RAID장치 디스크장치
    ㄷ. 사용예
       raidhotadd /dev/md0 /dev/hda10
        => /dev/hda10 디스크를 /dev/md0 RAID Array로 만든다.
    ㄹ. 참고 : 이 명령은 raidstart 명령에 심볼릭링크이며, 이 명령을 사용하기 전에 해당 파일시
              스템을 언마운트하고 RAID 동작을 정지시킨 후에 해야 한다.
       예) umount /data
           raidstop /dev/md0
           raidhotadd /dev/md0 /dev/hda10
           raidstart /dev/md0
           mount -t ext3 /dev/md0 /data
(5) /etc/raidtab 주요항목분석
   1) raiddev /dev/mdx : RAID array 장치를 정의한다.
   2) rain-level     N : RAID level을 정의한다.
   3) nr-raid-disks  N : RAID 갯수를 정의한다.
   4) persistent-superblock 1 : 이 값은 커널에서 RAID가 쉽게 찾아질 수 있도록 하는 설정이다.
                               값은 0 또는 1이 설정될 수 있으며, 1을 보통 자동으로 시작하도록
                               하는 설정이다.
   5) chunk-size     N : 레이드에 기록되는 사이즈를 정한다. 보통 kilobytes 단위이며, 커널설정
                        에 따라 차이는 있지만 최대 4M이다. 일반적으로 4k ~ 128k 로 설정한다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 로그분석
로그분석은 시스템관리와 보안에 상당히 중요하다. 리눅스에서는 기본적으로 모든 행동이 기록이 되어
로그파일로 남는다.


2. 로그분석관련 파일
(1) /var/log 디렉토리 : 대부분의 로그관련 파일들이 위치하는 디렉토리이다.
(2) 주요파일
   1) /var/log/messages
    ㄱ. 설명: 시스템의 표준 에러관련 메시지가 기록되는 파일로 syslogd 라는 데몬에 의해 설정된
            사항들이 기록된다. 기본적으로 루트권한자만이 읽고 쓸 수 있다.
    ㄴ. 로그예
       [root@www root]# cat /var/log/messages
       -- 생략 --
       Feb  1 19:50:55 www  2월  1 19:50:55 su(pam_unix)[32176]: session closed for user root
        => (설명) 시스템로그는 4개의 부분으로 구성되어 있다.
                 1. 날짜 및 시간
                 2. 메시시가 발생한 호스트네임
                 3. 메시지를 발생한 내부 시스템이나 응용프로그램의 이름
                 4. 자체적으로 발생한 메시지, 보통 콜론(:)으로 구분된다.
   2) /var/log/dmesg : 시스템이 부팅할 때 출력되었던 메시지가 로그로 남겨진다. 보통 커널 부트
                      메시지 로그라고 한다.
   3) /var/log/secure : 모든 접속과 관련하여 언제 어디서 어떤 서비스를 사용했는지 기록한다.
                       보통 login, tcp_wrappers, xinetd 관련 로그들이 남는다.
   4) /var/log/xferlog : FTP 접속 관련작업을 기록한다. 보통 wu-ftpd에 의해 발생된 로그이다.
   5) /var/log/cron : cron데몬이 실행했던 작업을 기록한다.
   6) /var/log/maillog : sendmail의 메일관련 작업을 기록한다.
   7) /var/log/lastlog : telnet을 이용한 접속을 기록한다. 바이너리파일로 lastlog라는 명령으로
                        확인한다.
   8) /var/log/wtmp : 콘솔모드, telnet, ftp로 접속한 기록과 시스템을 재부팅한 기록, 접근지등을
                     기록한다. 역시 바이너리파일로 되어 있으며, last라는 명령으로 확인한다.
   9) /var/log/boot.log: 부팅시에 출력되는 모든 메시지를 기록한다. 부팅시의 에러등을 확인할 수
                        있다.
   10) /var/log/cron: 시스템의 정기적인 작업을 수행하는 cron관련 로그를 기록하는 파일이다.
   11) /var/log/sa : sysstat라는 패키지에 의해 기록되는 로그파일들이 위치하는 디렉토리이다.
(참고1) 'w'이라는 현재 로그인한 사용자들의 작업을 보여주는 명령이 있는데 이 명령은 utmp라는
       바이너리 파일의 기록을 보여준다. 이 파일의 위치는 /var/run/utmp이다.

3. 로그관련 데몬
(1) 로그데몬
   1) 설명: 시스템과 관련된 대부분의 로그는 syslogd가 하고 추가로 klogd라는 데몬이 있다.
    ㄱ. syslogd : 커널과 여러가지 시스템 프로그램들은 각종 에러와 경고 메시지, 기타 일반적인
                 메시지들을 출력한다. 이런 메시지들을 파일로 기록하는 데몬이다.
    ㄴ. klogd : 부팅후에 부팅과 관련된 메시지를 보려면 dmesg라는 명령을 친다. 이 명령은 실제
               /var/log/dmesg라는 파일의 정보를 가지고 오는 것이 아니라, 시스템에는 부팅과
               관련된 메시지를 포함하여 커널관련 메시지를 담는 약 8196bytes의 버퍼크기를 갖고
               메시지를 기록하는 데 이 메시지를 기록하는 데몬이 klogd이다.
(2) 관련파일
   1) /etc/rc.d/init.d/syslog : 실행과 관련된 스크립트파일로 실질적인 실행파일이다. syslogd와
                               klogd 데몬을 모두 실행시켜 준다.
   2) /etc/syslog.conf : syslog데몬의 환경설정파일이다.
   3) /etc/sysconfig/syslog : syslogd 와 klogd의 시작과 관련된 스크립트의 환경파일이다.

4. /etc/syslog.conf 파일분석
(1) 기본 구성형식
    facility.level                        action
(2) facility : 메시지를 발생시키는 프로그램의 유형을 나타낸다.
   * facility의 종류
     cron          : cron, at과 같은 프로그램이 발생한 메시지
     auth          : login과 같이 인증프로그램 유형이 발생한 메시지
     authprive     : 개인 인증을 요하는 프로그램 유형이 발생한 메시지
     daemon        : telnetd,ftpd등과 같이 daemon이 발생한 메시지
     kern          : 커널이 발생한 메시지
     lpr           : 프린트 유형의 프로그램이 발생한 메시지
     mail          : mail 시스템이 발생한 메시지
     mark          : syslogd에 의해 만들어지는 날짜유형
     news          : 유즈넷 뉴스 프로그램 유형이 발생한 메시지
     syslog        : syslog 프로그램이 유형이 발생한 메시지
     user          : 사용자 프로세스
     uucp          : UUCP 시스템이 발생한 메시지
     local0-local7 : 여분으로 남겨둔 유형
(참고2) facility 뒤에 .none을 붙이면 해당 facility를 제외하겠다는 의미이다. 예를 들어 mail.
       none은 메일 관련 메시지를 제외한다는 뜻이다.
(3) level : 위험의 정도를 가리키며 설정된 위험의 정도보다 높아야 메시지를 내보낸다. 레벨 앞에
            '='을 사용할 경우 해당 레벨의 위험도와 같은 경우를 의미한다.
    * level의 종류 (위험 레벨이 낮은 것부터 높은 순서로 나열)
      debug   : 프로그램을 디버깅할 때 발생하는 메시지
      info    : 통계, 기본정보 메시지
      notice  : 특별한 주의를 요하나 에러는 아닌 메시지
      warning : 주의를 요하는 경고 메시지
      err     : 에러가 발생하는 경우의 메시지
      crit    : 크게 급하지는 않지만 시스템에 문제가 생기는 단계의 메시지
      alert!   : 즉각적인 조정을 해야 하는 상황
      emerg   : 모든 사용자들에게 전달되어야 할 위험한 상황
(4) action : 메시지를 보낼 목적지나 행동 들에 관한 설정
    * 종류
     file : 해당 file에 내용을 추가
     @host : 지정된 호스트로 메시지를 보냄
     user  : 지정된 사용자의 스크린으로 메시지를 보냄
     *     : 현재 로그인되어 있는 모든 사용자의 스크린으로 메시지를 보냄
(5) 사용예
   1) *.=crit;kern.none                          /var/log/critical
     => 모든 facility가 발생하는 것중에서 crit레벨과 같은 수준의 메시지를 /var/log/critical이라
       는 파일로 저장하는데 커널에서 발생하는 메시지는 제외한다.
   2) *.emerg                                    *
     => 모든 emerg이상의 에러가 발생하면 모든 사용자에게 알려준다.
(참고3) /etc/syslog.conf 파일예
  # Log all kernel messages to the console.
  # Logging much else clutters up the screen.
  #kern.*                                                 /dev/console
 
  # Log anything (except mail) of level info or higher.
  # Don't log private authentication messages!
  *.info;mail.none;news.none;authpriv.none;cron.none              /var/log/messages
     => 모든 info메시지를 기록하되, mail,news,authpriv,cron은 제외
  # The authpriv file has restricted access.
  authpriv.*                                              /var/log/secure
   => 개인인증관련은 /var/log/secure에 기록
  # Log all the mail messages in one place.
  mail.*                                                  /var/log/maillog
   => 모든 메일관련 메시지는 /var/log/maillog에 기록

  # Log cron stuff
  cron.*                                                  /var/log/cron
   => cron관련 메시지는 /var/log/cron에 기록
  # Everybody gets emergency messages, plus log them on another
  # machine.
  *.emerg                                                 *
   => 모든 emerg이상의 에러가 발생하면 모든 사용자에게 알려줌
  # Save mail and news errors of level err and higher in a
  # special file.
  uucp,news.crit                                          /var/log/spooler
   => uucp, news의 crit정보기록은 /var/log/spooler에 기록
  # Save boot messages also to boot.log
  local7.*                                                /var/log/boot.log
   => 부트 메시지는 /var/log/boot.log에 기록
  #
  # INN
  #
  news.=crit                                        /var/log/news/news.crit
  news.=err                                         /var/log/news/news.err
  news.notice                                       /var/log/news/news.notice

5. 로그파일관리
(1) logrotate : /var/log 디렉토리안에 있는 많은 로그파일은 기존의 파일에 덧붙여지게 되므로
                크기는 계속 커지게 된다. 이를 방지하기 위해서 로그 파일을 조각으로 나눌 수
                있는데, 이런 작업을 하는 프로그램이 logrotate이다.
(2) /etc/logrotate.conf : logrotate의 설정 파일로 로그 파일을 조각으로 나눌 수 있다.
    * 기본 설정
     # see "man logrotate" for details
     # rotate log files weekly
     weekly        // 아래에 특별히 명시하지 않은 로그파일에 대해서는 일주일(weekly) 마다
                   //rotate한다.
     # keep 4 weeks worth of backlogs
     rotate 4     // 최대 4번까지 rotate를 허용한다. (logfile, logfile.1 ~ logfile.4까지의 로그
                  //파일이 생성된다.

     # send errors to root
     errors root  // 에러가 발생하면 root 사용자로 메일을 보낸다.

     # create new (empty) log files after rotating old ones
     create       // rotata한 후에 비어있는 로그파일을 생성한다.

     # uncomment this if you want your log files compressed
     #compress    // 로그파일을 압축하는 옵션이다. 기본값은 활성화되어 있지 않다. 용량문제가
                  //크게 되지 않는다면 압축을 하지 않는 것이 좋다.

     # RPM packages drop log rotation information into this directory
     include /etc/logrotate.d       // 대부분 RPM패키지로 설치되는 데몬들은 이 디렉토리에 로그
                                    //파일이 생성된다. 이 로그파일을 rotate시킬 수 있도록 하는
                                    //설정이다.
     # no packages own lastlog or wtmp -- we'll rotate them here 
     // 아래에 있는 로그파일(wtmp, lastlog)은 어떤 패키지에 의해서도 설정되지 않기 때문에 아래
     //에서 따로 설정한다. 다른 로그파일들은 /etc/logrotate.d내의 파일들에서 모두 설정하고 있
     //다.

     /var/log/wtmp {
         monthly
         create 0664 root utmp
         rotate 1
     }
     // 한달마다 rotate 하며 최대 1회까지만 rotate한다. 관련파일인 utmp파일을 생성한다.


     # system-specific logs may be configured here
     //시스템에 특별한 로그들은 여기에 적는다. 예를 들어lastlog에 대해 만들어 보면

     /var/log/lastlog {
     monthly
     rotate 3
     }
     // 한달마다 rotate하며 최대 3회까지 rotate한다.
(3) /etc/logrotate.d 디렉토리: 각종 응용프로그램의 로그관리를 위한 디렉토리이다. 이 디렉토리
                               내에 응용프로그램의 이름으로 파일이 설정되어 있다.
(4) 참고
    리눅스 서버에서 logrotate은 /etc/cron.daily 디렉토리에 cron작업으로 등록되어 있어 매일
   실행되도록 설정되어 있다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 백업에 대하여
백업은 자료를 보호하는 하나의 방법으로 시스템관리자가 최우선적으로 해야할 작업이다. 여러 개의
자료 복사본을 만들어 놓고 자료를 잃어버릴 경우를 대비하는 것이다. 백업을 실행하는 가장 안전한
방법은 테이프, 제거가능한 드라이브, 기록가능한 씨디 등 시스템과 떨어진 위치에 저장하는 것이다.


2. 자료가 손실되는 경우
(1) 하드웨어의 결함
(2) 소프트웨어의 버그
(3) 사람의 실수나 오동작
(4) 천재지변등의 자연재해

3. 백업전에 고려할 사항
(1) 백업 데이터 선택 여부 : 어떠한 데이터를 백업할 지를 결정해야 한다. 예를 들면 /home 디렉토
                            리만을 백업할 것인지, /var 디렉토리를 할 것인지 아니면 전체 백업을
                            할 것인지를 결정해야 한다.
(2) 백업 주기 : 얼마나 자주 백업할 것인지를 결정해야 한다. 또한 증분백업(Incremental Backup)
                을 할 것인지, 전체백업(Full Backup)를 할 것인지도 결정해야 한다. 증분백업이란
                말 그대로 백업할 대상중에서 추가된 부분만을 백업하는 것을 말하고 전체백업이란
                전체를 그대로 백업하는 것을 말한다. 실제로는 이 두가지 백업형태를 적절히 이용
                하는 것이 중요하다. 예를 들면 월요일부터 토요일까지는 추가된 부분만을 증분백
                업하고, 일요일날에는 전체백업을 실시한다. 또한 매월 1일에는 전체백업을 실시하
                여 한달의 데이터, 1주의 데이터 등의 단위로 백업이 가능하다.
(3) 매체(Media) 선택 여부: 어떠한 백업 매체를 사용할 것인지를 결정해야 한다. 이 매체 선택은
                           경제적인 면과 효율적인 면, 편리성 등을 고려하여 선택한다.
(4) 백업 방법: 어떠한 프로그램을 선택하냐는 것이다. 리눅스에서 사용가능한 백업방법으로는 tar,
               dd, dump, dpio 등이 있고, 이외에도 많은 백업 유틸리티들이 있다. 편리성과 안전성
               , 효율성 등을 고려하려 선택하도록 한다.

4. 백업의 미디어
(1) 개요: 백업할 경우 가장 중요하게 고려하는 것이 예비 매체의 선택이다. 비용, 신뢰성, 처리속
          도, 가용도를 생각해야 한다.
(2) 백업매체
   1) 플로피디스크: 매우 싸며 어느 정도 신뢰할 만하다. 하지만 별로 빠르지 못하고 매우 유동적
                   이다. 또한 대용량의 데이터 저장시에는 적당치 않다.
   2) 테이프: 다소 비싸고 충분히 신뢰할 만하다. 속도도 충분히 빠르다. 테이프의 크기에 따라
             편리하게 이용할 수 있다.
   3) MOD(Magnetic Optical Drive: 광자기 드라이브) : 대용량의 데이터를 랜덤하게 접근하고 한
                                                    부분만 빨리 복원할 수 있다. Giga급의 용량
                                                    을 가진다.
   4) DAT(Digital Audio Tape) : 카세트 테이브보다 더 작은 크기의 미디어로 Giga급 용량을 갖
                               는다.

5. 리눅스에서 지원가능한 백업장치
(1) /dev/cdrom: CD-ROM드라이브
(2) /dev/fd0: 플로피디스크
(3) /dev/ht0, /dev/nht0 : IDE 테이프 장치 (예를 들면 Iomega drives)
(4) /dev/nst0, /dev/st0 : DAT(Digital Audio Tape) 나 DDS(Digital Data Storage) 계열의 SCSI
                          테이프 장치
(5) /dev/nrft0, /dev/nftape, /dev/rft0, /dev/ftape : 플로피 테이프 장치 (예를 들면 QIC-80)

6. 백업툴의 선택

(1) 개요: 전통적인 유닉스툴들에는 tar, dd, cpio, dump등이 있다. tar와 cpio는 유사하고 둘 다
          테이프상에서 복원할 수 있고, 거의 모든 미디어를 사용할 수 있다.
(2) 백업툴
   1) tar: Unix와 리눅스시스템 모두에서 사용되는 유틸리티로 파일이나 디렉토리들을 하나의 파일
          로 묶어주는 역할을 한다. 사용이 쉽고 소수의 파일백업에 좋고, 원본파일을 남겨두므로
          안전하다. 전통적인 유닉스의 tar는 압축기능을 하는 옵션이 없지만, 리눅스의 GNU tar는
          압축도 지원한다.
   2) cpio: tar와 비슷한 유틸리티로 많은 양의 데이터에 대해서는 tar보다 빠르다. 장치파일이나
           네트워크 파일등의 특수 파일도 백업이 가능하고 백업본의 크기도 작고, 백업본에 손상된
           부분이 있더라도 손상된 부분을 제외하고 나머지 부분을 복구한다. 그러나, 증분백업기능
           을 지원하지 않는다.
   3) dump: ext2 나 ext3 파일시스템만 지원하고, 파일들을 백업하지않고 파일시스템 자체를 직접
           읽어내는 방법을 사용한다. 전체백업과 증분백업이 가능하다.
   4) dd : data dump의 약자로 파티션 전체의 백업등이 가능하다. 실제적으로는 백업보다는 다른 경
          우에 더욱 더 많이 쓰인다.
   5) 기타: amanda, Arkeia, Bru, Veritas(client), UniBACK, ArcServe 등

7. tar를 이용하여 백업하기
(1) 전체백업
   1) tar cvfp home.tar /home
       => /home 디렉토리를 퍼미션을 그대로 유지하면서 home.tar라는 파일로 묶는다.
   2) tar cf /dev/st0 /home
       => /home디렉토리를 SCSI 테이프장치인 /dev/st0에 백업한다.
   3) tar zcf /dev/st0 /home
       => /home디렉토리를 SCSI 테이프장치인 /dev/st0에 압축해서 백업한다.
   4) tar zxf /dev/st0
       => SCSI 테이프장치인 /dev/st0 에서 압축을 풀어 현재 디렉토리에 푼다.
   5) tar -g list -cvpf home.tar /home
       => -g는 증분백업(Increment backup)에 사용하는 옵션으로 /home 디렉토리를 퍼미션을 그대로
         유지하면서 home.tar로 묶는 것은 1번 예제와 같지만 list라는 백업시에 저장되는 파일이나
         디렉토리들을 목록화하는 파일을 생성한다. 처음시도할 경우에는 첫번째 예제와 같은 파일
         로 생성된다. 그러나 그 다음 시도시에는 list파일과 비교하여 추가된 것만 백업하므로 백
         업하여 생성되는 파일명을 같게 해서는 안된다.
(2) 증분백업
   1) tar -g list -cvpf home1.tar /home
       => 기존의 list파일을 내용을 보고 그 이후에 변경되거나 추가된 파일들을 home1.tar로 백업
         한다. list파일을 편집기로 열어보면 파일의 용량을 숫자로 관리한다. 이 값을 비교하여
         변화시에 증분백업을 시도한다. 따라서, 이 파일을 삭제되면 전체백업을 한다.

8. cpio를 이용하여 백업하기
(1) 설명: cpio는 Copy Input ot Output의 약자로 입력받은 것을 출력에 복사한다는 뜻이다. 보통
          find명령의 출력을 입력으로 받아 백업디바이스에 저장하는 역할을 한다.
(2) 사용법
   [find 명령 | ] cpio options ' > 또는 < ' 디바이스명
(3) options
   -o : 표준출력으로 보내어 사용한다. (--extract)
   -i : 표준입력으로 받을 때 사용한다. 즉, 백업한 자료를 불러올 때 사용한다.
   -v : 과정을 자세히 보여준다.
   -c : 데이터 형식을 ASCII형태로 한다.
   -d : 필요하면 디렉토리를 생성한다. (--make-directories)
   -B : 입출력 블록사이즈를 5120bytes로 한다. 기본 블록사이즈는 512bytes이다.
(4) 사용예
   1) find /home | cpio -ocv > /dev/nst0
      => /home 디렉토리의 내용을 SCSI 테이프장치인 /dev/nst0 장치에 백업한다.
   2) cpio -icdv < /dev/nst0
     => /dev/nst0에 백업된 데이터를 현재디렉토리에 복원한다. 필요하면 디렉토리도 생성한다.

9. dump를 이용하여 백업하기
(1) 설명: dump는 파일들이 아닌 파일시스템 전체를 백업한다. 보통 파티션단위로 백업할 때 사용
          하면 편리하다. dump는 0-9단계의 레벨을 가지고 증분 백업을 지원한다. 레벨 0이 전체
          백업이고 나머지 레벨들은 부분백업을 하게 된다. 백업시에 /etc/fstab파일을 참조하며
          백업된 데이터 복원은 restore명령을 사용한다.
(2) 사용법
   dump options 백업미디어 백업하고자하는 대상
(3) options
   -0~9 : 덤프의 레벨을 지정한다. 0은 전체백업이고, 나머지는 부분백업을 한다. 기본레벨은 9이
         다.
   -f 파일명 또는 디바이스명 : 백업할 미디어를 지정하거나 파일명을 적는다.
   -u : dump 를 통해 백업한 후에 /etc/dumpdates라는 파일에 작업에 대한 정보를 기록한다.
(4) 사용예
   1) dump -0f /dev/nst0 /home
       => /home 디렉토리 전체를 /dev/nst0 장치에 전체 백업한다.
   2) dump -0u -f /dev/nst0 /dev/hda7
       => /dev/hda7 파일시스템 전체를 /dev/nst0 장치에 전체 백업하며 그 작업 정보를 /etc/dumpd
         ates라는 파일에 기록한다.
   3) dump -0u -f home /home
       => /home 디렉토리 전체를 home이라는 이름으로 전체백업한다. 또한 그 작업정보를 /etc/dump
         dates 라는 파일에 기록한다.
   4) dump -4u -f /dev/nst0 /dev/hda7
       => level4 수준 또는 그 이하의 백업을 한 뒤에 바뀐 내용을 증분백업한다. 또한 그 작업정보
         를 /etc/dumpupdates에 기록한다.
(5) 복원: dump명령으로 백업한 경우에는 restore 명령을 이용하여 복원해야 한다.
   1) 사용법
     restore options 디바이스명 또는 백업파일명
   2) options
    -i : 대화식(interactive)으로 복구할 파일을 선택한 후에 복원이 가능하다.
    -f 디바이스명 또는 백업파일명 : 백업되어진 파일이나 장치를 지정한다.
    -r : 전체백업시에 사용한다. 이 옵션사용시에 파일시스템이 미리 생성되어 있어야 하고, 마운트
        도 되어 있어야 하며 해당 디렉토리안에서 작업해야 한다.
   3) 사용예
    ㄱ. restore -if /dev/st0
         => /dev/st0에 백업된 데이터를 하나씩 확인하면서 복원한다.
    ㄴ. restore -rf /dev/nst0
         => /dev/nst0에 백업된 데이터를 전체복원한다. 단 복원하고자 하는 파일시스템이 생성되어
           있어야 하며 마운트되어 있어야 하고 해당 디렉토리안에서 작업해야 한다.
            예) mke2fs /dev/sda1
                mount /dev/sda1 /mnt
                cd /mnt
    ㄷ. restore -if home
         => home이라는 이름으로 백업된 파일을 복구한다. 실행시키면 다음과 같이 프롬프트가 나타
           난다. 지원가능한 명령을 확인해야 한다.
           restore >                    // ? 나 help라고 입력하면 사용가능한 명령을 보여준다.
           restore > help
           Available commands are:
                   ls [arg] - list directory
                   cd arg - change directory
                   pwd - print current directory
                   add [arg] - add `arg' to list of files to be extracted
                   delete [arg] - delete `arg' from list of files to be extracted
                   extract - extract requested files
                   setmodes - set modes of requested directories
                   quit - immediately exit program
                   what - list dump header information
                   verbose - toggle verbose flag (useful with ``ls'')
                    prompt - toggle the prompt display
                    help or `?' - print this list
            If no `arg' is supplied, the current directory is used
           restore > ls                 // 백업된 내용을 보여준다.
           .:
            bluemountain/ minory/       nanajjang/    quota.user    zzang/
            lost+found/   mkk737/       posein/       xitem/
           restore > add quota.user     // 특정한 파일을 선택한다. add뒤에 파일명을 기입하지
                                          않으면 전부선택된다.
           restore > ls
           .:
            bluemountain/  minory/        nanajjang/    *quota.user     zzang/
            lost+found/    mkk737/        posein/        xitem/
           restore > extract
           You have not read any volumes yet.
           Unless you know which volume your file(s) are on you should start
           with the last volume and work towards the first.
           Specify next volume # (none if no more volumes): 1       // 볼륨넘버를 입력한다.
           set owner/mode for '.'? [yn] y                           // y라고 입력한다.

10. dd를 이용하여 백업하기

(1) 설명: 전체파티션 단위로 백업할 때 용이하다.
(2) 사용법: 특정파티션을 다른 하드디스크의 파티션으로 백업한다고 가정해보자. 만약 /dev/hda1
            을 /dev/hdb1으로 백업한다고 할 때, /dev/hdb1을 /dev/hda1과 같은 사이즈의 파티션으
            로 생성한다.
(3) 사용예
   1) dd if=/dev/hda1 of=/dev/hdb1 bs=1k
       => /dev/hda1을 /dev/hdb1으로 백업한다.
   2) dd if=/dev/hda of=/dev/hdb
       => /dev/hda를 /dev/hdb로 백업한다.

11. 백업의 종류와 복원
(1) 개요: 모든 것을 한번에 백업하는 풀백업(Full Backup)이 있고 부분 부분을 백업하는 부분 백업
          (Incremental Backup)이 있다.
(2) 풀백업
   1) 설명: tar를 이용하여 쉽게 할 수있다.
   2) 사용예
     ㄱ. tar cvf /dev/ftape /usr/src
        => /usr/src디렉토리를 /dev/ftape라는 테이프에 백업한다.
     ㄴ. tar -cMf /dev/fd0H1440 /usr/src
        => /usr/src디렉토리를 -M(Multi Volume)옵션으로 플로피에 연속 백업한다. 백업하기 전에
          플로피는 포맷을 해야 한다.
(3) 부분백업
   1) 설명: 특정한 날짜 이후로 바뀐 파일 부분만 백업한다.
   2) 사용예
     ㄱ. tar -c -v -N '15 June 2002' -f /dev/st0 /usr/src
        => /usr/src 에서 2002년 6월 15일 이후로 변경된 파일만을 DAT에 부분백업한다.
(4) 복원
   1) 설명: tar의 x옵션을 이용하여 복원한다.
   2) 사용예
     tar xvf /dev/fd0H1440

12. 백업의 대상
(1) 개요: 가능한 많은 백업을 하는 것이 좋다. 그러나 쉽게 재설치가 가능한 프로그램은 백업을 원
         하지 않을 수도 있다. 또한 시스템상의 이유로 백업을 원치않는 데이터도 있을 것이다. 예
         를 들면 커널이 항상 자동으로 생성하는 데이터들은 백업할 필요가 없다. 백업을 해야할지
         하지 말아야 할지 잘 구분이 안되는 것이 /var디렉토리 이하의 파일들이다. 무엇이 중요한
         가를 고려하여 백업해야 한다.
(2) 백업해야할 대상 : 보통 /home과 /etc(이 디렉토리는 설정파일들이 들어있는 디렉토리이다. 경
                      우에 따라서는 시스템의 다른 위치에도 설정파일이 있을 수도 있으니 잘 찾아
                      백업을 해야함)는 꼭 해야한다. 아울어 어떤 프로그램의 소스를 /usr/local
                      밑에 설치하였다면 이 디렉토리도 백업대상으로 고려해야 한다.

13. 압축백업
(1) 개요: 백업은 많은 공간을 요구하게 되는데 그것은 많은 경제적인 비용을 초래할 수 있다. 이러
          한 비용적 부담의 대처방법으로 압축을 들 수 있다. 압축백업은 문제점을 발생시킬 수도
          있다. 자연적으로 어떤 환경때문에 만약 하나의 비트가 잘못 되었다면 모든 나머지 데이터
          가 사용 못하게 될 수 있다. 어떤 백업프로그램은 에러를 교정해주지만 많은 수의 에러는
          어찌할 수 없는 경우가 많다. 백업은 안전해야 되므로 그리 좋은 생각만은 아니다.
(2) 사용예
   tar zcvf etc_backup.tar.gz /etc
    => /etc디렉토리를 압축하여 etc_backup.tar.gz파일을 만든다.

14. 테이프 관련 유틸리티- mt
(1) 설명: mt는 테이프(Magnetic Tape)의 작동을 제어하는 유틸리티이다.
(2) 사용법
   mt [option] command
(3) option
   -h : 사용가능한 command를 보여준다.
   -v : mt의 버전을 보여준다. (--version)
   -f 디바이스명: 제어하고자하는 디바이스명을 지정한다.
(4) 주요 commnad
    status : 테이프의 상태를 보여준다.
    fsf 파일수: 테이프를 지정한 파일 수 만큼 앞으로 이동시킨다.
    rewind : 테이프를 처음으로 되감는다.
    bsf 파일수 : 테이프를 지정한 파일 수 만큼 되감는다.
    erase : 테이프의 내용을 지운다.
    offline : 테이프를 꺼낸다.
    rewoff : 테이프를 처음으로 되감은 뒤에 꺼낸다.
(5) 사용예
   1) mt -f /dev/st0 status
       => 테이프의 상태를 보여준다.
   2) mt -f /dev/st0 rewind
       => 테이프를 처음으로 되감는다.
   3) mt -f /dev/st0 fsf 50
       => 파일 수 50만큼 테이프를 앞으로 이동시킨다.
   4) mt -f /dev/st0 erase
       => 테이프의 내용을 지운다.
   5) mt -f /dev/st0 offline
       => 테이프를 꺼낸다.
   6) mt -f /dev/st0 rewoff
       => 테이프를 처음으로 되감은 뒤 꺼낸다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 가상메모리(Virtual Memory)
(1) 개요: 하드디스크의 일부를 마치 메모리처럼 사용할 수 있게 해주는 기술을 말한다. 이는 물리
          적 메모리의 한계를 어느 정도 극복할 수 있다. 이 기법은 하나의 프로그램이 실행될 때,
          프로그램의 전체가 메모리(RAM)에 올라와 실행되지 않고 필요한 부분만 을 불러와 실행하
          는 기법을 기본으로 한다.
(2) 기법: 커널은 실제 메모리(RAM)에 올라와 있는 메모리 블록들 중에 당장 쓰이지 않는 것을
          디스크에 저장한다. 이를 통해 사용가능한 메모리 영역을 늘린다. 만일 디스크에 저장되
          었던 메모리 블록이 다시 필요하게 되면 그것을 다시 실제 메모리안으로 올려지며, 대신
          다른 블록이 디스크로 내려가게 된다. 이런 과정이 일어나고 있다는 것을 사용자가 알 수
          없고, 그저 많은 양의 메모리가 있는 것처럼 보일 뿐이어서 점유하고 있는 메모리가 디스
          크에 있는 실제 메모리에 있는 지는 전혀 신경 쓸 필요가 없다. 그러나, 디스크를 읽고
          쓰는 시간은 RAM보다 훨씬 느리기 때분에 프로그램의 실행은 그만큼 더디게 된다. 이렇게
          가상메모리로 쓰이는 하드디스크의 영역을 스왑영역(Swap Space)라고 부른다.


2. 스왑
(1) 개요: 스왑영역은 보통 처음 설치시에 스왑파티션으로 설정을 꼭 하도록 되어 있다. 설치시의
          스왑파티션의 크기는 실제 RAM의 2배정도를 잡도록 권장한다. 이렇게 파티션으로 설정하는
          방법이 있고, 스왑 파일로 설정할 수 있다. 스왑 파일은 그 크기를 언제라도 자유롭게
          조절할 수 있지만 스왑파티션에 비해 속도는 느리다.
(2) 관련명령어
   1) mkswap
    ㄱ. 설명: 스왑파티션이나 스왑파일을 생성하는 명령이다.
    ㄴ. 사용법
       mkswap [option] 스왑파일 or 스왑파티션 [size]
    ㄷ. option
       -c : 스왑파티션생성시에 사용하는 옵션이다.
    ㄹ. 사용예
      a. mkswap /swap-file 10240
          => 10240K 사이즈의 /swap-file을 생성한다.
      b. mkswap -c /dev/hdb1
          => /dev/hdb1을 스왑파티션으로 설정한다.
   2) swapon
    ㄱ. 설명: 스왑파티션이나 스왑파일을 구동하는 명령이다.
    ㄴ. 사용법
        swapon [option] 스왑파일 or 스왑영역
    ㄷ. option
       -a : /etc/fstab파일에 있는 swap을 전부 활성화시킨다.
       -s : 스왑영역의 상태를 보여준다.
    ㄹ. 사용예
      a. swapon /dev/hdb1
      b. swapon /swap-file
      c. swapon -a
          => /etc/fstab파일에 설정되어 있는 swap 영역을 모두 활성화시킨다.
      d. [root@www /]# swapon -s
         Filename                        Type            Size    Used    Priority
         /dev/hda1                       partition       530104  0       -1
          => 현재 스왑의 상태를 보여준다.
   3) swapoff
     ㄱ. 설명: 스왑파티션이나 스왑파일의 구동을 중단시킨다.
     ㄴ. 사용법
        swapoff 스왑파일 or 스왑영역
     ㄷ. 사용예
        swapoff /swap-file
(3) 스왑 영역만들기
   1) 스왑파일생성하기
     ㄱ. dd명령을 실행하여 빈틈이 하나도 없는 스왑파일을 생성한다.
        [root@www /root]# dd if=/dev/zero of=/swap-file bs=1024 count=10240
        10240+0 records in
        10240+0 records out
         => (설명)
           /dev/zero: 빈틈이 없는 파일을 생성할 때 사용한다.
           /swap-file: 생성하고자할 스왑파일의 이름이다.
           bs=1024: 입출력단위의 크기를 지정한다. 보통 블록사이즈라고 부르며 단위는 바이트이
                   다. 현재설정은 1024byte, 즉 1KB이다.
           count=10240: 입출력 단위의 몇 배 크기의 파일을 만들 것인지를 지정한다. (즉 10240KB
                       임) count는 꼭 4의 배수로 지정해주는 것이 좋은데, 그 이유는 커널이 스왑
                       하는 메모리페이지(Memory Page)의 단위가 4KB이기 때문이다.
     ㄴ. 커널이 해당하는 파일을 가상메모리로 사용할 수 있도록 mkswap명령을 내린다.
        [root@www /root]# mkswap /swap-file 10240
        Setting up swapspace version 1, size = 10481664 bytes
     ㄷ. /swap-file의 권한을 root로 제한한다.
        [root@www /root]# chmod 600 /swap-file
     ㄹ. 스왑을 사용하도록 한다.
        [root@www /root]# swapon /swap-file
     ㅁ. 시스템 부팅시마다 자동으로 사용되도록 설정하려면 /etc/fstab에 등록을 한다.
        /swap-file               swap                    swap    defaults        0 0
   2) 스왑파티션만들기 : 새로운 하드디스크를 Primary Slave(/dev/hdb)에 장착했다고 첫번째 파티
                        션을 스왑파티션이라고 가정
     ㄱ. fdisk명령을 이용하여 스왑파티션을 생성한다.
        fdisk /dev/hdb
     ㄴ. mkswap명령을 이용하여 스왑파일시스템 생성
        mkswap -c /dev/hdb1
     ㄷ. 스왑영역 활성화
        swapon /dev/hdb1
     ㄹ. 부팅시마다 사용하기 위해 /etc/fstab에 등록한다.

3. 메모리관리
(1) 관련명령어
   1) free
     ㄱ. 설명: 현재 사용중인 메모리의 상태를 출력해 주는 명령이다.
     ㄴ. 사용법
        free [option]
     ㄷ. option
        -m : MB 단위로 보여준다.
        -k : KB 단위로 보여준다.
     ㄹ. 사용예
        a. [root@www /root]# free
                        total       used       free     shared    buffers     cached
           Mem:        513064     509532       3532          0      50480     348948
           -/+ buffers/cache:     110104     402960
           Swap:       265032        556     264476
        b. [root@www /root]# free -m
             total       used       free     shared    buffers     cached
           Mem:           501        498          2          0         45        353
           -/+ buffers/cache:         99        401
           Swap:          258          0        258
            => (설명)
              Mem: 실제적인 메모리의 상태를 보여준다. total은 전체메모리, used는 사용중인 메
                  모리양, free는 사용되지 않고 있는 메모리, share는 프로세스간 공유되고 있는
                  메모리, buffers와 cached는 현재 디스크의 버퍼및 캐쉬로 사용되는 메모리공간
                  을 뜻한다.
              -/+ buffers/cache: 물리적인 메모리에서 버퍼로 사용되는 부분을 제외한 값
              Swap: 스왑공간의 상태를 보여준다. used는 전체스왑의 크기, free는 사용중인 스왑,
                   free는 사용되지 않는 스왑을 뜻한다.
(2) 기타 : 메모리상태정보는 top명령으로 확인가능하며 또한 /proc/meminfo에서도 확인가능하다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. xinetd란?
  RedHat Linux7에서부터 제공되는 것으로 슈퍼 데몬인 inetd를 확장한 즉, eXetnd inetd를 데몬이다.
기존의 inetd는 슈퍼데몬인 inetd와 Tcp Wrapper와 관련있는 tcpd 두가지로 나뉘어 관리되었는데
xinetd는 이 두가지를 하나로 통합하여 사용한다.


2. xinetd의 역할
xinetd의 역할도 역시 기존의 inetd의 역할과 유사하다. 네트워크서비스에 대한 접근제어, login에
대한 접근제어 등을 한다.

3. xinet의 구성
(1) 환경설정파일 : /etc/xinetd.conf
(2) xinetd에서 제공하는 서비스를 모아두는 디렉토리 : /etc/xinetd.d
    => xinetd에서 제공하는 서비스는 모두 이 디렉토리안에 파일로 나열되어 있다. 해당서비스의
      설정은 해당파일에서 설정해야 한다.

4. /etc/xinetd.conf
(1) 개요: 자세한 설정은 man으로 확인하고 기본설정만 확인해보도록 하자.
(2)기본설정
   #
   # Simple configuration file for xinetd
   #
   # Some defaults, and include /etc/xinetd.d/

   defaults
   {
           instances               = 60
           log_type                = SYSLOG authpriv
           log_on_success          = HOST PID
           log_on_failure          = HOST RECORD
           cps                     = 25 30
   }

   includedir /etc/xinetd.d
(3)설명
   1)instances : 동시에 서비스할 수 있는 서버의 최대 개수를 지정한다. 만일 접속에 제한을 두지
               않으려면 UNLIMITED로 지정하면 된다.
   2)log_type : 어떠한 형태로 로그 기록을 저장할 것인가를 지정하는 속성으로 SYSLOG와 FILE 두
               형태로 사용가능하다.
    ㄱ. SYSLOG : 지정된 facility에서 syslog로 로그기록이 전달된다. 이 때 사용가능한 facility
                는 daemon, auth, authpriv, user, local0~7이 있으며, 가능한 레벨수준으로는
                emerg, alert!, crit, err, warnning, notice, info, debug등이 있다. 레벨수준이 지
                정되지 않았을 때는 info수준으로 지정된다.
      -사용예 : SYSLOG syslog_facility [syslog_level]
    ㄴ. FILE: 지정된 크기를 가진 파일명에 로그 기록이 저장된다. 파일크기는 soft limit와 hard
             limit 두 옵션을 선택적으로 사용하여 지정할 수 있는데, soft limit에서 지정된 크기
             의  파일에 로그가 기록되며, 이 값이 초과하게 되면 경고와 같은 수준의 메시지가 전
             달되며, hard limit 값이 초과할 경우에는 문제 있는 서비스에 대한 로그를 저장하지
             않고 이에 대한 정보만을 기록하게 된다.
      -사용예 : FILE soft_limit [hard_limit]
   3)log_on_success : 서버가 시작될 때와 끝날 때 기록될 것을 지정한다. 이 속성에는 5가지의 값
                     을 조합하여 설정할 수 있다.
    -속성값
     PID      : xinetd 프로세스 ID
     HOST     : 원격 호스트의 IP
     USERID   : 원격 사용자의 ID
     EXIT     : 서비스가 빠져 나갈 때의 상태
     DURATION : 서버 세션(session)지속 상태
   4)log_on_failure : 서버가 리소스 부족으로 시작될 수 없거나 설정 파일내의 규칙에 의한 접근이
                     거부되었을 때 기록될 값들을 지정하는 속성이다.
    -속성값
      HOST    : 원격의 호스트의 아이피주소
      USERID  : 원격 사용자 ID]
      ATTEMPT : 실패한 시도가 있을 경우
      RECORD  : 클라이언트에 대한 가능한 정보
   5) cps : 초당 요청받은 수에 대한 제한 설정이다.
    ㄱ. 기본구성
       cps           =  초당_요구수 초당요구수_이상_발생시_제한시간
    ㄴ. 사용예
       cps                     = 25 30
         => 초당 요구가 25개 이상될 경우에 30초동안 접속 연결을 중단한다.
   6)only_from: 특정서비스를 이용 가능한 원격호스트를 설정한다. 이 속성에 값이 주어지지 않으면
                모든 접속이 허용되지 않는다. 서버에 접속이 가능한 원격 호스트는 도메인이 아닌
                아이피주소로 지정한다. 이 때 설정되는 IP주소형태는 IP주소(192.168.0.1)나 또는
                네트워크 주소/넷마스크(192.168.0.24)형태로 지정가능하다.
   7)per_source : 똑같은 IP주소로 로컬서비스에 접속할 수 있는 최대 접속수를 지정해 준다. 무제
                 한 접근을 허용하려면 UNLIMITED로 설정한다.
   8)enable : enable속성은 실행 가능한 서비스의 목록을 표시할 수 있게 한다. 이 속성에서 나열된
             서비스명만 실행 가능하며 그렇지 않은 서비스들은 실행되지 않는다. 그러나, disable
             속성과 DISABLE플래그가 존재할 경우 이 속성은 무시된다.
   9)no_access: 서버 서비스를 이용하지 못하도록 서버에 접근하지 못하게 할 원격 호스트의 주소를
                지정해준다.
   10)disable: 서비스 값들이 실행되지 못하도록 지정한다. enable 속성과 같이 존재할 경우 enable
              속성이 무시되어 실행되지 않는다.
   11)includedir /etc/xinetd.d : 각각 해당 서비스에 대한 지정을 /etc/xinetd.conf에서 하지 않고
                                해당서비스마다 하나의 파일로 지정할 때 쓴다. 이 속성을 사용할
                                경우 xinetd.conf에서는 해당 service를 설정할 수 없다.

5. 해당 service section에서 사용되는 주요 속성과 속성값
   1)service telnet : service속성으로 설정하고자 하는 서비스의 이름을 지정해준다. 여기서 지정해
                      주는 서비스들은 /etc/services파일 리스트에 있어야 한다.
   2)disable=yes : 해당 서비스가 실행되지 못하도록 설정한다. 해당서비스를 하지 않거나 httpd와
                   같이 standalone상태로 데몬이 작동하는 경우에 속성값을 yes로 지정하고, teln
                   et이나 POP3처럼 항상 서비스가 작동하도록 하기위해서는 속성값을 no로 지정해야
                   한다.
   3)flags=REUSE
    ㄱ. 속성값
     a. REUSE : 서비스 소켓에 SO_REUSEADDR플래그를 설정하도록 한다.
     b. INTERCEPT : 패킷이나 허용된 접속을 가로채어 허가된 위치에서 접속하는지 인증하고자 할
                   때 사용한다.
     c. NORETRY : 프로세스가 새롭게 생기지 못할 경우 재시도하지 못하도록 한다.
     d. IDONLY : 원격호스트가 원격사용자를 인증할 때만 접속을 허용한다. 이 플래그는 접속기반
                서비스에 적용되며, USER log옵션을 사용하지 않을 경우 효과를 내지 못한다.
     e. NAMEINARGS : 서버가 작동될 때 서버내에 지정한 것과 같이 server_args내의 첫번째 인수가
                    arg[0]이 되도록 하는 플래그이다. 이 플래그는 서버내에 tcpd를 넣어 tcpd를
                    사용할 수 있게 하고, inetd처럼 server-args내에 서버이름을 넣을 수 있게 한
                    다.
     f. NODELAY : TCP서비스에 이 플래그를 설정하면 TCP_NODELAY플래그가 소켓에 설정된다. 이 플
                 래그는 TCP서비스에 한해서 적용된다.
     g. DISABLE : 서비스가 실행되지 않게 한다.
     h. KEEPALIVE : TCP서비스에 이 플래그가 설정되면 SO_KEEPALIVE소켓 플래그가 소켓에 설정된다.
                   이 플래그도 TCP서비스에 한해서 작용한다.
   4)protocol = tcp: 서비스가 사용한 프로토콜을 설정한다. 이 프로토콜은 /etc/protocols내에 있
                    어야 한다. 이 속성을 지정하지 않으면 서비스가 사용하는 기본 프로토콜을
                    사용한다.
   5)socket_type = stream
    ㄱ. 속성값
     a. stream : stream기반의 서비스
     b. dgram  : dgram기반의 서비스
     c. raw    : 아이피에 직접 접근을 요하는 서비스
     d. seqpacket : 신뢰성있는 연속적인 데이터그램 전송을 요구하는 서비스
   6)wait = no : 서비스가 단일 쓰레드(single thread)인지 다중쓰레도(multi-thread)를 결정하는
                플래그로 yes인 경우는 단일 쓰레드로 실행되어 오직 하나의 서비스만 작동하게 하
                며, no인 경우는 다중 쓰레드로 서버가 새로운 서비스 요청을 받아 들이게 된다.
   7)user = root : 서버 프로세스를 실행할 수 있는 사용자의 ID를 나타내는 것으로 슈퍼유저일 경
                  우에만 가능하다.
   8)server = /usr/sbin/in.telnetd : 해당서비스를 실행할 데몬프로그램을 지정한다.
   9)access time = 01:00-07:00 : 지정된 시간에서만 서비스를 이용할 수 있게 해준다.
   10)redirect = 192.168.1.10 23 : TCP서비스를 다른 호스트에게 이양하고자 할 때 사용한다. 즉
                                  192.168.1.1의 FTP서비스를 192.168.1.10호스트에게 FTP서비스를
                                  할 수 있도록 해주는 설정이다. 설정방법은 "IP_Address port"이
                                  다.
   11)port = 8080 : 서비스 포트를 명시해준다. 이 포트는 /etc/services파일 목록내의 서비스포트와
                   일치해야 한다.
   12)nice=10 : 서버의 예약우선권을 나타내는 속성으로 -20~19까지의 범위를 갖는다. -20은 가장
               빠른 우선권을 나타내며, 19는 가장 느린 우선권을 갖는다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. Daemon이란?
Daemon이란 사전적인 의미로는 보통 악마(demon)를 뜻하거나, 그리스신화의 Daemon처럼 수호신을
뜻한다. 유닉스(리눅스)에서는 악마처럼 앞에 나타나지 않고, 사용자가 모르게 뒤에서 시스템의 관
리를 위해 움직이는 프로그램을 말한다. 즉, 백그라운드로 실행되어 있다가 네트워크를 통해 클라이
언트의 여러가지 요청(Mail이나 FTP등처럼)에 서비스하기 위해 설치하는 서버프로그램이다. 윈도우NT
나 윈도우2000의 서비스와 같은 의미로 보통 램에 상주하며, 대표적인 것으로는 httpd, ftpd,inetd
등이 있다.


2. Daemon의 종류
(1) 설명: 데몬에는 sendmail이나 apache처럼 단독으로 실행되는 것이 있고, ftp, telnet, pop3등을
          한꺼번에 관리하는 inetd(커널 2.4버전인 경우에는 xinetd)같은 슈퍼데몬이 있다.
(2)단독으로 실행되는 데몬 : 웹서비스처럼 클라이언트의 서비스요청이 많은 경우에 유용하다. 항
                            상 램에 상주하므로 좀 더 빠른 서비스가 가능하나, 자원(메모리)의
                            낭비를 초래할 수 있다. 대표적인 것으로는 다음과 같은 것이 있다.
   1) httpd : World Wide Web 서비스를 제공하는 아파치 데몬이다. 웹서버로 사용하지 않는다면 부
             팅시간이 많이 걸리므로 사용하지 않는 것이 좋다.
   2) named : DNS서버를 사용할 경우 이 서버의 작동유무를 제어하는 데몬이다. 독립시스템일 경우
             사용하지 않는다.
   3) sendmail : E-mail을 주고 받을 때 사용되는 데몬이다.
   4) smb : 일명 삼바를 실행 시켜주는 데몬이다. 삼바는 유닉스와 윈도우의 파일 및 프린터를 공
           유하게 해주는 서비스이다.
   5) crond: 리눅스에 등록된 명령어들을 정기적으로 수행하는 데몬이다. 즉, 멀티태스킹으로 동작
            하는 리눅스에서 받은 메일의 스풀러 정리라든지 각종 명령어들을 실행하는 데몬이다.
            반드시 실행시킨다.
   6) gated : 라우팅데몬으로 리눅스에 라우팅 기능을 수행하고 싶으면 이 데몬이 떠 있어야 한다.
   7) netfs: 삼바, NFS, NCP등을 마운트하거나 언마운트할 때 필요한 데몬이다. NFS 데몬등을 실행
            하려면 해당 데몬을 실행하기 전에 미리 띄워야 한다.
   8) nfs : NFS(Nerwork File System)데몬을 띄우는 일을 한다. NFS는 TCP/IP를 이용하여 파일들을
          서로 공유할 수 있게 만든다. 리눅스에서 NFS서버를 운영할 때 쓴다.
   9) lpd : 프린터 데몬이다. lpr과 같은 명령어를 사용해 프린터를 사용하려면 이 데몬을 실행시
           켜야 한다.
   10) mcserv : mc(Midnight Commannd)라는 파일매니저 프로그램을 작동시키는 데몬이다.
   11) ircd : IRC(Internet Relay Chat)데몬이다. IRC란 인터넷 채팅을 할 때 쓰는 일종의 채팅프로
             그램이다.
   12) syslog : syslog는 시스템에 일어나는 여러가지를 기록해주는 데몬이다. 이 데몬은 반드시 실
               행하는 것이 좋다. 이 데몬이 있어야 시스템에 여러가지 사고가 발생시 기록을 추적
               하는 단서를 얻을 수가 있기 때문이다. 이 데몬에 관련된 환경파일은 /etc/syslog.co
               nf이다.
   13) squid : http, ftp, gopher 같은 프로토콜을 사용할 때 캐쉬의 속도를 높여주는 데몬이다.
   14) snmpd : SNMP(Simple Network Management Protocol)데몬이다. 네트워크의 상황을 모니터를 할
              때 사용된다.
   15) amd : automount의 약자로 호스트에서 그 서버의 파일을 읽을 때 자동으로 마운트하게 해 주
            는 데몬이다. 이 데몬은 네트워크 정보가 잘못 입력되었을 경우 부팅될 때 문제를 일으킬
            킬 수 있으므로 별다른 경우가 아니면 꺼 놓는 것이 좋다. 네트워크 설정이 정상적이거
            나 아예 사용하지 않는 경우라면 선택해도 무방하다.
   16) bootparamd : 리눅스 서버를 통해 연결된 Sun워크스테이션의 네트웍을 부팅할 때 사용했던 데
                   몬으로 리눅스에서 sun 네트워크를 부팅시킬 때 사용한다. BOOTP와 DHCP를 사용
                   하는 경우에는 켜 놓을 필요가 없다.
   17) portmap : 원격프로시저호출(RPC:Remote Procedure Call)연결을 제어해 주는 역할을 하며,
                NFS와 RPC를 사용하는 서비스를 제공하는 데몬이다. 네트워크상에서 클라이언트-
                서버개념이 적용되지 않는 시스템에서는 실행할 필요가 없는 데몬이지만 nfs, nis,
                amd 등 원격 프로시저 호출을 하는 프로그램을 사용할 경우에는 반드시 선택해야
                하는 데몬이다.
   18) routed : 자동IP라우터로 독립적인 시스템에서는 실행할 필요가 없는 데몬이다.
   19) atd : 백그라운드 작업을 해주거나 각종 예약 명령을 처리하는 작업을 한다. 기본적으로 선택
            되어 있으며, 특별한 경우가 아니면 선택한다.
   20) dhcp : 네트워크로 구성된 상태에서 리눅스 서버의 정보를 이용하여 부팅될 자신의 IP주소와
             네트워크 정보를 가질 수 있게 하는 데몬이다. 네트워크에서 서버로 사용되면 BOOTP와
             DHCP가운데 하나를 선택하는데, 정적IP를 부여한 네트워크 환경에서 선택한다. 네트워
             크가 구성되지 않는 일반PC에서는 선택할 필요가 없다.
   21) gpm : 리눅스로 부팅된 다음 텍스트 상태에서 마우스를 사용하여 영역을 선택하거나 복사를
            가능하게 해주는 데몬이다. 이 서비스는 PS/2마우스일경우 X-window와 충돌할 수도 있
            다. 만약 X-window를 실행시켰을 때 마우스가 움직이지 않으면 이 데몬을 끈다.
   22) kerneld : 운영체제의 핵심인 커널 기능을 동작시키는 데몬이다. 반드시 선택한다.
   23) keytable : 키보드의 정보를 설정하는 /usr/sbin/kbdconfig명령으로 키보드유형을 변환할 수
                 있도록 해주는 데몬이다.
   24) network : 네트워크 관련된 각종 정보를 설정을 활성화하는 데몬이다.
   25) sound : 리눅스의 부팅과 종료시 사운드의 믹서 설정을 복구하거나 저장하는 스크립트이다.
   26) ruserd : 네트워크 사용자를 추적할 수 있는 데몬으로 특정 사용자의 위치를 확인할 수 있다.
   27) rwhod : 원격 접속을 한 사용자들의 목록을 볼 수 있는 로그 정보를 가진 데몬이다.
   28) ypbind : NIS(Network Information Service) 즉, 네트워크에 알려진 모든 머신들에게 정보(In
               formation)을 제공해주는 서비스를 해주는 네트워크-클라이언트에 관련된 서버이다.
   29) yppasswd : NIS에 관련되는 것으로 클라이언트 사용자가 패스워드를 변경할 수 있도록 해주는
                 서버측의 데몬이다.
   30) ypserv : NIS를 총괄하는 서버이다. 데이터베이스나 프로세스들로 구성되어 있는 간단한 네트
               워크를 찾는 서버이다.
   31) apmd : 고급전원 관리기능(Advanced Power Management)을 해주는 데몬이다. 마더보드에서 APM
             을 지원한다면 이 데몬을 작동하도록 한다. doze, standby, suspend, nap, sleep, mode
             s 와 하드디스크 절전 등 바이오스에서 하는 것보다 더욱 더 뛰어난 기능을 발휘한다.
   32) pcmcia : 노트북이나 laptops 에서 사용하는 PCMCIA 관련 데몬이다.
(3)슈퍼데몬 inet에서 관리하는 데몬
   1) 설명: Inet는 Internet Superserver라 불리우며 자주 실행되지 않는 데몬들을 통들어 관리해
           슈퍼데몬이라고 부른다. 일반 데몬들처럼 프로세스가 항상 떠있지 않고, 클라이언트의
           요청이 있는 경우   에만 데몬을 실행시킨다. 응답시간은 좀 걸리지만 메모리가 절약된다.
           이 슈퍼데몬은 커널 2.2버전과 2.4버전이 차이가 있다. 커널 2.2버전 (리눅스 6.x 버전)
           에서는 inetd라는 이름을 사용하였으며, 전체적인 환경 설정은 /etc/inetd.conf에서 통합
           관리하였고, 슈퍼 데몬에 속하는 데몬들은 'TCP Wrapper'라는 프로그램에 의해 접근이
           제어되었다. 커널 2.4버전(리눅스 7.x버전이후)에서는 xinetd라는 이름의 슈퍼데몬이
           작동되고 환경설정은 /etc/xinetd.conf와 /etc/xinetd.d디렉토리의 각 서비스파일에서
           관리한다.
   2) 슈퍼데몬에서 관리하는 데몬
    ㄱ. telnet : telnet서비스를 제공하는 데몬
    ㄴ. ftp  : ftp(file transper protocol)서비스를 제공하는 데몬
    ㄷ. finger : 시스템에 현재 누가 로그인하고 있는지를 알려주고 그 밖에도 여러가지 유용한
                정보를 얻을 수 있게 해주는 데몬
    ㄹ. login : rlogin과 같은 명령어를 사용하여 신뢰하는 호스트에서 접속시 로그인할 수 있도록
              해주는 데몬. 보안상 위험하니 사용하지 않는 것이 좋다.
    ㅁ. auth : IDENT 프로토콜을 지원하는 서비스이다. 리눅스의 ident 데몬으로 접속해 현재 누가
              접속했는지에 대한 정보를 알려주는 데몬이다.
    ㅂ. shell : rsh와 같은 명령어를 사용해서 원격의 호스트에서 접속시 조건없이 쉘명령어를 실행
               시키는 데몬이다.
    ㅅ. tcpd : 호스트에서 telnet서비스를 요청하면 TCP Wrapper에서 in.telnetd 를 작동시킨다. 이
              과정만 보면 telnet서비스만 할 뿐 호스트에 대한 정보를 남기지 않는다. tcpd의 역할
              은 in.telnetd가 구동되기 전에 telnet서비스 접속에 대한 기록을 파일에 적는 역할을
              한다. 즉, tcpd가 TCP Wrapper 프로세스이다.

3.데몬의 실행과 중지
(1) 단독으로 실행되는 데몬
   1) 설명: 단독으로 실행되는 데몬들은 /etc/rc.d/init.d 디렉토리에 스크립트 파일을 가지고 실행
           /중지시키면 된다. 또는 service라는 스크립트를 사용해도 된다.
   2) 사용예 : httpd데몬의 중단과 실행
    ㄱ. [root@www root]# /etc/rc.d/init.d/httpd stop
         => httpd 데몬을 중지시킨다.
    ㄴ. [root@www root]# /etc/rc.d/init.d/httpd start
         => httpd 데몬을 작동시킨다.
    ㄷ. [root@www root]# service httpd restart
         => service 명령을 이용하여 httpd 데몬을 재작동시킨다.
(2)슈퍼데몬 inet에서 관리하는 데몬
   1) inet에서 관리하는 전체를 중지 또는 실행시키는 방법
    ㄱ. 커널 2.2 버전
       /etc/rc.d/init.d/inet stop
       /etc/rc.d/init.d/inet start
    ㄴ. 커널 2.4 버전
       /etc/rc.d/init.d/xinetd stop
       /etc/rc.d/init.d/xinetd start
    ㄷ. 참고: 위의 방법으로 inet을 중단시키면 inet데몬에 관련된 모든 데몬들이 작동을 하지 않는
             다. 그러므로, 한가지 데몬만을 중단한 경우에는 적합하지 않다.
   2) inet(또는 xinetd)에서 관리하는 데몬중 일부만 중지시키기
    ㄱ. 커널 2.2 버전: inet데몬에서 일부만 중단하려면 /etc/inetd.conf 파일에서 한다. 해당 서비
                      스 항목의 맨 앞에 주석처리('#')를 하면 해당 서비스에 해당하는 데몬이
                      작동하지 않는다.
    예) telnet서비스 중단하기
       #telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
        => (항목설명)
          - 서비스이름: /etc/services파일에 정의된 텔넷, ftp와 같은 특정 서비스들을 의미
          - 소켓타입: 서비스에 의해 사용된 연결의 타입을 기술. 보통 tcp서비스인 경우에는
                     'stream', udp서비스인 경우에는 'dgram'이 옴
          - 프로토콜: 네트워크 프로토콜 타입이 기술된다. 보통 'tcp'나 'udp'가 옴.
          - 대기상태: 하나의 서버프로세스가 한번에 여러 요청을 처리할 수 있는지를 나타냄. wait
                     이면 inetd가 서비스들에 대한 각각의 요청을 처리하기 위해 여러 프로세스가
                     생성되는 것을 방지하고 nowait라고 설정되어 있으면 각각의 요청을 위해 프로
                     세스를 생성
          - 사용자이름: 네트워크 서비스를 수행해야 할 로그인 이름
          - 서버프로그램: 네트워크 서비스를 활성화시키기 위해 수행해야 할 프로그램을 가리킴
          - 서버프로그램인자: 네트워크 서비스가 수행되기 시작할 때, 전달 되어야 할 인자와 설정
                             플래그들을 나열
    ㄴ. 커널 2.4 버전: /etc/xinetd.d디렉토리에 보면 xinetd에서 관리하는 데몬들의 파일이 생성
                     되어 있다. 만약 telnet이면 telnet이라는 파일의 항목에서 'disable = yes'
                     라고 설정하면 해당 데몬은 xinetd에서 실행하지 않는다. 또는 'chkconfig
                     telnet off' 하면 된다.

(3) 데몬관련명령어: ntsysv
   1) 설명: 부팅시 자동실행되는 데몬들을 쉽게 설정하기 위해서는 'ntsysv'를 이용하면 된다. 그럼
          데몬들의 목록이 나오는데 스페이스키로 선택해주면 부팅시마다 자동으로 데몬이 작동한다.
          이 명령도 어렵다면 'setup'을 하면 X-window설정등 여러 메뉴가 나오는데 여기는 'System
          Service'를 선택하면 된다. 물론 이 명령도 루트권한자만 가능하다.
   2) 사용예
    ㄱ. ntsysv
         => 현재 레벨의 자동으로 시작하는 서비스데몬을 지정할 수 있다.
    ㄴ. ntsysv --level 5
         => 레벨 5의 자동으로 시작하는 서비스데몬을 지정할 수 있다.

4. 데몬의 확인
(1) 개요: 리스트로 나열하여 확인할 수 있고, 트리형태로 그래픽하게도 확인할 수 있다.
(2) 관련명령어
   1) ps
    ㄱ. 설명: 리스트로 나열하여 보여준다.
    ㄴ. 사용예
       ps -aux
   2) pstree
    ㄱ. 설명: 이 명령은 현재 가동중인 데몬들을 tree구조 형태로 나타내 준다.
    ㄴ. 사용예
       pstree

출처 : 대전국제IT교육센터 정성재 강사

 

1. Disk Quota
(1) 설명: 사용자들의 계정 용량을 제한할 경우에 사용한다. 그룹단위로도 용량을 제한할 수 있으며
          웹호스팅 서비스를 하는 경우에 유용하다. 보통 블록단위의 용량제한과 inode의 갯수를 제
          한한다.
(2) 관련명령어
   1) quotacheck
     ㄱ. 설명: 디스크를 사용하고 있는 파일 시스템을 체크하여 quota기록파일(quota.user 또는
              quota.group)을  가장 최근의 상태로 업데이트 시키는 명령이다.
     ㄴ. 사용법
        quotacheck [option] 디렉토리명
     ㄷ. option
        -a : 모든 그룹과 사용자에 대한 quota를 체크한다.
        -m : 읽기 전용 모드 등의 이유로 마운트를 하지 못할 경우 강제로 체크할 때 사용한다.
        -f : 쿼터파일 초기생성시 잘 인식하지 못하는 경우 강제로 인식시킬 때 사용한다.
     ㄹ. 사용예
       a. [root@www /root]# quotacheck /home
           => 주의할점은 이 명령을 수행할 경우에는 파일의 손상의 위험이 있으므로 quotaoff상태
             에서 해야한다.
       b [root@www /root]# quotacheck -m /home
           => 강제로 /home을 체크한다.
   2) edquota
     ㄱ. 설명: 사용자에게 쿼타를 할당할때 사용한다.
     ㄴ. 사용법
        edquota [option]
     ㄷ. option
        -t : soft limit를 초과한 후부터 적용되는 시간제한을 설정하는 옵션이다.
        -p : quota를 다른 사용자에게도 동일한 설정으로 적용한다.
        -g : 그룹의 quota를 설정한다.
     ㄹ. 사용예
        a. [root@www /root]# edquota posein
            => posein이라는 사용자의 쿼터를 할당한다. 그러면 기본편집기(vi)가 실행되면서
              다음과 같이 나온다.
            Disk quotas for user posein (uid 500):
              Filesystem            blocks       soft       hard     inodes     soft     hard
              /dev/hda8             259556          0          0        248        0        0
             => (설명)
               Filesystem : Quota가 설정되어 있는 파티션을 나타낸다.
               Blocks : 현재 사용중인 용량을 나타낸다.
               soft : 보통의 경우에는 사용할 수 있는 최대 용량을 나타낸다. 유예기간(grace
                     period)이 설정되어 있는 경우에는 사용용량 초과에 대한 경고를 받는 경계선
                     으로 사용된다.
               hard : 유예기간이 설정되어 있는 경우에 작동하는 것으로 사용자가 사용할 수 있는
                     최대 용량을 의미한다.
               inodes : 현재 사용중인 inode를 나타낸다.
        b. [root@www /home]# edquota -t
             => 실행시키면 vi편집기가 실행되면서 다음과 같이 나타난다. 여기서 날짜를 변경하면
              된다.
              Grace period before enforcing soft limits for users:
              Time units may be: days, hours, minutes, or seconds
                Filesystem             Block grace period     Inode grace period
                /dev/hda8                     7days                  7days
                 => (설명)
                   Filesystme : Quota가 설정된 파일시스템을 나타낸다.
                   Block grace period : Block의 soft제한을 초과했을 경우의 유예기간이다.
                   Inode grace period : Inode의 soft제한을 초과했을 경우의 유예기간이다.
        c. [root@www /home]# edquota -p posein prehee
             => prehee이라는 사용자의 설정을 posein의 설정과 동일하게 만든다.
   3) quotaon
     ㄱ. 설명: quota를 시작하기 위해 실행하는 명령이다.
     ㄴ. 사용법
        quotaon 디렉토리명
     ㄷ. 사용예
        [root@www /root]# quotaon /home
   4) quotooff
     ㄱ. 설명: quota를 종료시킨다.
     ㄴ. 사용법
        quota 디렉토리명
     ㄷ. 사용예
        [root@www /root]# quotaoff /home
   5) repquota
     ㄱ. 설명: quota의 설정 상황을 보여준다.
     ㄴ. 사용법
        repquota [option] 디렉토리명
     ㄷ. option
        -a : quota설정이 되어 있는 모든 파티션의 quota상태를 보여준다. 이 옵션을 사용하면 디렉
            토리명을 지정할 필요는 없다.
        -g : 그룹에 대한 quota상태를 보여준다.
        -u : 사용자에 대한 quota상태를 보여준다.(기본값으로 설정되어 있음)
        -v : 모든 quota상태를 보여준다.
     ㄹ. 사용예
        a. [root@www /home]# repquota /home
           *** Report for user quotas on device /dev/hda6 (/home)
           Block grace time: 7 days; Inode grace time: 7 days
                                   Block limits                File limits
           User            used    soft    hard  grace    used  soft  hard  grace
           ----------------------------------------------------------------------
           root      --   19372       0       0            231     0     0
           nobody    --      28       0       0              6     0     0
           posein    --   11608   50000   55000            398     0     0
        b. [root@www /home]# repquota -g /home
            => 그룹단위로 쿼타상태를 보여준다.
   6) quota
     ㄱ. 설명: 자신의 쿼타 용량 상태를 보여준다.
     ㄴ. 사용법
        quota
     ㄷ. 사용예
        [posein@www posein]$ quota
        Disk quotas for user posein(500):
             Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
              /dev/hda6   11608   50000  55000             398       0      0
   7) convertquota
     ㄱ.설명: 쿼타설정과 관련된 quota.user, quota.group을 새로운 형태의 aquota.user, aquota.g
             roup파일 포맷으로 변경해준다. 레드햇 리눅스 2.4이상의 파일시스템에서 적용된다. 새
             로운 파일 포맷은 32bit uids/gids를 지원하며, root권한으로 quota를 설정해야 하며,
             bytes단위로 사용공간을 체크한다.
     ㄴ. 사용법
         convertquota [option] 디렉토리명
     ㄷ. options
       a. -u : 사용자 쿼타파일(quota.user)을 바꾼다. 기본값이다.
       b. -g : 그룹의 쿼타파일(quota.group)을 바꾼다.
     ㄹ. 사용예
       a. [root@www /]# convertquota /home
            => 사용자 쿼타파일인 qutoa.user를 aquota.user 파일로 전환한다.
       b. [root@www /]# convertquota -g /home
            => 그룹 쿼타파일인 qutoa.group를 aquota.group파일로 전환한다.
(3) 설정하기
   1) /etc/fstab 설정
     ㄱ. 설명: 만약 설정하려는 파티션이 /home이라면 보통 다음과 같이 설정되어 있다.
              /dev/hda6               /home                 ext2    defaults        1 2
              여기서 네번째필드에 usrquota라고 설정한다.
     ㄴ. 예
        /dev/hda6               /home                 ext2    defaults,usrquota   1 2
     ㄷ. 참고: /etc/fstab파일을 변경했을 경우에는 시스템을 재부팅하거나 다시 마운트해야 한다.
              mount -o remount /home
   2) quota.user 파일 생성
     ㄱ. 설명: 사용자의 쿼타정보를 가지고 있는 파일이 quota.user인데 이 파일을 생성해야 한다.
              보통 설치하고자 하는 파티션의 최상위에 만든다.
     ㄴ. 예
        [root@www /root]# touch /home/quota.user
        [root@www /root]# chmod 600 /home/quota.user
          => /home에 쿼터를 설정하려면 /home디렉토리에 만들며, root권한자만이 읽고 쓰기가
            가능하도록 설정한다.
   3) quotacheck 디렉토리
     ㄱ. 설명: 설정된 값을 읽어들여서 반영한다.
     ㄴ. 예
        [root@www /root]# quotacheck -mf /home
   4) convertquota 명령으로 aquota.user로 변환하기
     ㄱ. 설명: 예전에 사용하던 quota.user파일을 최신의 aquota.user파일로 convert해야 한다.
              convertquota명령은 커널 2.4이상의 시스템에서 적용된다.
     ㄴ. 예
        [root@www home]# convertquota -u /home
   5) 사용자에 대한 쿼터설정
     ㄱ. 설명: 제한하려는 용량을 설정한다. 옆에 나온 단위를 참조하여 값만 입력한다.
     ㄴ. 예
        [root@www /root]# edquota posein
   6) quota를 시작한다.
     [root@www /root]# quotaon /home
(4) 테스트
   1) 쿼터확인
     [root@www home]# repquota /home
     *** Report for user quotas on device /dev/hda8
     Block grace time: 7days; Inode grace time: 7days
                             Block limits                File limits
     User            used    soft    hard  grace    used  soft  hard  grace
     ----------------------------------------------------------------------
     root      --      96       0       0              8     0     0
     nobody    --      32       0       0             10     0     0
     prehee    --      64    2000    3000             15     0     0
       => soft제한이 2M정도임을 알 수 있다.
   2) 용량을 초과한뒤의 쿼타확인
     [root@www home]# repquota  -a
     *** Report for user quotas on device /dev/hda8
     Block grace time: 7days; Inode grace time: 7days
                             Block limits                File limits
     User            used    soft    hard  grace    used  soft  hard  grace
     ----------------------------------------------------------------------
     root      --     112       0       0              9     0     0
     nobody    --      32       0       0             10     0     0
     prehee    +-    2916    2000    3000  6days      16     0     0
      => 앞쪽에 -- => +- 기호로 바뀌었다. 즉 Block limits의 soft한도가 넘었다는 뜻이다. grace
        에 6days라는 값이 표기되었다는 것은 6일동안은 soft한도를 넘어 사용을 해도 사용가능하다
        는 뜻이다. 하지만 6일 이후에는 soft한도내로 용량을 줄여야지만 새로운 데이터를 올릴 수
        있게 된다. 그러나 절대로 hard 한도는 넘을 수 없다. 이 한도를 넘게 되면 데이터를 저장할
        수 없다는 메시지가 출력된다.
(5) 그룹쿼타 설정하기
   1) /etc/fstab 설정
     ㄱ. 설명: 만약 설정하려는 파티션이 /home이라면 보통 다음과 같이 설정되어 있다.
              /dev/hda6               /home                 ext3    defaults        1 2
              여기서 네번째필드에 grpquota라고 설정한다.
     ㄴ. 예
        /dev/hda6               /home                 ext3    defaults,grpquota   1 2
     ㄷ. 참고: /etc/fstab파일을 변경했을 경우에는 시스템을 재부팅하거나 다시 마운트해야 한다.
              mount -o remount /home
   2) quota.group 파일 생성
     ㄱ. 설명: 그룹의 쿼타정보를 가지고 있는 파일이 quota.group인데 이 파일을 생성해야 한다.
              보통 설치하고자 하는 파티션의 최상위에 만든다.
     ㄴ. 예
        [root@www /root]# touch /home/quota.group
        [root@www /root]# chmod 600 /home/quota.group
          => /home에 쿼터를 설정하려면 /home디렉토리에 만들며, root권한자만이 읽고 쓰기가
            가능하도록 설정한다.
   3) quotacheck 디렉토리
     ㄱ. 설명: 설정된 값을 읽어들여서 반영한다.
     ㄴ. 예
        [root@www /root]# quotacheck -g -m /home
   4) convertquota 명령으로 aquota.group로 변환하기
     ㄱ. 설명: 예전에 사용하던 quota.group파일을 최신의 aquota.group파일로 convert해야 한다.
              convertquota명령은 커널 2.4이상의 시스템에서 적용된다.
     ㄴ. 예
        [root@www home]# convertquota -g /home
   5) 사용자에 대한 쿼터설정
     ㄱ. 설명: 제한하려는 용량을 설정한다. 옆에 나온 단위를 참조하여 값만 입력한다.
     ㄴ. 예
        [root@www /root]# edquota -g terran
   6) quota를 시작한다.
     [root@www /root]# quotaon /home
   7) quota의 확인
     [root@www /]# repquota -g /home


2. 스케줄링
(1) 개요: 스케줄링이란 특정한 시간에 특정한 작업을 행하게 하는 것이다. 보통 리눅스에는 cron
          과 at를 이용한다.
(2) at
   1) 설명: 지정한 시간에 원하는 명령을 실행될 수 있도록 해준다. atd데몬에 의하여 실행되고,
           지정한 작업은 큐(queue)에 저장되며 저장된 작업들은 /var/spool/at 디렉토리 아래
           파일로 저정된다. 보통 한번 실행되는 경우에 사용된다. 명령은 기본적으로 표준 입력
           장치를 통해받으며, 입력의 종료는 ctrl+d를 누른다.
   2) 사용법
     at [opion] 시간
   3) option
     -q queue : 작업의 대기 큐를 지정한다. 사용할 수 있는 큐는 a-z, A-Z까지이다. 지정하지
               않으면 기본큐로 a를 사용한다.
     -c job : 작업 리스트를 출력한다.
     -d : 작업을 삭제한다. (atrm과 같음)
     -l : 큐에 있는 작업들을 보여준다. root인 경우에는 모든 작업들의 목록을 보여준다.
         (atq와 같음)
     -m : 실행한 결과를 메일로 통보해 준다.
     시간 : 실행할 시간을 기록한다. 시간지정은 HHMM,HH:MM형태로 가능하고 am,pm으로 구분가능
           하다. 날짜의 경우는 MMDDYY, MM/DD/YY, MM.DD.YY형태로 나타낸다. 또한 now, tomorrow,
           noon같은 문자열도 사용가능하다.
     -f 파일명 : 표준입력이 아닌 지시된 파일에서 작업을 읽어온다.
   4) 사용예
     ㄱ. [posein@www posein]$ at 1:40am tomorrow
         warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
         at> ls -al > list.txt
         at>                                       // 중단하려면 여기에서 ctrl+d키를 누른다.
         job 3 at 2002-06-13 01:40
     ㄴ. [posein@www posein]$ at -l
         4       2002-06-12 01:48 a posein
           => 현재 예약된 작업의 리스트를 보여준다.
     ㄷ. [posein@www posein]$ at 7:00pm March 20
           => 3월20일 오후 7시에 작업을 예약한다
     ㄹ. [posein@www posein]$ at now+3hours
          => 3시간 후에 작업을 예약한다.
     ㅁ. [posein@www posein]$ at now + 5 minutes
          => 5분 뒤에 작업을 예약한다.
     ㅂ. [posein@www posein]$ at midnight + 10 minutes
          => 자정에서 10분뒤 즉, 00:10의 작업을 예약한다.
   5) 관련명령어
     ㄱ. atq
        a. 설명: 큐에 저장된 작업들을 보여주는 명령으로 at -l 실행결과와 같다. 작업번호와
                작업이 실행된 예정 시간, 작업이 저장되어 있는 큐를 보여준다.
        b. 사용법
          atq
        c. 사용예
          [posein@www posein]$ atq
          3       2002-06-12 01:40 a posein
     ㄴ. atrm
        a. 설명: 예약된 작업을 취소할 때 사용하는 명령으로 큐에서 해당 작업을 삭제한다. at -d
                를 사용하는 것과 같다.
        b. 사용법
          atrm 작업번호
        c. 사용예
          [posein@www posein]$ atrm 4
   6) at 사용자제한
     ㄱ. 설명: at데몬을 사용할 수 있는 사용자를 제한할 수 있다. /etc/at.allow파일과
              /etc/at.deny파일을 이용한다. /etc/at.allow파일에 등록하면 등록된 사용자만이
              사용가능하다. /etc/at.allow파일이 있다면 이 파일에 명단이 있는 사용자만이
              at명령을 사용할 수 있다. 이 파일이 없으면 /etc/at.deny파일을 찾는다. /etc/at.
              deny파일에 목록이 있는 사용자는 at를 사용할 수 없다. 두 파일 모두 찾지 못하면
              오로지 슈퍼 유저만이 사용가능하다. 또한 /etc/at.deny파일이 비어있으면 모든
              사용자가 at명령을 사용할 수 있다.
     ㄴ. 설정: 한 줄에 한 계정만 적는다.
        [root@www /root]# cat /etc/at.allow
        posein
        prehee
(3) cron
   1) 설명: 같은 작업을 주기적으로 반복할 수 있도록 해준다. 보통 /etc/rc.d/init.d/crond에
           의해 실행된다. 설정은 /usr/bin/crontab명령어를 사용한다.
   2) 관련명령어 및 파일
     ㄱ. crontab
        a. 설명: cron작업을 설정하는 명령어이다. 실행시키면 기본편집기인 vi가 실행된다.
        b. 사용법
          crontab [option] [파일명]
        c. option
          -l : 현재 crontab에 의해 설정된 내용을 출력한다.
          -e : crontab의 내용을 작성하거나 수정한다.
          -r : crontab의 내용을 삭제한다.
          -u : root권한자가 해당사용자의 crontab파일을 다룰때 사용한다.
        d. 사용예
          1. [root@www /root]# crontab -l
              no crontab for root
               => 작업의 목록을 보여준다.
          2. [posein@www posein]$ crontab -r
               => 등록된 작업을 삭제한다.
          3. [root@www /root]# crontab -e -u posein
              => posein이라는 사용자의 crontab을 작성하거나 수정한다.
          4. [posein@www posein]$ crontab aaa
              => aaa라는 파일을 crontab으로 사용한다. 이 경우에는 미리 aaa파일을 crontab의
                형식에 맞게 입력해놔야 한다.
        e. crontab의 작업형식 : 5개의 날짜 필드와 1개의 명령필드로 구성되어 있다.
          MM HH DD mm d command
          (설명)
            MM : 분(Minute)을 의미한다.(0~59까지 사용)
            HH : 시(Hour)를 의미한다.(0~23까지 사용)
            DD : 날짜(Day of Month)를 의미한다.(1~31까지 사용)
            mm : 달(Month)을 의미한다.(1~12까지 사용)
            d  : 요일(Day of Week)을 의미한다.(0~7까지 사용, 0과 7은 일요일을 나타냄)
            command : 실행할 작업을 명기한다.
          (참고)
            위 형식에서 시간을 나타내는 각 필드에서 와일드 카드 '*'를 사용할 수 있고 각각의
           요일을 구분할 때','를 사용하고, 연일을 나타낼 때는 '-'를 사용한다. 즉 월요일과
           수요일은 '1,3'으로 월요일부터 금요일까지는 '1-5'로 표시할 수 있다.
     ㄴ. /etc/crontab
        a. 설명: 시스템이 정기적인 작업이 수행될 수 있도록 기본적으로 설정되어 있는 파일이다.
        b. 설정예
          [root@www /etc]# cat /etc/crontab
          SHELL=/bin/bash
          PATH=/sbin:/bin:/usr/sbin:/usr/bin
          MAILTO=root
          HOME=/

          # run-parts
          01 * * * * root run-parts /etc/cron.hourly
          02 4 * * * root run-parts /etc/cron.daily
          22 4 * * 0 root run-parts /etc/cron.weekly
          42 4 1 * * root run-parts /etc/cron.monthly

          0-59/5 * * * * root /usr/bin/mrtg.sh /usr/lib/mrtg/mrtg.cfg
           => run-parts는 디렉토리 이하의 스크립트를 순차적으로 실행하는 명령어이다.
     ㄷ. /etc/cron.allow : at과 마찬가지로 사용자를 제한할 때 사용한다.
     ㄹ. /var/spool/cron 디렉토리 : 각각의 사용자가 등록한 crontab은 이 디렉토리아래에 각
                                   사용자의 계정이름으로 저장된다.
   3) 설정하기
     ㄱ. crontab -e 명령을 내린다.
     ㄴ. 해당형식에 맞게 입력한다.
        예) 0 12 * * 1-5 /home/posein/aaa
           => 월요일부터 금요일까지 /home/posein/aaa라는 스크립트를 실행시킨다.
     ㄷ. 설정예
        1) 0 12 1 1-12/2 * /home/posein/bbb
            => 1월부터 12월까지 2개월마다 /home/posein/bbb라는 스크립트를 실행시킨다.
        2) 0 10 * * 1 cat /root/notice | mail -s "Notice"
posein@mybestone.com
            => 월요일 오전 10시에 notice라는 문서의 내용을 메일로 발송한다. 

출처 : 대전국제IT교육센터 정성재 강사

 

1. 개요
인터넷이나 소규모 LAN을 이용한 네트워크를 통하여 리눅스를 설치할 수 있다. 이 경우 리눅스 설치
이미지가 있는 리눅스서버와 리눅스를 설치하는 클라이언트로 구분한다. 리눅스서버는 FTP, NFS서버
를 구축하여야 하며, 클라이언트가 접속할 수 있도록 설정해야 한다. 클라이언트에서는 네트워크
부팅 이미지로 만든 부팅디스크를 준비해야 한다.


2. 리눅스 네트워크서버 설정 -NFS 서버이용
(1) 서버에 설치를 위한 소스 복사
   1) 소스가 위치할 디렉토리 생성
     [root@www root]# mkdir /redhat80
   2) 생성한 디렉토리에 리눅스 설치파일을 복사한다. 보통 마운트하면 /mnt/cdrom/RedHat 디렉토리
     에 설치파일들이 들어있다. 여기에 있는 내용을 복사하면 된다.
     [root@www root]# mount -t iso9660 /dev/cdrom /mnt/cdrom
       => 물론 /etc/fstab에 의해 mount /mnt/cdrom 이라고만 해도 된다.
   3) 설치에 필요한 파일을 소스디렉토리에 복사한다.
     [root@www root]# cp -vr /mnt/cdrom/RedHat/ /redhat80
   4) 복사가 다 되었으면 마운트를 해제한다.
     [root@www root]# umount /mnt/cdrom
   5) 나머지 설치 CD-ROM도 위와 같은 방법으로 모두 복사한다.
(2) NFS서버로 구축하기
   1) /etc/exports 파일설정
    ㄱ. 기본설정법
       설치소스경로          클라이언트주소
    ㄴ. 설정예
       /redhat80      *
      => /redhat80 이라는 디렉토리에 모든 클라이언트의 접속을 허가하였다.
   2) NFS 서버를 작동한다.
    ㄱ. /etc/rc.d/init.d/portmap start    (보통 이 데몬은 기본적으로 작동한다.)
    ㄴ. /etc/rc.d/int.d/nfs start

3. 클라이언트 설정 - NFS 서버 이용
(1) 설치디스크 준비하기 : 여러 방법이 있지만 리눅스 서버에서 제작하는 것으로 한다.
   1) 레드햇 8.0의 1번 씨디를 준비해서 CD-ROM 드라이브에 넣는다.
   2) 마운트한다.
     mount -t iso9660 /dev/cdrom /mnt/cdrom
   3) 부팅에 필요한 이미지인 bootnet.img라는 파일이 있는 images디렉토리로 이동한다.
     cd /mnt/cdrom/images
   4) dd 명령으로 만든다.
     dd if=bootnet.img of=/dev/fd0
(2) 설치디스크로 부팅하여 설치한다.
   1) 부팅디스크를 넣고 부팅한다.
   2) 초기화면이 뜨고 'boot:'라는 프롬프트가 나오면 그냥 [Enter]키를 누른다.
   3) 사용할 언어를 선택한다.(기본 English 선택)
   4) 키보드를 선택한다.(기본 us 선택)
   5) 인스톨 방법을 선택한다. NFS image, FTP, HTTP 방법이 있으며 이중에서 NFS image를 고른다.
   6) 네트워크 장치를 선택한다. eth0이나 eth1 등 맞는 것을 선택한다.
   7) TCP/IP 네트워크 설정을 한다. 해당 IP, Netmask, Gateway값등을 설정한다.
   8) NFS 서버를 설정한다.
    ㄱ. NFS server name : 서버네임이나 IP주소를 적는다.
    ㄴ. Rea Hat directory : 설치소스의 경로를 적는다. 위의 예제대로 한다면 /redhat80 이라고
                           입력한다.
   9) 설치를 시작한다.

우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
Tips! (1)
OpenSource (1)
«   2018/01   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
  1. 2012/12 (2)
  2. 2012/04 (3)
  3. 2012/03 (6)
  4. 2012/02 (6)
  5. 2012/01 (2)