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

[ 시스템 설정을 위한 내용 ]

설치된 CentOS Server  : CentOS 6.5

설치된 Main Disk : S-ATA3 300GB

설치된 Storage : HP P2000 G3 FC

설치된 Storage 정보 : 12TB (Raid 5 구성, Usable=10TB)

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

 

리눅스를 사용하면서 디스크를 큰 용량을 사용하게 되는 경우가 있습니다. 스토리지를 이용하거나 NAS 를 사용하는 경우에

발생할 수 있을 것 같은데요... 기본적인 Disk 파티션으로는 MSDOS 형태를 띄기때문에 아래와 같이 2개의 문제점이 발생합니다.

 

a. 하나의 파티션에서 인식되는 용량한계 : 2Tb

b. 하나의 디스크 총 용량 인식한계 : 4Tb

 

위 같은 문제를 해결하기 위해 적용하는 것이 GPT 파티션을 적용하는 것입니다.

아래의 내용을 따라 Linux 에서 GPT 파티션을 사용해봅니다.

 

[ GPT Partition 사용가능 여부 체크 ]
]# cat /boot/config-2.6.32-431.el6.x86_64 | grep EFI

CONFIG_EFI=y
CONFIG_FB_EFI=y
CONFIG_EFI_VARS=y
CONFIG_EFI_PARTITION=y

위 내용들이 모두 "y" 값을 가지고 있어야 시스템에서 GPT 파티션을 지원하는 것입니다.


 

[ GPT Partition 생성 ]
파티션을 구성하는 가장 대표적인 명령어는 "fdisk" 라는 것은 리눅서!!! 라면 누구나 알고 계시겠지요?

다만, fdisk 를 이용하면 msdos 파티션을 인식하기 때문에 GNU 에서는 "parted" 라는 도구를 권하고 있습니다.

우선 parted 명령의 내용부터 알고 이어서 진행하겠습니다.

 - parted -

1. 정의 : 디스크의 파티셔닝 및 파티션 크기를 조절

 

2. 형식

# parted [Option] [Device]

 

- Option -

* h : help - 도움말 출력

* l : list - 리스트 형태로 정보를 출력

* s : 프롬프트를 출력시키지 않고 실행

* m : ":" 내용을 각 정보마다 출력시켜주어 파싱이 될 수 있음

 

위 처럼 parted 명령어를 이용하여 GPT 파티션을 적용해보자.

현재 제 시스템의 디스크 정보는 300Gb(/dev/sdb), 10Tb(/dev/sda) 이므로 이 정보를 가지고 진행합니다.

 

]# parted                       

============================================================= parted Tool Prompt =======

 

 

(parted) help                       //어떤 내용을 써야하는지 알기 위해 도움말 출력

============================================================= parted Tool help =======

※ 꼭 알아두어야 하는 부분은 표시해드린 부분입니다.

 


(parted) print                  //디스크의 정보 확인(오류 발생 방지)
============================================================= parted Tool Print Info ===

 

Number        : 생성된 파티션의 번호 (/dev/sda?? 형태로 적용됨)

Start, End    : 파티션의 시작과 종료 지점 (용량 형태로 출력)

Size             : 파티션의 크기

File system  : mkfs 또는 mkpartfs 명령어를 이용했을 경우 출력되는 파일시스템 타입

     (fat16, fat32, ext2, linux-swap, reiserfs 등이 올 수 있음.)

Flags           : 파티션의 상태정보를 출력

     (boot, root, swap, hidden, raid, lvm, lba, palo 등이 올 수 있음.)

 


(parted) mklabel gpt        //디스크의 파티션 정보를 GPT로 변경
============================================================= parted Tool mklabel Info ===

Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost.
Do you want to continue?

Yes/No? yes


Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).
As a result, it may not reflect all of your changes until after reboot.

 

(parted) print   //변경된 GPT 파티션 정보 확인
============================================================= parted Tool Print Info ===

 

 

(parted) mkpart primary 0Gb 2048Gb  //파티션 작업을 위해 2개 파티션 생성
(parted) mkpart primary 2048Gb 4096Gb
 * Syntax : mkpart [diskType] [StartPoint] [EndPoint]

 

 

(parted) print   //파티션 정보를 확인
============================================================= parted Tool Print Info ===

 

 


(parted) quit   // parted Tool 종료
########################################################################################


]# fdisk -l /dev/sda
============================================================= fdisk Tool List Info =====

 

 

 

################################### File system 생성 ###################################

※parted 부분에서 print 를 이용하여 출력된 Number는 디바이스 명칭 및 파티션 번호로 사용됨.
   즉, 아래의 표 형태로 출력된다고 보시면 됩니다.

 

parted Tool

Partition 

Number 1

/dev/sda1

Number 2

/dev/sda2 

 

 

 

################################### 추가사항 ###################################

[ GPT Partition으로 LVM 구성 ]

리눅스를 사용하면서 데이터 백업이나 관리를 용이하게 하기위해 Volume 이라는 것을 구성하는 방법이

존재합니다. 볼륨구성에 대한 부분은 따로 게시글을 이용하여 설명 드리도록 하겠습니다.

추가내용의 경우는 GPT Partition 으로 생성한 부분을 LVM 으로 구성하기 위한 방법입니다.

어렵지 않으니 아래의 글을 참조하시기 바랍니다.

우선적으로 GPT Partition 은 생성 및 설정되어 있는 상태로 진행해야 하는 것을 기억해주세요.

 

 

(parted) print   //파티션 정보를 확인
============================================================= parted Tool Print Info ===

 

 

 

(parted) set 1 lvm on  // lvm 을 사용하려면 옵션을 on 상태로 Flags 정보를 변경해야함.
 * Syntax : #set [Number] lvm [status]


(parted) print
============================================================= parted Tool Print Info ===

  ※ "Flages" 항목에서 'lvm' 으로 내용이 추가됨을 확인할 수 있습니다.

 

(parted) quit   // parted Tool 종료

 

모든 내용이 적용되었으면, 파티션으로 인식하는 부분과 LVM 구성에 필요한 단계를 모두 완료되었으므로

해당내요을 이용하여 LVM 을 구성하시면 됩니다.

AND

[ 변수의 종류 ]
1. 지역변수

 

- 현재 자신의 쉘에서만 사용가능한 변수(#alias 유사)
     (변수 선언시 "소문자"로 선언)

2. 환경변수

- 현재 자신의 쉘 + 파생된 쉘 모두 사용가능한 변수(.bashrc / alias 유사)

- 시스템 전체 어떤 프롬프트에서도 사용할 수 있는 장점이 존재
     (변수 선언시 "대문자"로 선언)

 

 

[ 변수 활용하기 ]
1. 변수 선언
    - 지역변수로 선언 : #변수명=변수값

                          (ex : #a=ls)

    - 환경변수로 선언 : #export 변수명=변수값

                          (ex : #export B=ifconfig)


2. 변수 출력
    - $변수명 형태로 사용

 ex) #echo $a   : a 변수의 내용을 화면으로 출력
       #$B          : B 변수의 내용을 프롬프트로 출력(실행)

 

3. 변수 해제

- #unset 변수명

 

4. 종합 활용예제
  a. 지역변수 선언해보기
  - #a=ls
  - #echo $a
  - #$a (ls 명령어가 실행됨)


  b. 환경변수 선언해보기
  - #export AA='ls -al'
  - #echo $AA
  - #$AA
  - #env | grep AA


  c. PATH 값에 내용추가하기
  - #env | grep PATH   : PATH 내용 확인
  - #export PATH=$PATH:/etc/rc.d/init.d   : 정상 추가
  - #export PATH=/etc/rc.d/init.d             : 빠욤

 

AND

현재 CentOS 기준으로 6.5 가 최신버전인데.. 6.3 인지.. 6.2 부터인지 모르지만

시스템이 On 상태에서 SCSI Device 를 장착해도 자동인식이 동작되지 않고 있다.

 

그래서 HDD 추가 후 장치 인식을 위해 재부팅을 해주는 번거로움이 있었지만

아래의 방법을 따라 진행해보자.. 신세계를 경험하게 될 수 있다~!!

 

 

[ 방법 1 ]

패키지를 하나 설치하여 도구를 이용해보자.

* 패키지 : sg3-utils.~~~~~.rpm

* CMD : rescan-scsi-bus.sh

* 경로 : /usr/bin/rescan-scsi-bus.sh

 

위 패키지를 설치 후 명령어를 이용하여 실행하면 SCSI Bus 를 다시 스캔하는 작업으로

변경된 장치의 인식이 가능해진다. 물론 환경변수인 PATH 값에 "/usr/bin" 경로를 찾을 수

있도록 설정했다면 프롬프트상에서 바로 입력하는 것이 가능하다.

 

※ 위 패키지는 리눅스 설치시디에 내장되어 있기 때문에 설치하기가 수월합니다.

 

 

[ 방법 2 ]

오프라인(IP통신 포함)이나 패키지를 설치할 수 없는 환경에서 리다이렉션을 이용해보자.

 

  - 형식 : # echo "c t l" > /sys/class/scsi_host/HostNumber/scan

◆ c : Channel on the Host Bus Adapter

◆ t : SCSI Target ID

◆ l : Logical Unit Number

◆ hostnumber : 0 ~ 3 까지의 값을 가지며 SCSI Contoler 값이다. (host0, host1, host2, host3)

 

  - 적용 : # echo "- - -" > /sys/class/scsi_host/host0/scan

 

위 처럼 적용한 사항은 첫번째 SCSI 컨트롤러(host0)에 장착된 Device 에 대해 항상 스캔("- - -")을

하도록 설정하지만, RedHat 에서는 무한 루프 상태가 될 수 있으므로 권장하지 않는다.

AND

httpd.conf 파일은 Apache Web Server 설정에 필요한 파일이다.

rpm 을 이용하여 설치하였다면 아래의 경로에 파일이 있으므로 참고하길 바란다.

* 설정파일 : /etc/httpd/conf/httpd.conf

 

지금부터 httpd.conf 파일을 해부해보자. 해당 파일은 크게 세가지 형태로 세분화할 수 있다.

* Global Environment : 아파치 웹서버 전반적인 설정

Main-Server configuration : 아파치 웹서버의 주 서버에 대한 설정

Virtual Hosts : 아파치 웹서버로 구동하는 가상 호스트에 대한 설정

 

 

### Global Environment ###

※  전반적인 설정에 대한 부분으로 아파치 웹서버에서 동작하는 모든 부분에 영향을 준다.

 

* ServerType : standalone

- 서버(데몬)의 구동방법으로는 "standalone"과 "inetd" 방식이 있는데,  standalone 방식으로 동작하도록 설정

 

* ServerTokens : OS

- 추가예정


* ServerRoot : "/etc/httpd"

- 아파치 웹서버의 설치 경로를 나타낸다. 단, 절대경로로 지정한다.

  아래쪽으로 설정하는 항목의 대부분 패스들은 이 경로에 대한 상대경로로 지정이 된다. 


* PidFile : run/httpd.pid

- ServerType이 Standalone 일 경우만 유효하다. 아파치 서버의 프로세스ID 가 기록될 파일을 지정,
ServerRoot 를 기준으로 상대경로로 지정도 가능하며, "/"로 시작하는 절대경로도 지정 가능
 


* Timeout : 60

- 클라이언트와 서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을 설정. (단위:초)
  네트웍의 속도가 나쁠수록 수치 값은 높게 설정하는 것이 좋다.

 

* KeepAlive : Off

- 접속한 채로 요청이 없어도 연결을 지속시킬 것인지 여부 설정. 허용하지 않는 것이 좋다.

 

* MaxKeepAliveRequests : 100

- 클라이언트가 접속된 시간동안 아파치서버에 요청할 수 있는 최대의 개수를 지정. '0'은 제한없음. 

 

* KeepAliveTimeout : 15

- 클라이언트가 접속을 유지한 상태로 아무 요청이 없을 경우 접속을 끊어줄 시간을 지정. (단위:초)

 

* Listen : 80
* Listen : 12.34.56.78:80

시스템의 기본값(local_IP, #80)이외에 다른 IP Address와 포트에 대해서도 연결할 수 있게 설정

- "httpd.conf" 파일 맨 뒤의 가상호스트(Virtual Host)를 설정하기 위해 필요

 

* Include : conf.d/*.conf

- httpd 가 동작될 때 참조할 설정파일의 위치를 정의한다.

- 현재 설정은 /etc/httpd/conf.d/ 경로안의 모든 conf 파일을 포함하여 실행되도록 설정되어 있으며

  가능한 변경하지 않도록 한다.

 

* ExtendedStatus : On

- "server-status" 로 아파치 웹 서버의 상태를 모니터링 할 때 "자세히 정보보기" 기능을

   제공할 것인지 설정(제공:on)

 

* User : apache
* Group : apache

아파치 웹 서버 데몬이 요청을 받았을 때 반환할 user와 group 을 설정
- Server Daemon 이 Standalone Type 방식으로 동작되고, 아파치의 실행이 root 권한으로 동작한 경우 유효하다.

 

 

### Main-Server configuration ###

아파치 웹서버의 주 서버가 사용할 값들을 지정한다.

<VirtualHost> 로 지정한 값이 아니면 모두 여기서 지정된 값이 기본값으로 적용된다.

 

* ServerAdmin : root@localhost

웹 페이지를 로딩시 에러가 출력될 경우 에러페이지내 출력될 관리자 정보(브라우저에 출력될 정보 입력)

- 대부분 해당 웹서버의 관리자 E-mail 주소를 입력하여 사용

 

* ServerName : localhost

클라이언트 브라우저의 주소창에 보여지는 호스트 이름을 지정

- 도메인도 가능하고 IP Address 도 가능하다.

- www를 쓰지않는 호스트에서 www를 쓰는 것처럼 보이게 할 수 있다.

  ex) test.net2free.net(DNS 주소) 을 www.net2free.net(web주소) 으로 지정해서 쓰는 것과 같다고 볼 수 있다.

 

* DocumentRoot : "/var/www/html"

아파치 웹 서버의 웹문서가 있는 기본 경로를 지정

- 디렉터리명을 지정하는 것이므로, 경로의 가장 마지막에 "/"를 입력하지 않도록 한다.

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>      
                

- Directory 에서 사용할 옵션들을 지정한 부분게 되며, 아래의 옵션들을 더 사용가능하다.

[ None, All, Indexes, Includes, FollowSymlinks, ExeCGI, MultiViews ]


* UserDir : public_html

하나의 웹 서버에서 여러 사용자들의 홈페이지를 각각 관리할 경우 사용자들의 홈페이지 디렉토리 경로를 지정

- ex) bluetails 란 사용자의 홈페이지를 "http://www.net2free.net/~bluetails" 라고 가정했을때 그 페이지의

        리눅스 경로는 "~bluetails/public_html/" 경로가 기본 경로로 사용되게 된다.

 

<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>
    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY
MOVE LOCK UNLOCK>
        Order deny,allow
        Deny from all
    </Limit>
</Directory>

- 여러 사용자의 홈페이지 기본경로(public_html)의 권한 대한 옵션을 지정


* DirectoryIndex : index.html index.html.var

- 설정 파일내 여러 항목들 중 디렉터리만을 지정하여 사용하는 부분이 참조할 기본 출력 파일을 정의

- 다수를 지정하고 싶을때는 띄어쓰기로 구분하며 순서대로 탐색을 하게 된다.(index.html index.php index.htm 등)

  ex)- Browser -> http://www.net2free.net:9702

- Server 에서는 "DocumentRoot/DirectoryIndex" 형태로 출력시킬 파일을 찾아가게 된다.

 

* TypesConfig : /etc/mime.types

- 웹서버의 mime type을 설정한 파일을 지정

- mime.types 파일은 서버에 의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

 

* DefaultType : text/plain

- mime.types 파일에 정의 되어있지 않은 파일 형식으로 요청을 받는 경우, 즉 알 수 없는 문서타입에

   대한 기본적인 응답 mime 타입을 지정


* HostnameLookups : Off

웹 서버의 로그(access_log)를 지정하는 Format 에서 "DNS Lookup"으로 지정하였을 때,

   domain 또는 IP Address로 남길 것인지 지정

- Default 설정은 IP Address로 남기게 되고, Domain 으로 설정(On)한 경우보다 속도가 조금 빠르다.

 

* ErrorLog : logs/error_log

- 아파치 웹서버의 에러로그 기록파일의 경로를 지정

<VirtualHost>부분에서 Log 관련 항목을 설정하지 않는 경우는 위 설정된 경로로 로그가 기록되게 된다.

 

* LogLevel : warn

- 로그를 기록할 때 그 파일내 기록할 내용의 중요도를 설정

중요도는 " debug → info → notice → warn → error → crit → alert → emerg " 가 존재

- 중요도가 낮으면 기록량이 많아지는 단점이 있으므로 서버의 역할에 잘 맞추어 설정하도록 한다.

 

* CustomLog : logs/access_log common

- 임의의 로그 포맷을 지정하여 로그파일에 기록하기 위해 설정

- 형식은 [경로(파일명까지 입력)] [선언명]

- 아파치 1.3.9 이상 버전은 CustomLog 를 <VirtualHost>에서도 사용할 수 있게 제공한다.

=> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

- 커스텀 로그로 사용될 형식을 지정하는 방법이다.

- 형식은 [ "기록형태" 선언명 ] 으로 지정

- 관리자는 원하는 정보를 지정해서 보기 위해 적당한 Format으로 여러개를 설정해두는 것을 추천한다.

 

* ServerSignature : On

- 서버가 생성하는 문서trailing footer line의 설정을 가능하게 한다.

- 문서의 형식은 "error documents", "FTP directory listings", "mod_status and mod_info output etc.",

  "but not CGI generated documents" 등이 있음.

 

* Alias : /icons/ "/usr/local/apache/icons/"

- 이벤트용 페이지나 관리자 전용 페이지를 만드는 등 필요한 경우에 별칭을 주도록 제공한 항목

- 형식은 [ 별명 "리눅스 경로" ] 로 작성한다.

- 단, Alias 의 경우는 파일과 디렉터리 모두 지정이 가능하므로 "/" 기호에 대한 부분은 주의가 필요하다.

 

* ScriptAlias : /cgi-bin/ "/usr/local/apache/cgi-bin/"

- ScriptAlias는 Alias 와 근본적으로 같은 내용으로 형식도 동일하다.

- ScriptAlias는 지정한 리눅스 경로 안에 있는 파일을 서버가 실행되도록 설정하기 때문에 디렉터리만 지정하도록 권장


* IndexOptions : FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

- IndexOPtions는 웹 페이지상에서 디렉토리 목록을 출력할 때의 옵션을 지정

- Standard(볼품없는 기본 텍스트 형태), FancyIndexing(아이콘화 하여 아주 조금 더 예쁜 형태) 형식이 있다.

- 웹서버의 버전, 디렉터리명의 길이 무제한, HTML 형식의 테이블 출력, 문자인코딩(UTF-8) 형식으로 기본 지정됨.

 

- 아래의 내용은 IndexOptions 항목에서 "FancyIndexing" 의 경우 디렉토리 목록을 표시할 때

  출력시킬 아이콘 및 문구를 지정하는 항목이다.

=> AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

- 내용이 인코딩 타입인 경우 위처럼 나타낸다.

- 형식은 [ "AddIconByEncoding" / "(형식,출력 아이콘 경로)" / "형식" ]

    AddIconByType (TXT,/icons/text.gif) text/*

    ....

- 타입방식으로 선언시 위처럼 나타낸다.

- 형식은 [ "AddIconByType" / "(타입,출력 아이콘 경로)" / "형식" ]

     AddIcon /icons/binary.gif .bin .exe

    .... 

- 확장자 형태의 내용은 위처럼 나타낸다.

- 형식은 [ "AddIcon" / "출력 아이콘 경로" / "확장자" ]

=> DefaultIcon : /icons/unknown.gif

- "AddIcon..." 으로 지정한 항목이 아닌 경우 출력시킬 기본아이콘을 지정

=> AddDescription "GZIP compressed document" .gz
    ....

- AddDescription은 서버가 생성한 인덱스의 파일 뒤에 간단한 설명을 표시할 때 사용.

형식은 [ "AddDescription" / "표시할 설명" / "확장자" ]

 

* ReadmeName : README.html

- 디렉토리 목록표시 가장 하단에 보여줄 설명파일의 이름을 지정.(꼬리말과 유사)

 

* HeaderName : HEADER.html

- 디렉토리 목록표시 가장 상단에 보여줄 설명파일의 이름을 지정.(머리말과 유사)

 

* IndexIgnore : .??* *~ *# HEADER* README* RCS CVS *,v *,t

- 디렉토리 목록을 인덱싱할 때 제외할 파일명을 지정. (디렉터리 목록에 제외될 대상)

쉘 환경의 와일드카드(*, ?)가 허용.

 

* LanguagePriority : en ca cs da de .....

- 언어의 우선순위를 내림차순으로 지정한다. (AddLanguage 의 형식 명칭 참조)

=> AddLanguage en .en
    .....

- AddLanguage 는 문서의 언어 형식을 지정.

- 형식은 [ "AddLanguage" / "형식명칭" / "확장자" ]

 

* Format: Action media/type /cgi-script/location

- Action 과 매칭되는 파일이 호출될때마다 스크립트를 실행시킬 수 있도록 설정

- 형식은 [ "Format: Action" / "매칭형식" / "연결스크립트" ]

 

* ErrorDocument

- 에러발생시 응답을 정의할 수 있는 방법을 정의한다. 3가지 기본 형태를 제공한다.

 

=> ErrorDocument 500 "The server made a boo boo.

- 일반적인 텍스트 형태로 출력

- 형식은 [ "ErrorDocument" / "에러코드번호" / "출력시킬 텍스트" ]

=> ErrorDocument 404 /missing.html

=> ErrorDocument 404 /cgi-bin/missing_handler.pl

- 또다른 페이지로의 연결 (지역적인 방향전환)

- 형식은 [ "ErrorDocument" / "에러코드번호" / "출력시킬 페이지 경로" ]

=> ErrorDocument 402 http://www.example.com/subscription_info.html

- 또다른 페이지로의 연결 (외부 방향전환)

- 형식은 [ "ErrorDocument" / "에러코드번호" / "외부로 출력시킬 페이지 경로" ]

 


### 가상호스트(VirtualHost) 설정 ###

하나의 Apche 웹서버에 여러개의 도메인이나 호스트네임을 설정하여 관리할 경우 설정.

 

Apche 웹서버 설정 파일내 "<VirtualHost> ~ </VirtualHost>" 부분에 정의하여 사용하고

가상호스트에서 설정한 내용은 주 서버 설정과는 별도로 인식되기 때문에 VirtualHost 부분에

설정한 내용이 적용받아 실행된다 볼 수 있다.

가상호스트에 대한 자세한 정보는 http://www.apache.org/docs/vhosts/ 를 참조하시기 바랍니다.

 

버추얼 호스팅에서는 두가지 방법이 존재한다.

ㄱ. 이름기반의 버추얼 호스팅

- 도메인을 사용하는 경우 하나의 도메인에 여러개의 호스트가 존재하는 형태로 출력되는 방법

- ex) www.net2free.net , blog.net2free.net -> 192.168.1.55

 

ㄴ. IP 기반의 버추얼 호스팅

- 하나의 웹서버가 두개의 아이피로 모두 연결이 가능하도록 설정하여 출력되는 방법

- ex) 192.168.1.55 , 192.168.1.150   -> www.net2free.net

 

위 2가지 방법 중 이름을 이용한 호스팅을 하기 위해서는 "NameVirtualHost" 가 정의 되어 있어야 가능하다.

또한 정의 IP 를 이용하여 선언하는 것을 추천한다.

 

* NameVirtualHost : *:80

* NameVirtualHost : 192.168.1.55

- 아래쪽에 선언하는 VirtaulHost 들의 name-base 역할을 할 서버를 지정.

- 형식은 [ "NameVirtualHost" / "IP:Port" ] 로 지정하고, 80번을 이용하는 경우는 Port 를 생략해도 무방.

 

* <VirtualHost www.net2free.net:80>

ServerAdmin webmaster@manualand.co.kr

DocumentRoot /home/sspark/public_html

ServerName www.manualand.co.kr

ErrorLog /home/sspark/public_html/aw/error_log

CustomLog /home/sspark/public_html/aw/access_log common

   </VirtualHost>

 

=> <VirtualHost ServerInfo:Port>

- ServerInfo 부분은 도메인 또는 IP 를 이용하여 설정하고, Port 부분은 자신이 원하는 0~65535 중 설정한다.

   (Port 는 방화벽 해제가 필수이다.)

- 현재 설정하는 VirtualHost 에만 적용되는 사항들로 설정하게 된다.

=> ServerAdmin

=> DocumemtRoot
=> ServerName
=> ErrorLog
=> CustomLog

- 근본적인 내용은 Main 설정 부분에서 안내한 내용과 동일하다.

</VirtualHost>

 

 

//////////////////////////////////// 기타 적용 가능 사항 /////////////////////////////////////////

 

* LockFile : logs/accept.lock

- 아파치 컴파일시 USE_FCNTL_SERIALIZED_ACCEPT나 USE_FLOCK_SERIALIZED_ACCEPT으로 컴파일 했을 때

  사용되는 LockFile의 경로지정시에 사용한다. 기본값으로 가능한 사용.


* ResourceConfig : conf/srm.conf
* AccessConfig : conf/access.conf

- 아파치 웹 서버의 환경설정 파일은 'httpd.conf' , 'srm.conf' , 'access.conf' 로 사용하는데 관리의 용이성을 위해

  'httpd.conf' 내 위 항목으로 각 내용을 정의하여 사용한다.

- 3개의 파일 로딩 순서는 "httpd.conf > srm.conf > access.conf" 로 실행된다.

 

* MinSpareServers : 10
* MaxSpareServers : 20

- 성능향상과 빠른 응답속도를 위해 생성하는 유휴서버(서비스대기 중인 프로세스)의 개수를 설정하는 항목
- 유휴서버가 MinSpareServers의 개수(10) 보다 적으면 추가로 생성, MaxSpareServers의 개수(20)보다 많으면 세션만료


* StartServers : 5  

- httpd 가 시작될 때 자식 프로세스의 갯 수를 설정. 시작시 동시에 띄우게 될 웹 데몬의 갯 수라 보면 된다.

- 데몬 동작 후 시스템의 상황에 따라 동적으로 변동되므로 큰 의미는 없다.

 

* MaxClients : 150

- 접근할 수 있는 클라이언트의 최대 갯 수 설정항목.

지정한 개수이상 클라이언트의 요청 발생시 아파치는 응답하지 않고 이 요청을 무시한다.(시스템의 자원 낭비 방지)

 

* MaxRequestsPerChild : 30

- 아파치 웹서버의 자식프로세스들에 대한 클라이언트의 요청 개수를 지정

- 만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 해당 자식프로세스는 자동으로 죽게되고,

  이 값을 0으로 설정하면 무제한으로 설정이 되므로 적절히 조절할 것.

 

* BindAddress : *  

- 서버가 응답할 수 있는 IP Address를 설정

- 하나의 시스템에 있는 아파치 웹 서버 하나로 여러 웹 서버처럼 관리하는 웹 호스팅 서비스등에서 많이 이용.

- "*" 은 "모든  IP Address" 에 대해 응답, IP Address를 지정한다면 지정한 IP Address에 대해서만 응답

웹 호스팅 서비스를 하고자 한다면 여러개의 IP Address를 ISP로부터 할당받아 지정해 주면된다.

- "httpd.conf" 파일의 'VirtualHost' 부분에서 IP 기반 버추얼 호스팅을 하기 위해서 필수 설정 사항이다.

 

* Port : 80

- 아파치 웹 서버의 기본포트를 지정(특별한 경우가 아니면 기본 포트인 80 을 적용)

사용가능한 포트는 0 ~ 65535이며 1024이하의 포트 번호는 Well Known Port 라고 해서 시스템에서 예약되어

   root 만 Listen 상태로 만들 수 있게 설정되어 있다. 그래서 1024 이상의 포트 번호를 지정해서 사용할 것.
-
Port 를 9702 로 지정했다면, 웹 브라우저로 접근시 [ http://www.net2free.net:9702 ] 형태로 접속해야한다.

- 단, 80번은 default이므로 Port 번호를 생략할 수 있다.

 

 

위 기재된 모든 내용은 httpd.conf 파일내 모든 내용을 담고 있지는 않습니다. 추가로 궁금한 내용이 있거나 꼭 알아야 할 항목들이 있다면

위키피디아를 참조하시거나 문의를 남겨주세요^^

AND

[ Grub 라고 불리는 BootLoader 를 활용하는 방법을 배워보자!! ]


* 설정파일

  - /boot/grub/grub.conf (링크파일 : /etc/grub.conf)


* 옵션

  - timeout = 부팅시간(초단위)

    ( ex. timeout=10 )


  - default <엔트리번호> = 기본값으로 부팅될 순서

    ( ex. default 0 )


  - fallback <엔트리번호> = 부팅실패시, 차순위 부팅순서

    ( ex. fallback 1 )


  - title <부팅제목>

    ( ex. title Redhat 9 )


  - root (<하드디스크장치,파티션>)

    ( ex. root (hd0,0)


  - kernel /vmlinuz-<버전> ro root=/dev/<장치명>

    ( ex. kernel /vmlinux-2.4.20 ro root=/dev/hda2 )


  - initrd <이미지파일명> = 시스템 초기화용 램디스크 이미지 파일



※ Windows 설치후 GRUB가 없어졌을 경우 Grub 재설치하기

  1. 리눅스 설치시디 1번으로 부팅

  2. "boot : " 부분에서 아래의 내용을 입력한다.

      - vmlinuz root=/dev/sda7           // 루트파티션을 지정해주어야 함

  3. #grub-install /dev/sda               // 리눅스가 설치된 디스크에 grub 부트로더를 다시 설치

 


※ Windows 와 멀티부팅 설정하기

  - /boot/grub/grub.conf에 아래형식을 추가하여 멀티부팅 설정

     title <타이틀명>

          rootnoverify (<장치명,파티션>)

          makeactive

          chainloader +1


AND

[ 시스템 설정을 위한 내용 ]
설치된 CentOS 버전 : CentOS 5.8
설치된 VMware 버전 : VM workstation 8.0.1

 

 

Single Booting 이란?

- 정의 : Disk 의 MBR내 존재하는 부트로더(Grub)를 이용하여 RunLevel 1 상태(싱글유저모드)로 부팅하는 것.


- 목적 : 시스템 긴급 오류 수정 및 시스템 관리자 (root)의 계정 비밀번호를 초기화하기 위해 진행.

Single Booting 방법

ㄱ. 터미널 대화창에서 리부팅 : #reboot 입력

ㄴ. 리부팅 시 나타나는 카운트다운 중 아무키나  누른다. (부트로더 메뉴로 진입을 위해)

 


ㄷ. CentOS(2.6.18-308.1.1.el5) 위에서 'e'를 누른다. (최신버전의 커널 로딩 메뉴를 선택)

 


ㄹ. kernel 설정을 로드하는 부분에서 'e'를 누른 후 편집화면으로 이동한다. 

 


ㅁ. 'LABEL=/' 뒤에 한칸 띄어쓰기 후 'single' 또는 '1' 을 입력 (다른 내용이 있는 경우 삭제하고 입력)하고 enter로 저장
 

 


ㅂ. 수정한 내용에 커서를 옮겨두고 'b'를 눌러 부팅한다. 


ㅅ. sh-3.2#passwd : 부팅이 되고 나면 강제로 쉘 프롬프트가 "#" 상태가 되어져서 관리자(root) 비밀번호를 변경 가능
     (강제로 root 계정만 있는 상태로 부팅한 것이므로 여러가지 조작이 가능해짐 - 보안 취약)
-> 시스템 관리자의 비밀번호를 변경(초기화)
 


ㅇ. 모든 내용이 완료되면 #reboot 또는 #init 5 




- 보안 설정 : Grub BootLoader 에 암호를 걸어 부트로더 편집을 허가된 사용자에게만 허용
=> Single Booting 을 하면 강제로 "#" 프롬프트가 되므로 시스템 설정(root 비번 변경 등)을 쉽게 변경이 가능하여,
허가된 사용자만 가능하도록 설정하기 위한 보안 설정 (grub.conf 를 이용하여 설정)

 

가. #grub : 터미널 대화창에서 'grub'를 입력 

 

나. grub>md5crypt : md5형식으로 암호화를 위한 비밀번호 설정
다. password : 설정하기 위한 비밀번호를 입력(입력 내용이 "*" 형태로 출력됨)

라. 하단에 출력되는 암호화 코드를 확인 

 

마. 또 다른 터미널 창을 실행한 후 'vi /boot/grub/grub.conf' 입력

 

바. 'default...' 항목에 커서를 위치시킨 후 'O'키를 한 번 누른 후 'password n00$e'을 입력 후 저장종료 

 

사. #reboot
=> 정상적으로 비밀번호가 설정되지만 암호화되지 않아 노출 위험이 있다.

아. Single Booting 이 아닌 그냥 일반 부팅 후 다시 grub 를 진행하여 수정함. (가. ∽ 마. 항목까지 진행)
자. 'password n00$e' 항목 줄에 커서를 위치시킨 후 'dd'로 삭제 후 'password MD5코드값' 가 되도록 입력 후 저장종료

차. #reboot
=> 비밀번호를 입력해도 정상적으로 설정되지 않은 오류가 발생한다. (비밀번호가 달라 Grub 진입불가)

카. Single Booting 이 아닌 그냥 일반 부팅 후 다시 grub 를 진행하여 수정함. (가. ∽ 마. 항목까지 진행)
타. 'password MD5코드값' 항목 줄에 커서를 위치시킨 후 'dd'로 삭제 후 "라"항목에서 확인한 해쉬값을
입력하여 최종적으로 확인시 "password --md5 MD5코드값" 형태가 되도록 설정하고 저장종료 

 

파. #reboot
=> Single Booting 보안 설정이 정상적으로 적용됨을 확인

** Single Booting 보안설정이 되어 있는 경우
"root"의 비밀번호와 "grub" 설정 비밀번호 두가지를 모두 잃어버리는 경우

시스템을 새롭게 설치하거나 Rescue 를 진행하여야 하는 안타까움이 있습니다.

그러므로 보안 설정을 하는 것도 중요하지만 그 만큼 "왜 이러한 보안설정을 하는지?", "보안 설정을 하는 방법",
"운영 관리"가
중요하다는 부분도 꼭 유의해서 기억하시기 바랍니다^^


AND


VNC라는 원격 접속 프로그램보다 빠른 속도를 보여주고 있습니다!

원격 접속프로그램인 putty 나 secureCRT 와는 다른 원격프로그램입니다.

본 프로그램은 터미널 접속이 아닌 리눅스의 X-window 에 원격 접속이

가능하게 해줍니다!

일단!

홈페이지 : http://www.nomachine.com/

접속후 Download 탭 클릭!



다음으로 NX Free Edition for Linux 클릭!



다음으론 현재 사용하고 있는 리눅스 버전을 찾아 항목을 클릭!



다음 항목에서
Download client, Download node, Download server
세가지 항목을눌러 모두 다운하세요.



파일 3가지가 다운이 되었다면!
nxclient-3.5.0-7.x86_64.rpm
nxnode-3.5.0-7.x86_64.rpm
nxserver-3.5.0-9.x86_64.rpm
설치 합시다ㅋ

윈도우에서 다운을 받았다면 당연히 리눅스로
옮겨주세요! (FTP, USB) 고고싱!

이제 설치 합니다
#rpm -ivh nxclient-3.5.0-7.x86_64.rpm
#rpm -ivh nxnode-3.5.0-7.x86_64.rpm
#rpm -ivh nxserver-3.5.0-9.x86_64.rpm

설치가 완료 되었다면!
#vi /usr/NX/etc/server.cfg

EnableUerDB="0" 항목을 EnableUerDB="1" 로 변경!
EnablePasswordDB="0" 항목을 EnablePasswordDB="1" 로 변경!
#SSHDAuthPort="22" 의 # 주석처리 제거
EnableClipboard="both" // 운영체제 간의 복사등의 기능을 설정.

ssh 사용 포트가 막혀 있다면 당연히 포트를 열어 주세요!
포트를 여는 방법은 검색 고고 하세요 ㅋ
방화벽 재구동 해주시고요!

이제 원격 접속에 필요한 사용자를 생성해 줍시다!
#useradd test10 <-- 리눅스에사용자 추가!
#passwd test10 <-- 추가된 사용자 비번 설정!
(리눅스에 실제 사용자가 있어야 접속이 가능 합니다!)

이제 원격 접속을 위해 프로그램에 사용자를 등록 합니다!
#/usr/NX/bin/nxserver -useradd test10 --system

--system 을 뒤에 붙여주면 관리자권한 부여가 됩니다.
입력 후 패스워드를 지정하세요!

NXserver 재구동!
#service nxserver restart 혹은 #/etc/rc.d/init.d/nxserver restart

이제는 윈도우에서 접속해 봅시다!
Download 탭의 윈도우 클라이언트 클릭!


다운로드 패키지!



다운로드 후 설치를 진행하고 실행하면.


세션이름은 임의로 적고, 접속하려는 리눅스의 아이피를 입력.


사용하는 환경에 따라 KDE 혹은 GNOME 선택 -> 넥스트!



아까 생성한 test10 사용자 이름과 암호 입력! -> 접속!


개인적으로 이 프로그램을 CentOS에서는 사용해보지 않았습니다..

우분투 ver.10.10 사용을 확인 했습니다.
ssh 키 생성과 키 import 부분은 다루지 않았습니다.
키를 생성하지 않고 사용하면 default 키를 입력받는 형식인가 봅니다.
우분투에서는 key 생성과 import 부분을 다 해보았는데..
나중에 CentOS 에서 해보고 후기 다시 올리겠습니다.
도움이 되었으면 좋겠습니다 ㅋㅋㅋ

     - 백업종결자 씀 -

AND

CentOS 운영체제의 로그파일은 기본적으로 "/var/log" 디렉토리에 위치합니다.
각각의 상세한 로그 정보는 아래 내용을 참고해서 시스템을 운영하셔요^^

 

 * /var/log/maillog

   - 메일과 관련된 로그들이 기록


 * 
/var/log/messages

  - 메일, 뉴스등을 제외한 전반적인 시스템의 모든 로그를 기록


 * 
/var/log/secure

  - 사용자들에 대한 접속을 기록


 * /var/log/lastlog

  - /etc/passwd 내 사용자들의 마지막으로 로그인한 정보를 기록 (lastlog 명령어로 확인 가능)


 * /var/log/boot.log

  - 부팅시 서비스 데몬들의 실행 상태를 기록하는 파일


 * /var/log/dmesg

  - 시스템이 부팅할 때 출력되는 메시지들이 기록 (dmesg 명령어로 확인 가능)


 * /var/log/cron

  - crontab 과 관련된 메시지들이 기록 (예약 스케쥴 작업이 정상적으로 실행되는지 확인 가능)


 * /var/log/wtmp

  - /etc/passwd 사용자들의 접속한 정보를 기록 (last 명령어로 확인 가능)

     ※ 특정 사용자 정보를 확인하려면 "last 사용자명" 을 입력하여 확인 가능(가장 최근 순으로 10개까지만 출력)


 * /var/log/xferlog

  - FTP 서버의 데이터 전송관련 로그를 기록 (불법파일이 전송 여부 및 전송상황의 모니터링 가능)


또한, CentOS는 기본적으로 로그관리를 위한 프로그램으로 "syslogd" 라는 데몬을 제공하고 있습니다.

해당 데몬의 환경설정을 위해 정의된 파일은 "/etc/syslog.conf" 입니당.

 

/etc/syslog.conf 파일의 내용을 확인해볼게요^^

서비스 시스템, 메시지 종류와 같은 내용들이 출력되지요!

 

[ 서비스 시스템 ]

auth, auth_priv, cron, mail, daemon, kern, lpr, news, syslog, user, uucp, local0~local7

 

[ 메시지 종류 ]

- emerg(emergency)        : 시스템 패닉(종료)

- alert(alert)                    : 치명적인 에러. 즉시 알려야 하는 내용

- crit(critical)                  : 치명적인 에러

- err(error)                      : 에러

- warn(warnning)            : 경고 메시지

- notice(notice)               : 알림 메시지

- info(infomation)             : 정보

- debug(debug)               : 디버그

- none(null)                    : 모든 메시지 무시 

- logrotate                       : 로그를 정기적으로 잘라서 보관

  - 기본적으로 설치되어 있고 "/etc/cron.daily" 디렉토리에 포함되어 있어서 하루에 한번 실행되요!

    ( 환경설정파일 : /etc/logrotate.conf )

AND

명령프롬프트 상태에서 입력 후 실행했던 모든 명령들은
히스토리 리스트 버퍼에 스택으로 저장되게 되죠!!

이 기능은 반복하여 입력하거나 명령을 수정할 때 상당히 유용하게 쓰이는대요.
사용법은 방향키 커서를 위/아래를 누르면서 이전 사용한 것과 그 후 사용한 것 등으로
사용 가능하죠.

히스토리 파일은 각 사용자의 홈 디렉토리에 ".bash_history" 라는 이름으로 저장되며,
쉘 실행 중에는 메모리에만 명령어 히스토리를 기억하고 있다가 해당 사용자가 로그아웃시
".bash_history" 파일에 저장을 하게 됩니다.

[ history와 관련된 환경 변수 ]
1) HISTSIZE : 히스토리 스택의 크기를 정의. 단위는 명령의 개수.
2) HISTFILESIZE : 실질적인 히스토리파일의 크기.
3) HISTFILE : 히스토리 파일의 위치를 정의.
4) HISTCONTROL : 중복되어지는 명령에 대한 기록 유무를 지정하는 변수.

[ "!" 를 이용한 history 응용 ]
- "느낌표(!)" 를 이용하여 기존에 실행했던 history에 남은 명령을 실행가능하다.

!! : 마지막으로 실행했던 명령문을 실행.
!n : n번째 실행한 명령문을 실행.
!string : 가장 최근에 'string(문자열)'으로 시작하는 명령문을 실행.

[ history 응용 ]
명령프롬프트 상태에서 "Ctrl + r" 키 조합을 누르면 검색 가능한 프롬프트가 출력됩니다.
이 때, 특정한 문자를 입력하면 그 문자로 수행한 가장 최근 명령을 화면에 출력해줍니다.

AND

mysql 을 사용하다보면 가끔 'root' 사용자 즉, 관리자의 비밀번호를 분실하는 경우가 있습니다.
그래선 안되겠지만... 혹 모를 경우를 대비하여 아래의 내용으로 진행해보시는 방법을 추천해드릴게요^^

우선 mysql 서비스가 설치된 디렉터리를 알고 계셔야합니다.
해당 서비스의 경로는 소스 설치시 경로를 수정하지 않은 경우 또는 rpm 으로 설치했을때 "/usr/local/mysql/" 로 설치되게 됩니다.

이제 본격적으로 'root' 사용자의 비밀번호를 변경해보겠습니당!!! Follow ME~!!!


[ Mysql Safe 모드로 접속하기 ] 

  - #/etc/rc.d/init.d/mysqld stop     // 데몬을 종료한다.

 

  =>mysql 5.0.85미만 버전인 경우

    명령어 경로 : "/usr/local/bin/safe_mysqld"

     - #/usr/local/bin/safe_mysqld --skip-grant &

 

  =>mysql 5.0.85이상 버전인 경우

    명령어 경로 : "/usr/bin/mysqld_safe"

     - #/usr/bin/mysqld_safe --skip-grant &

                        //신 or 구 버전에 따라 다르게 안전모드
                        형태로 mysqld 의 인증을 무시하고 접속한다.

 

* 위의 2단계 중 하나를 진행하여 safe 모드의 mysql 상태에서 진행할 것!! 


] mysql -u root mysql             // root 사용자의 비번 설정을 위해 mysql 접속

※ 백그라운드 모드로 동작하므로 프롬프트가 출력되지 않고 커서만 출력되어 있음.


mysql > use mysql;               //mysql 데이터베이스를 사용해야 'root' 사용자의 내용변경이 가능함


mysql > update user set password=password('변경할 비밀번호') where user='root';
                                            //mysql 데이터베이스내 'root' 사용자에 대한 비밀번호를 원하는 비밀번호로 암호화되는 방식으로 저장


mysql > flush privileges;         //mysql 을 사용하는 경우 내용을 수정하였을때 해당 수정사항을 데몬 재실행 없이 적용 시켜주는 명령어


mysql > quit

# /etc/rc.d/init.d/mysqld restart                    //mysql 에서 수정사항이 적용이 안되었을 경우도 있어 안전하게 데몬 재실행


이상으로 mysql 에서 "root" 사용자의 비밀번호를 초기화하는 방법을 안내해드렸어요^^
유용하게 쓰시면 좋겠구요.. 다음에는 좀 더 스펙타클!!!!한 내용을 안내해드릴게요~ 그럼 ㅃㄴㅃㄴ

AND