'Linux'에 해당되는 글 62

  1. ubuntu 9.04에 laptop mode 활성화(Laptop Mode Tools) (2) 2009/06/13
  2. ubuntu 9.04에 Intel Graphics driver 2.7.0 설치하기 2009/06/11
  3. ubuntu 9.04에서 기본적인 세팅 버그 해결 2009/05/23
  4. ubuntu 9.04에 IE6으로 AxtiveX 이용하기 (2) 2009/05/22
  5. ubuntu 9.04에 conky 설치 2009/05/21
  6. Linux find 명령어 완전 정복 가이드 2009/02/10
  7. sendmail 설정 2008/05/07
  8. 사이트 비밀번호 입력하기 2008/05/02
  9. httpd reload versus restart 2008/04/07
  10. 도메인앞에 www. 를 자동으로 붙이고 싶어요. 2008/04/06
  11. SSH Brute Force 공격 방어 2008/04/06
  12. 아파치 DoS 방어 2008/04/06
  13. 리눅스에서 text 인코딩 한꺼번에 바꾸기 2008/04/06
  14. 아파치 2.x 에서의 트래픽 제한 2008/04/06
  15. mod_cband 제한 관련내용 2008/04/06
  16. lighttpd + php fastcgi + xcache 설치하기 2008/04/06
  17. HowTo: Setup Lighttpd + PHP + eAccelerator 2008/04/06
  18. RRDTool 2008/04/06
  19. CentOS (Redhat Enterprise)에서 lighttpd 설치 2008/04/06
  20. lighttpd 웹서버설치 2008/04/06
  21. SSH클라이언트 접속시 한글깨짐문제 - /etc/sysconfig/i18n (1) 2008/04/06
  22. mod_security를 통한 방화벽구축 2008/04/05
  23. 하나의 계정에 여러개 도메인 포워딩하여 각각 사이트 구현하기 2008/04/01
  24. 검색로봇을 막는 방법 robots.txt 2008/03/24
  25. [apache] 검색로봇 차단법 2008/03/24
  26. 파일내 문자열 검색 2008/03/15
  27. 사랑비 설치시 테이블 생성 실패 (2) 2008/03/14
  28. Mysql 4.1이상버전에서 4.0 으로 다운그레이드 2008/03/14
  29. UTF-8 지원 제로보드4 2008/03/11
  30. 화이트 도메인 등록 방법 (6) 2008/02/29

ubuntu 9.04에 laptop mode 활성화(Laptop Mode Tools)

Posted at 2009/06/13 01:43 // in Linux // by 엔신
이번에도 떠돌이님의 포스팅을 통해 알게 되었고, 좀 더 찾아보았고, 적용 후 체감상으로는 아직 잘 모르겠다.

Laptop Mode Tools는 ubuntu에 기본적으로 포함되어 있는 프로그램이다. 그러나 disable 되어 있다.
Debian, Ubuntu, Fedora, Gento, Slackware, Mandriva, ArchLinux, CRUX를 기본적으로 지원하며, 그 외에는 source 컴파일을 하여 사용하여야 한다.


1. 활성화 시키기
sudo gedit /etc/default/acpi-support
ENABLE_LAPTOP_MODE=true

2. 세부 설정
sudo gedit /etc/laptop-mode/laptop-mode.conf

laptop mode tools에서는 3가지 옵션에 대해서만 언급하고 있다.
ENABLE_LAPTOP_MODE_ON_AC
ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED
DISABLE_LAPTOP_MODE_ON_CRITICAL_BATTERY_LEVEL

다른 것들에 비해서는 쓸모가 있으므로 그런 것 같다.

그러나 그 외에도 쓸모가 있는 옵션으로 ASSUME_SCSI_IS_SATA가 있었다.
본인의 경우 SATA 하드인데 해당 옵션에서는 드라이브가 sd로 시작할 경우 0으로 설정하라고 나와 있다. 하지만 default는 1로 설정이라 변경해주었다.


그 외의 몇 가지 설정에 대하여 설명을 첨부한다.
# start/stop(부팅종료를 의미하는 것으로 예상됨) 시 많은 정보를 보고 싶을 때에는 1로 설정.
VERBOSE_OUTPUT=0

# 배터리 모드일 때 laptop_mode 활성화 여부
ENABLE_LAPTOP_MODE_ON_BATTERY=1

# AC 전원 모드일 때 laptop_mode 활성화 여부
ENABLE_LAPTOP_MODE_ON_AC=0

# 노트북 뚜껑이 닫혀 있고 심지어 AC 전원을 사용하고 있을 때에도 노트북 모드 사용 여부
ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED=0

# 데이터 손실 위험 경고를 나타낼 배터리 최소 양(% 단위)
MINIMUM_BATTERY_CHARGE_PERCENT=3

# 위와 이어져서, 배터리 경고 최소량에 도달했을 때 데이터 손실 위험 경고 활성화 여부
DISABLE_LAPTOP_MODE_ON_CRITICAL_BATTERY_LEVEL=1

# 어떠한 하드 드라이브에 대해 laptop 모드를 적용할 것인지 설정
# HD="/dev/hda /dev/hdb" 와 같은 형태로 적용 가능. 아래는 default로 다 적용 대상이 됨
HD="/dev/[hs]d[abcdefgh]"

# 마운트된 파티션에 대한 laptop 모드 적용 여부
PARTITIONS="auto /dev/mapper/*"
f
# hdparm를 사용할 것인지(set 1) sdparm를 사용할 것인지 여부(set 0)
# 하드디스크가 E-IDE이거나 SATA 1세대라서 /dev/hd 이면 set 1,
# /dev/sd 라면 set 0으로 sdparm을 사용한다.
# 속도 측정과 하드 속도 향상과 관련이 있는 유틸.
# 본인은 sd로 시작하는 sata하드디스크 이므로 0으로 설정함. default는 1
ASSUME_SCSI_IS_SATA=0

# readahead 툴을 사용 여부
# 특정한 파일을 필요하기 전에 미리 메모리에 로드하여 속도 향샹을 하기 위한 툴
CONTROL_READAHEAD=1

# KB 단위로 mp3/ogg 재생 시 3메가 바이트까지 미리 로드하여 사용
# 너무 크게 잡아주지는 말 것
LM_READAHEAD=3072
NOLM_READAHEAD=128

# noatime 옵션을 추가하여 laptop 모드를 사용 여부
# noatime은 no access time. mount된 드라이브가 이 옵션이 적용된 경우
# 엑세스 타임을 기록하지 않으므로 약간의 속도 향상을 할 수 있으나
# 개인적으로 잘 모를 경우 권장하지는 않음
CONTROL_NOATIME=0

# 하드 드라이브의 쓰기 캐시 설정 여부
CONTROL_HD_WRITECACHE=0

# 쓰기 캐쉬 설정 상세 설정
NOLM_AC_HD_WRITECACHE=1
NOLM_BATT_HD_WRITECACHE=0
LM_HD_WRITECACHE=0

이올린에 북마크하기
2009/06/13 01:43 2009/06/13 01:43

ubuntu 9.04에 Intel Graphics driver 2.7.0 설치하기

Posted at 2009/06/11 10:17 // in Linux // by 엔신
우분투 9.04를 설치하고 나서 대체적으로 만족스러웠지만, 창 전환시에도 그래픽이 알게 모르게 끊기는 현상이 있었다. 그래서 드라이버를 설치하여 보았더니 체감상으로는 창전환시에 상당히 부드러워졌다.

sudo gedit /etc/apt/sources.list
로 파일을 gedit로 연 후 가장 하단 부분에 아래 내용을 삽입하고 저장한다.

deb http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main

터미널 창에서 키를 추가하고, 패키지 리스트를 업데이트 한 다음, xserver-xorg-video-intel를 설치하고 재부팅하면 끝이다.
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com AF1CDFA9
sudo apt-get update && sudo apt-get install xserver-xorg-video-intel

아래 명령은 장치중 VGA 정보를 확인하는 것이다.
lspci -nn|grep VGA

그리고 나서 떠돌이님의 uxa 기능을 켜는 글을 통해 uxa를 켜주면 된다.
gksu gedit /etc/X11/xorg.conf

나오는 텍스트 창에서, 아래 부분을 찾아서 옵션 두줄을 추가.

Section "Device"
    Identifier "Configured Video Device"
    Option "AccelMethod" "uxa"
    Option "Tiling" "false"
EndSection

이올린에 북마크하기
2009/06/11 10:17 2009/06/11 10:17

ubuntu 9.04에서 기본적인 세팅 버그 해결

Posted at 2009/05/23 02:21 // in Linux // by 엔신
떠돌이님의 우분투 9.04 기본적인 삽질글을 통해 우분투 문제점을 해결하였다.

1. 오픈오피스 글꼴 버그
2. 네트워크 서비스 탐색 비활성화 오류 메시지
3.
intel 그래픽 카드 성능 저하 문제
4.
NTFS 파티션 자동 마운트
5. Atheros 무선랜 버그(a/b/g에 해당, n은 ath9k가 담당)
본인은 intel X4500 그래픽카드를 사용하는데 uax를 작동시켰더니 체감 속도가 조금 향상되었고, NTFS 파티션 자동마운트의 경우 따로 프로그램을 설치하지는 않고, /etc/fstab에 등록시켰다.

# uuid 확인하기(sata 하드디스크의 경우)
/dev/disk/by-uuid
sudo vi /etc/fstab
fstab에 아래 내용와 같은 내용을 추가하였다.(UUID는 부분 #처리)
# 설명
#        1                               2                  3        4             5       6
UUID=##64F4D864####   /media/DATA     ntfs-3g defaults        0       0
1. 장치명 : /dev/sda, /dev/sda1 /dev/hda1 과 같은 형식의 장치명을 적는다
2. 마운트 디렉토리 : 원하는 마운트 디렉토리(디렉토리가존재하여야함)
3. 파일시스템 종류 : ext, ext2, ext3, ext4, iso9660, nfs, swap, ufs, vat, ntfs, ntfs-3g 등
    ntfs로는 쓰기가 되지 않았다. 그리고 기타 문제점들을 수정하여 안정화된 버전이 ntfs-3g이다. 그러므로 ntfs-3g를 사용하면 된다. 또한 ntfs라고 적더라도 ntfs-3g로 override 되어진다.
4. 파일시스템 속성 :
    default : rw, nouser, auto, exe, suid
    auto,noauto,exec,noexec,suid,nosuid,user,nouser,ro,rw,usrquota,grpquota
5. dump 설정 : 데이터 백업이 가능한지 여부, 1이면 true, 0이면 false
6. 체크 옵션 : fsck, e2fsck
    0 : 부팅시에 파일 시스템 점검 하지 않음
    1 : 루트파일시스템으로서 부팅시에 파일 시스템 점검 수행
    2 : 루트파일시스템 이외의 파일시스템으로서 부팅시 파일 시스템 점검 수행

마지막으로 아데로스 5008 랜카드를 사용하는데 최근에는 유선랜만 사용하여 문제가 있는지 몰랐다. 떠돌이님의 글을 보고 혹시나해서 테스트해보기 위해 내장 랜말고 USB linksys 랜카드로 테스트해보았더니, 정상적으로 접속이 되었고, 아데로스 내장랜의 경우 접속이 되지 않았다.
수신율 또한 문제가 있었다.

사용자 삽입 이미지
[무선랜 드라이버 컴파일 이전 상태]

확실히 수신율에서도 구형인 Linksys WUSB54GC보다 못하게 나오는 것을 확인할 수 있다. 기존에는 Backtrack에서 madwifi 드라이버를 사용하여 접속하였었지만, 떠돌이님의 madwifi 특집 포스팅 (1) - madwifi? ath5k? 글을 참조하여 밀어주고 있는 ath5k를 설치해보기로 하였다.

ath5k 설치 방법
wget http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2.6.tar.bz2
tar jxvf compat-wireless-2.6.tar.bz2
cd compat-wireless-2009-05-21
sudo apt-get install build-essential
make
sudo make install

정상적으로 설치가 된 이후 모듈을 올리기 위해 재부팅하라고 나오고 재부팅한 후 확인하여 보았다.

사용자 삽입 이미지
[드라이버 설치 이후 수신율]

확실히 수신율이 나아졌고, 인터넷도 잘 되었다.

이올린에 북마크하기
2009/05/23 02:21 2009/05/23 02:21

ubuntu 9.04에 IE6으로 AxtiveX 이용하기

Posted at 2009/05/22 01:04 // in Linux // by 엔신
사용자 삽입 이미지
[설치하고 사용한 화면]

wine 1.0.1 + cabextract 1.2-3 + ies4linux-2.99.0.1

http://gom79.com/gom/information/3395 를 참조하여 설치하였다.

VirtualBox의 윈도우XP에서 익스플로러를 사용하였으나, VirtualBox의 NAT 네트워크는 다운로드는 괜찮게 나오지만, 업로드가 3kbps가 나와서 어쩔 수 없이 wine과 ies4linux를 설치하게 되었다. 또 다른 이유는 간단하게 IE만 사용하여야 하는 상황인데 VirtualBox를 사용하니 안그래도 여름이라 날이 더워지고 있는데 노트북이 열을 많이 받아서 트북이 자극을 자제시켜 주고 싶었다.
NAT 네트워크 사용시 Upload 속도 저하 문제가 어서 빨리 해결되었으면 좋겠다.

/home/사용자계정/에 다운로드 받아서 압축을 풀었다.
sudo apt-get install wine cabextract
wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz
tar zxvf ies4linux-latest.tar.gz
cd ies4linux-*
./ies4linux
GUI 창이 뜨고 확인만 눌러서 설치하면 된다고 하는데, 파이썬 관련 오류가 나오길래
README 파일을 참조하여 CUI 모드로 설치를 하였더니 정상 설치가 되었다.
./ies4linux --no-gui
그랬더니 /home/사용자계정/bin/ie6이라는 심볼릭링크가 생성이 되었다.
원경로는 /home/사용자계정/.ies4linux/bin/ie6이었다.
/home/사용자계정/.ies4linux/ie6/drive_c
경로로 들어가면 windows와 programe files 디렉토리가 존재하여 ActiveX 설치나 프로그램 설치시 설치 가능하도록 되어져 있었다.

문제점
1. 인터넷 접속시 플래시를 설치할 수 있는 창이 나오게 된다. 정상적으로 설치가 잘 되지만 플래시가 계속 깜빡깜빡거려서 눈이 아프다.
2. ActiveX 설치를 시도하는 사이트의 경우 ie6linux 프로그램이 10초정도 다운되어진다. 그러나, 다운되었다고 창 막 누르고 그러지 말고, 다른 작업 10초정도 해주고 창을 돌아보면 설치 화면이 떠져 있으니 침착하게 설치하면 된다.
3. 일부분 한글 폰트가 깨진다.(이 부분은 폰트 관련 설정을 좀 더 해보면 해결될지도 모르지만 그정도로 ie6 쓸일 없음)

문제점이 있기는 하지만, 내가 필요한 작업(ActiveX이용)이 되므로 사용할 것이다.

이올린에 북마크하기
2009/05/22 01:04 2009/05/22 01:04

ubuntu 9.04에 conky 설치

Posted at 2009/05/21 00:19 // in Linux // by 엔신
사용자 삽입 이미지

conky란 바탕화면에서 오른쪽에 나오는 시스템 모니터링 도구이다.
설치는 지크님의 글을 참조하였다.

프로그램 설치
sudo apt-get install conky
sudo apt-get install devilspie


// devilspie는 바탕화면이 conky를 덮어버리는 현상을 해결하기 위한 것
그 외에도 특정 어플리케이션을 데스크탑 화면에서 실행시키기 위한 프로그램

지크님의 conky에서 hdd 부분만 나에게 맞게 수정하였음

~ 경로에 생성해주는 .conky 파일

more..


터미널 창에서 아래와 같이 파일 생성
mkdir ~/.devilspie
touch ~/.devilspie/conky.ds


conky.ds 파일 내용

more..



시스템 -> 기본 설정 -> 시작 응용프로그램에 conky와 devilspie를 추가 등록한다.

재부팅하면 정상적으로 작동됨.
이올린에 북마크하기
2009/05/21 00:19 2009/05/21 00:19

Linux find 명령어 완전 정복 가이드

Posted at 2009/02/10 00:43 // in Linux // by 엔신

Linux find 명령어 완전 정복 가이드

저자 - Sheryl Calish

가장 강력하면서도 한편으로는 혼란스러운 유비쿼터스 명령어인 find 명령어에 대한 개요.

게시일 : 2008년 7월

Linux find 명령어는 모든 Linux 명령어 가운데 가장 유용하면서도 혼란스러운 명령어 가운데 하나입니다. 다른 Linux 명령어의 표준 구문과 다른 구문을 가지고 있다는 점에서 어렵습니다. 하지만, 파일명, 파일 유형, 사용자, 더 나아가 타임 스탬프 별로 파일을 찾을 수 있다는 점에서 강력한 명령어이기도 합니다. find 명령어를 사용하면 이러한 속성을 자유롭게 조합해 파일의 위치를 찾을 수 있을 뿐만 아니라, 찾은 파일에 대해 연산을 수행할 수 있습니다.

본 글의 목적은 find 명령어와 그 잠재적 이점을 개략적으로 설명함으로써 find 명령어를 손쉽게 학습 및 사용할 수 있도록 돕는 것입니다. 동시에, find 명령어의 특성 중 가장 강력하면서도 한편으로는 혼란스러운 측면에 대한 개요 및 참조를 제공할 것입니다.

[주: 여기에서 사용된 find 명령어는 GNU 버전이기 때문에 일부 세부 내용은 다른 버전의 find 명령어와 다를 수 있습니다.]

기본 형식

먼저, find 명령어의 기본 구조부터 살펴보겠습니다:

find   start_directory  test  options   criteria_to_match
action_to_perform_on_results
                       
아래 명령어에서 find는 이름에 “java” 확장자를 가지고 있는 모든 파일을 대상으로 “.”가 표시된 현재 디렉토리를 찾기 시작할 것입니다:
find . -name  "*.java"   

아래에는 검색 결과에 대한 간단한 목록이 나열되어 있습니다:

find . -name  "*.java"
./REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java
./REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java
..

[주: 본 글에서 잘라 붙이기를 해 find 명령어를 실행하는 경우에는 자체 키보드를 사용해 큰따옴표(“”)를 바꿔야 올바른 결과를 얻을 수 있습니다.]

아 래 명령어 역시 동일한 연산을 수행할 것입니다. 어떤 경우든, find 명령어에 전달되도록 escape 문을 통해 와일드카드 문자를 일반 문자로 처리해야 하며 쉘에 의해 해석되지 않아야 합니다. 따라서, 검색 문자열에 큰타옴표를 붙이거나 그 앞에 역슬래시(\)를 붙이십시오:

find . -name  \*.java

find 에 대한 인수는 옵션이기는 하지만, 검색 시작 위치를 지정하지 않은 경우에는 현재 디렉토리에서 기본적으로 검색이 시작됩니다. 옵션 사항이기는 하지만 테스트 조건을 지정하지 않은 경우에는 불완전하거나 선별되지 않은 결과값이 출력됩니다.
 
아래 3개의 find 명령어를 실행하면 똑같이 현재 디렉토리와 숨겨진 파일을 포함하는 모든 서브디렉토리의 모든 파일 목록이 검색됩니다:

find 
find .
find . -print

이는 –la 옵션을 가진 ls 명령어를 실행하는 것과 비슷합니다. 백업을 위해 위 명령어의 출력물에 전체 경로 이름이 포함되기를 원하는 경우라면 시작 디렉토리에 대한 전체 경로를 지정해야 합니다:

find /home/bluher -name \*.java
/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java
/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java/
...

또 한, 검색 문자열에 1개 이상의 시작 디렉토리를 지정할 수도 있습니다. 적정 권한을 가진 사용자로서 실행되는 경우, 아래 명령어는 모든 jar 파일을 찾기 위해 /usr, /home 및 /tmp 디렉토리 순서로 내려갈 것입니다:  

find /usr /home  /tmp -name "*.jar"

적정 권한이 없는 사용자라면 많은 시스템 디렉토리를 검색하기 시작할 때 다음과 같은 오류 메시지가 나올 수 있습니다:

find:  /tmp/orbit-root: Permission denied

다음과 같이 검색 문자열을 추가함으로써 불명확한 결과가 나오는 것을 피할 수 있습니다:

find /usr /home  /tmp -name "*.jar" 2>/dev/null

이렇게 하면 모든 오류 메시지가 널(null) 파일로 전송되기 때문에 보다 정제된 출력물이 제공됩니다.

기본적으로 find 명령어는 대/소문자를 구별합니다. 대/소문자가 구별되는 find에서는 -name 테스트를 대신해 -iname 테스트를 사용하십시오.

find downloads  -iname "*.gif"
downloads/.xvpics/Calendar05_enlarged.gif
downloads/lcmgcfexsmall.GIF
또한, 파일명 외에도 유형에 따라 파일을 검색할 수 있습니다. 예를 들어, 아래 명령어를 통해 디렉토리의 모든 서브디렉토리를 찾을 수 있습니다:
find . -type d          

아래 명령어를 사용하면 /usr 디렉토리의 모든 심볼릭 링크(symbolic link)를 찾을 수 있습니다:

find /usr -type l

위 명령어를 실행하면 3,000개 이상의 링크 목록이 나타날 것입니다. 슈퍼유저(root) 권한을 통해 아래 명령어 가운데 하나를 실행하면 /usr 디렉토리의 링크 목록과 이것이 가리키는 파일이 나타납니다:

# find /usr/bin  -type l  -name "z*" -exec ls  -l {} \;
lrwxrwxrwx 1 root root 8 Dec 12 23:17 /usr/bin/zsh -> /bin/zsh
lrwxrwxrwx 1 root root 5 Dec 12 23:17 /usr/bin/zless -> zmore
lrwxrwxrwx 1 root root 9 Dec 12 23:17 /usr/bin/zcat -> /bin/zcat
find /usr/bin -type  l  -name "z*" -ls

하지만, 보다 짧은 두 번째 명령어를 실행하면 디렉토리와 inode 정보를 가진 긴 파일 목록이 나올 것입니다. -exec 및 –ls 실행에 대해서는 후반부에서 다룰 것입니다

find가 찾을 수 있는 다른 파일 유형으로는 다음과 같은 것들이 있습니다

• b—block (buffered) special
• c—character (unbuffered) special
• p—named pipe (FIFO)
• s—socket

find 명령어의 시작점으로 루트를 사용하면 시스템 속도가 크게 느려질 수 있습니다. 반드시 명령어를 실행해야 하는 경우에는 사용량이 적은 시간대나 야간에 실행하는 것이 좋습니다. 아래 구문을 사용해 출력물을 파일로 보낼 수 있습니다.:

find  /   -print > masterfilelist.out

원치 않는 출력물을 대량 생산하는 find 명령어를 실수로 입력한 경우에는 CTRL-C를 누르기만 하면 가장 최근에 실행된 명령어가 중단됩니다.

여 러 파일 시스템을 갖춘 엔터프라이즈 네트워크에서는 특히 find 명령어가 검색한 파일을 제한하는 것이 좋습니다. 필요한 수 만큼 옵션 및 테스트를 사용함으로써 시스템 상의 로드를 줄일 수 있습니다. 이를 위해 가장 유용하게 사용할 수 있는 옵션은 –xdev와 -mount입니다. 이들 옵션은 find 명령어가 MS-DOS, CD-ROM 또는 AFS와 같은 다른 파일 시스템 상의 디렉토리로 내려가지 않도록 함으로써 검색 범위를 좁혀줍니다. 따라서, 시작 디렉토리와 동일한 유형의 파일 시스템으로 검색을 제한할 수 있습니다.

듀얼 부팅 시스템 사용자는 mount 명령어가 실행되는 경우에 이러한 옵션을 사용할 수 있습니다. Windows 파티션이 관련되어 있다고 가정하면, 아래와 같은 명령어를 통해 마운팅 할 수 있습니다.:

mount -t vfat  /dev/sda1 /mnt/msdos

여러분이 사용하는 실제 명령어는 시스템 설정 방법에 따라 달라집니다. df를 실행하거나 아래 명령어를 수행함으로써 파티션 마운팅 여부를 확인할 수 있습니다:

find /mnt/msdos  -name "*.txt" 2> /dev/null

MS Windows 파티션에서는 파일 목록이 길 수 밖에 없습니다. 이제부터는 -mount 또는 -xdev 옵션을 통해 아래 명령어를 실행하십시오:

find / -name  "*.txt" -mount 2> /dev/null

또는

find / -name  "*.txt" -xdev 2> /dev/null

아래 예에서와 같이 -fstype 테스트를 사용해 find 명령어에 찾고자 하는 파일 시스템을 명확하게 알려줄 수도 있습니다:

find / -name  "*.txt" -fstype vfat 2> /dev/null

시간 찾기

find 명령어는 시스템의 타임 스탬프를 토대로 파일 검색에 사용할 수 있는 여러 개의 옵션을 가지고 있습니다. 이러한 타임 스탬프로는 다음이 포함됩니다

mtime파일 내용이 마지막으로 수정된 시간
atime—파일을 읽기 또는 액세스한 시간
ctime—파일 상태가 변경된 시간

mtime 및 atime의 의미는 그 자체로 쉽게 알 수 있지만, ctime는 좀 더 설명이 필요합니다. inode는 각 파일에 메타 데이터를 가지고 있기 때문에 파일에 연결된 메타 데이터가 변경되면 inode 데이터도 변경됩니다. 파일에 대한 심볼릭 링크 생성, 파일에 대한 권한 변경, 파일 이동 등과 같은 다양한 작업으로 인해 이러한 메타 데이터 변경이 야기될 수 있습니다. 이러한 경우, 파일 내용에 대한 읽기나 수정은 수행되지 않기 때문에 themtime 및 atime은 변하지 않지만 ctime은 변합니다. 

이러한 시간 옵션은 각기 -n, n 또는 +n로 지정된 n 값을 함께 사용해야 합니다.

• -n은 n 이하를 반환
• +n은 n 이상을 반환
• n은 정확히 n에 해당되는 값을 반환

보다 명확한 설명을 위해 몇 가지 예를 살펴 보겠습니다. 아래 명령어는 최근 1시간 동안 수정된 모든 파일을 찾아줍니다:

find . -mtime -1
./plsql/FORALLSample
./plsql/RegExpDNASample
/plsql/RegExpSample

-1 대신 1을 가진 동일 명령어를 실행하면 정확하게 1시간 전에 수정된 모든 파일을 찾을 수 있습니다:

find . -mtime 1 

위 명령어는 정확하게 일치하는 값을 요청하기 때문에 모든 결과값이 나오지는 않습니다. 아래 명령어는 1시간 이전에 수정된 파일을 찾아줍니다:

find . -mtime +1 
기본적으로 -mtime, -atime 및 –ctime는 최근 24 시간에 대한 타임 스탬프입니다. 하지만, 뒤에 daystart 옵션을 붙이면 오늘을 시작으로 24시간 주기가 시작됩니다. 또한, mmin, amin 및 cmin을 사용하면 분 단위로 변경된 타임 스탬프를 찾을 수 있습니다.

여러분의 계정으로 로그인한 후 즉시 아래 명령어를 실행하면 최근 1분 내에 읽은 모든 파일을 찾을 수 있습니다:

find . -amin -1
./.bashrc
/.bash_history
./.xauthj5FCx1

find 명령어만으로 파일의 위치를 찾으면 메타 데이터의 일부인 파일의 액세스 시간이 변경된다는 사실에 유의하십시오.

-newer, -anewer 및 –cnewer 옵션을 사용하면 특정 파일과 비교해 수정 또는 액세스된 파일을 찾을 수도 있습니다. 이는 -mtime, -atime 및 –ctime과 비슷합니다.
 
• -newer : 보다 최근에 내용이 수정된 파일
• -anewer : 보다 최근에 읽기가 수행된 파일
• -cnewer : 보다 최근에 상태가 변경된 파일

마지막 tar 파일 이후로 어떤 방법으로든지 수정된 홈 디렉토리의 파일을 모두 찾으려면 아래 명령어를 사용하십시오:

find . -newer  backup.tar.gz

크기에 따른 파일 찾기

-size 옵션은 지정된 크기 기준에 부합하는 파일을 찾아줍니다. 크기가 5MB 이상인 모든 파일을 찾으려면 아래와 같이 하십시오

find / -size  +5000000c 2> /dev/null
/var/log/lastlog
/var/log/cups/access_log.4
/var/spool/mail/bluher

마 지막에 “c”를 붙이면 결과가 바이트 단위로 보고됩니다. 기본적으로 find 명령어는 512 바이트 블록의 수로 크기를 보고합니다. 또한, “c”를 “k”로 교체하는 경우에는 킬로바이트 수로, “w”를 사용하는 경우에는 2바이트 워드의 수로 결과를 표시할 수 있습니다.

-size 옵션은 모든 제로 바이트 파일을 찾거나 이들 파일을 /tmp/zerobyte 폴더로 이동하기 위해 자주 사용됩니다. 아래 명령어가 바로 이러한 연산을 수행합니다.

find test -type f  -size 0 -exec mv {} /tmp/zerobyte \;

-exec 옵션은 find 명령어가 만나게 되는 파일의 모든 쉘 명령어를 수행할 수 있도록 해줍니다. 후반부에서 이 옵션의 보다 다양한 사용 예를 확인할 수 있습니다. 중괄호를 사용하면 빈 파일 각각을 이동시킬 수 있습니다

또한, -empty 옵션을 사용하면 빈 파일을 찾을 수 있습니다.

find test -empty        
test/foo
test/test

권한 및 소유권에 따른 파일 찾기

find 명령어는 시스템 보안 모니터링을 위해 없어서는 안될 명령어입니다. 아래와 같이 기호법이나 8진법을 통해 사용 권한이 널리 열려있는 파일을 찾을 수 있습니다.

find . -type f  -perm a=rwx -exec ls -l {} \; 

또는

find . -type f  -perm 777 -exec ls -l {} \;
-rwxrwxrwx 1 bluher users 0 May 24 14:14 ./test.txt

위의 명령어나 아래 명령어의 경우 -exec ls –l을 수행하고 있기 때문에, 반환된 파일의 실제 사용 권한을 확인할 수 있습니다. 이 명령어는 “기타 사용자” 및 그룹이 모두 쓰기를 수행할 수 있는 파일을 찾아줍니다.

find plsql -type f  -perm -ug=rw -exec ls -l {} \; 2>/dev/null

또는

find plsql -type f  -perm -220 -exec ls -l {} \; 2>/dev/null 
-rw-rw-rw- 1 bluher users 4303 Jun  7  2004 plsql/FORALLSample/doc/otn_new.css
-rw-rw-rw- 1 bluher users 10286 Jan 12  2005 plsql/FORALLSample/doc/readme.html
-rw-rw-rw- 1 bluher users 22647 Jan 12  2005 plsql/FORALLSample/src/config.sql
..
아래 명령어들을 실행하면 사용자, 그룹 또는 둘 모두가 쓰기 작업을 할 수 있는 파일을 찾을 수 있습니다  
find plsql -type f  -perm /ug=rw -exec ls -l {} \; 2>/dev/null, or,
find plsql -type f -perm /220 -exec ls -l {} \; 2>/dev/null
-rw-r--r-- 1 bluher users 21473 May  3 16:02 plsql/regexpvalidate.zip
-rw-rw-rw- 1 bluher users 4303 Jun  7  2004 plsql/FORALLSample/doc/otn_new.css
-rw-rw-rw- 1 bluher users 10286 Jan 12  2005 plsql/FORALLSample/doc/readme.html
-rw-rw-rw- 1 bluher users 22647 Jan 12  2005 plsql/FORALLSample/src/config.sql

웹이나 기존 매뉴얼에는 아래 명령어로 나와 있을 것입니다.

find . -perm +220  -exec ls -l {} \; 2> /dev/null 

+ 기호는 / 기호와 동일한 역할을 하지만, 새로운 버전의 GNU findutils에서는 권장되지 않고 있습니다.

시스템에서 쓰기 가능한 모든 파일을 찾으려면 아래 명령어를 사용하십시오

find / -wholename  '/proc' -prune  -o  -type f -perm -0002 -exec ls -l {} \;
-rw-rw-rw- 1 bluher users 4303 Jun  7  2004/home/bluher/plsql/FORALLSample/doc/otn_new.css
-rw-rw-rw- 1 bluher users 10286 Jan 12  2005 /home/bluher/plsql/FORALLSample/doc/readme.html
...

4 번째 사용 권한에 대해 앞으로 조금 더 다루겠지만, 마지막 필드의 “2”는 쓰기 비트로도 알려져 있는 파일 사용 권한의 “기타 사용자”에 해당됩니다. 우리는 설정된 다른 사용 권한이 무엇이든 관계 없이 기타 사용자를 위해 설정된 쓰기 권한을 가진 파일을 보고 싶다는 표시로 0002라는 사용 권한 모드 앞에 대시를 사용했습니다.

위의 명령어에서는 3가지 새로운 개념이 도입되었습니다. 패턴이 발견된 경우, – prune은 파일 패턴 “/proc”에서 -wholename 테스트를 사용함으로써 find 명령어가 이 디렉토리로 내려오지 않도록 막아줍니다. 불린 연산자 “-o”를 통해 find 명령어는 다른 디렉토리에서 명령어의 나머지 부분을 처리할 수 있습니다. 각 표현식 간에 가정된 암시적 and 연산자(-a)가 있기 때문에 좌측 표현식이 거짓(false)으로 평가된 경우 and 뒤에 나오는 표현식은 평가되지 않습니다. 따라서, -o 연산자가 필요합니다. 강제 우선 순위 적용을 위해 괄호를 사용하는 것처럼 find 명령어는 불린 연산자 -not, !,도 지원합니다.

시스템 관리자는 자주 find 명령어를 통해 해당 사용자나 그룹의 이름 또는 ID를 사용해 특정 사용자나 그룹의 정규 파일을 검색하고 있습니다:

[root] $  find / -type f -user bluher -exec ls -ls {}  \;

여기, 이러한 명령어의 출력에 대한 간단한 예제가 나와 있습니다:

4 -rw-r--r-- 1 bluher users 48  May  1 03:09  /home/bluher/public_html/.directory
4 -rw-r--r-- 1 bluher users 925 May  1 03:09 /home/bluher/.profile

또한, find 명령어를 사용해 그룹 별로 파일을 검색할 수도 있습니다:

[root] $ find /  -type f -group users
find / -type d -gid  100

이 명령어를 실행하면 그룹 ID 100이 소유하고 있는 디렉토리 목록이 나옵니다. 해당되는 uid 또는 gid를 찾기 위해 /etc/passwd 또는 /etc/group 파일에서 more 또는 cat 명령어를 실행할 수 있습니다

이 명령어는 알려진 특정 사용자 및 그룹에 관한 파일을 찾는 것 외에도 사용자나 그룹이 지정되지 않은 파일을 찾는 데도 유용합니다. 아래 명령어는 /etc/passwd 또는 /etc/group 파일에서 리스트를 가지고 있지 않은 파일을 식별합니다.

find / -nouser -o  -nogroup

위 명령어는 실제로 시스템 상에 결과를 제공하는 것은 아니지만, 파일을 이동한 후에 사용자나 그룹이 지정되지 않은 파일을 식별하는 데 사용할 수 있습니다

이제, 본 섹션 초반부에 언급한 별도의 높은 사용 권한 문제를 해결할 수 있게 되었습니다.

SGID 및 SUID는 UNIX 기반 운영 체제 상의 파일 및 디렉토리에 할당할 수 있는 특별 액세스 권한 플래그입니다. 컴퓨터 시스템 액세스에 있어 일반 권한을 가진 사용자가 일시적으로 높아진 권한을 가지고 바이너리 실행 파일을 수행할 수 있습니다.

find /  \( -perm -2000 -o -perm -4000 \) -ls
167901   12 -rwsr-xr-x   1 root     root         9340 Jun 16  2006 /usr/bin/rsh
167334   12 -rwxr-sr-x   1 root     tty         10532 May  4  2007 /usr/bin/wall

위 명령어에서 괄호가 escape 처리된 것을 볼 수 있습니다. 또한, 권한 간의 차이점을 확인할 수 있습니다. 첫 번째 파일에는 SGID 권한이 설정되어 있으며 두 번째 파일에는 SUID 권한이 설정되어 있습니다. 위 명령어의 마지막 연산은 -exec ls -dils 연산의 find 명령어와 유사합니다

find 명령어 제어

Linux 의 많은 명령어와 달리, find 명령어는 -r 또는 -R 옵션이 없이도 서브디렉토리로 내려가지 않습니다. 이는 기본적으로 지원됩니다. 하지만, 때에 따라 이를 제한하고 싶을 수 있습니다. 이럴 경우, -depth, -maxdepth 및 –mindepth 옵션과 –prune 연산이 유용합니다

-prune이 얼마나 유용한지는 이미 확인했기 때문에 이제는 -depth, -maxdepth 및 -mindepth 옵션에 대해 살펴보겠습니다.

-maxdepth 및 -mindepth 옵션을 사용하면 find 명령어를 통해 검색하고자 하는 디렉토리 트리의 수준을 지정할 수 있습니다. find 명령어가 단 한 수준의 디렉토리를 찾도록 하고 싶은 경우에는 maxdepth 옵션을 사용할 수 있습니다.

아래 명령어를 실행해 디렉토리 트리의 상위 3개 수준의 로그 파일을 검색하면 –maxdepth의 효과를 확인할 수 있습니다. 이렇게 하면 –maxdepth 없이 실행할 때 보다는 훨씬 적은 출력 결과가 나옵니다

find / -maxdepth 3  -name "*log"

또한, find 명령어에게 디렉토리 트리에서 최소 3개 수준까지 디렉토리를 검색할 것을 지시할 수 있습니다.

find / -mindepth 3  -name "*log"

-depth 옵션은 내용 평가에 앞서 디렉토리를 평가할 수 있도록 해줍니다. 아래 명령어는 한 예입니다.:

find -name "*test*" -depth
./test/test
./test
./localbin/test
./localbin/test_shell_var
./localbin/test.txt
./test2/test/test
./test2/test
./test2

find 명령어의 세계

지 금까지 find 명령어의 유용하지만 다소 혼란스러운 일부 기능에 대해 알아보았지만, find 명령어가 수행할 수 있는 추가 작업이 있습니다. 예를 들어, find 명령어가 기존 버전의 UNIX 및 기타 운영 체제와 호환 가능하도록 하고 여러 파일로 출력을 인쇄하도록 하는 등 연산을 수행할 수 있도록 하는 옵션이 있습니다. 본 자료를 읽은 다음에는 find 명령어에 대한 맨페이지(man page)를 이해할 수 있는 배경 지식을 갖추었을 것으로 생각하기 때문에 이 강력하면서도 유용한 툴을 직접 경험해 볼 것을 권합니다


Sheryl Calish는 Linux 전문 IT 컨설턴트입니다. Blue Heron Consulting을 거쳐 현재는 EquityBuild에서 IT 디렉터를 맡고 있습니다

http://www.oracle.com/technology/global/kr/pub/articles/calish-find.html

이올린에 북마크하기
2009/02/10 00:43 2009/02/10 00:43

sendmail 설정

Posted at 2008/05/07 10:09 // in Linux // by 엔신
센드메일설정을 알아보러 다니던중.. 얻었던 문서중에서 유용한 내용을 옮겨봤습니다. --maylinux


1 sendmail quota 설정


1.1 SMTP 서버에서 보내는 양 제한하는 법.

/etc/mail/sendmail.cf (또는 /etc/sendmail.cf.이는 sendmail 의 패키징 방법에 따라 다르 다.)파일에서 다음과 같이 MaxMessageSize 부분의 주석을 제거하고 제한하고자 하는 적 절한 값을 입력한다.

#maximum message size
O MaxMessageSize=5024000


위와 같이 설정하였을 경우 현재의 서버를 보내는 메일 서버로 이용시 첨부파일을 포함한 전체 메일사이즈가 5M 이상 초과하거나 웹에서 /usr/sbin/sendmail 을 실행하여 외부로 메일을 발송하는 메일링 리스트등의 프로그램에서도 메일 발송시 5 메가 이상의 메일은 보낼 수 없게 된다. 5024000 은 byte 단위이며 설정 변경 후 변경된 내용을 적용하려면 killall –HUP sendmail 로 sendmail 데몬을 Refresh 하면 된다. (/etc/rc.d/init.d/sendmail restart 로 해도 적용됨. 이것을 추천) ( 일반적으로 3M 의 파일을 첨부할시에 base64 로 인코딩하므로 전체메일사이즈가 5M 에 가깝게 됨 )

1.2 받는 메일 서버에서 받는 양 제한하는 법.

외부에서 서버로 들어오는 메일에 대해서 용량을 제한하고 싶다면 같은 파일(sendmail.cf) 에서 "Local and Program Mailer specification"부분을 설정해 주면 된다.

Mlocal,P=/usr/bin/procmail,F=lsDFMAw5:/|@qSPfhn9,S=10/30,
R=20/40,M=5024000,T=DNS/RFC822/X-Unix,A=procmail -Y -a $h -d $u


위와 같이 T=DNS/RFC822/X-Unix 앞부분에 M=5024000 부분을 추가해 주면 된다. 마찬가지로 5024000는 byte 단위이며 각자의 시스템 환경에 따라 원하는 용량만큼 적절히 설정해 주면 된다 역시 설정 변경 후 sendmail 을 refresh 하면 적용이 된다. 위의 경우 서버에서는 5메가 이상의 메일은 수신하지 않으며 5메가 이상의 메일을 보낸 이는

552 5.2.3 <antihong@tt.co.kr>...Message is too large;5024000 bytes max
554 5.0.0 <antihong@tt.co.kr>...Service unavailable
}} 와 같은 에러 메시지를 회신받게 된다. 아울러

#maximum number of recipients per SMTP envelope
O MaxRecipientsPerMessage=20


와 같은 부분이 있는데,이 부분은 한번에 메일 발송 시 동시 발송(참조 발송)이 가능한 메 일 계정의 수를 뜻하는 것으로 SMTP 서비스를 제공한다면 이 설정을 적용하는 것이 좋다. 기본적으로 이 값에도 제한이 없으므로 먼저 주석을 삭제한 후 적절한 값을 설정해 주면 한 번에 동시 발송 가능한 메일의 수도 제한할 수 있다. (위의 경우에는 한번에 참조 발송이 가능한 메일 유저를 20명으로 제한) 설정이 끝난 후에는 killall –HUP sendmail 로 sendmail 을 재가동해주면 적용된다. (/etc/rc.d/init.d/sendmail restart 도 가능 )

1.3 메일 용량 쿼터 설정하기

각 유저의 홈페이지 공간에 대한 쿼터 설정방법은 잘 알고 있는데,Sendmail 을 제공시 메 일 용량 쿼터에 대한 설정은 잘 모르는 경우가 많이 있다.매일 쿼터에 대한 설정은 다소 복잡하기는 하지만 설정은 가능하다.기본적으로 각 유저의 메일은 /var/spool/mail/디렉 토리에 자신의 계정 소유로 저장이 되게 되는데 바로 이 특성을 이용하여 쿼터 설정이을 하 면 된다.쿼터는 각 파일 시스템별로 각각 설정이 가능하므로 각 유저의 홈디렉토리외에 /var 파티션에도 추가적으로 쿼터를 설정하면 되는 것이다. 쿼터를 설정하는 방법은 일반적인 방법과 동일하다. 먼저 /etc/fstab 파일을 열어 /var 파티션이 별도로 설정되어 있다면 /var 파티션에,별도 로 없으면 /파티션에 유저쿼터나 또는 그룹쿼터 설정을 하면 된다.

/dev/sda1 /home ext2 defaults,usrquota=/home/.quota
/dev/sda8 /var ext2 defaults,usrquota=/var/.mailquota


위에서는 /home 파티션에도 쿼터 설정을 하고 /var 파티션에도 쿼터 설정을 한 것을 볼 수 있다.이후 touch /home/.quota 및 touch /var/.mailquota 로 사이즈가 0인 파일을 생성한 후 quotacheck –a 를 실행하면 파일 시스템을 스캔하여 디스크 사용량을 체크하여 해당 파일에 정보를 저장한다. edquota user 를 실행하면

/dev/sda1:blocks in use:0,limits (soft =99980,hard =99980)
inodes in use:0,limits (soft =0,hard =0)
/dev/sda8:blocks in use:0,limits (soft =29980,hard =29980)
inodes in use:0,limits (soft =0,hard =0)


위와 같이 쿼터 설정이 나오는데,여기에서 /dev/sda1 은 /home/디렉토리에 대한 쿼터 설정이고,/dev/sda8 은 /var/디렉토리에 대한 쿼터 설정이다.위 설정으로 각각 /home 디 렉토리에는 100메가로,메일 용량은 30메가로 총 130메가를 할당하여 쿼터를 설정한 것을 알 수 있다.만약 별도의 /var 파티션이 없이 /파티션만 있는 상황에서 100 메가로 쿼터 설정을 했다면 이 용량은 홈페이지의 용량과 메일 용량을 합쳐서 100메가로 적용이 되므로 주의하기 바란다.

1.3.1 참고.Quota 의 설정에 대해

위와 같이 edquota 사용시 관련된 라인이 아래와 같이 보이는 부분이 있다.이 중 "blocks in use:"는 유저가 현재 파티션에서 사용중인 총 블럭의 수를 킬로바이트로, "inodes in use:"는 유저가 현재 파티션에서 사용중인 총 파일의 개수를 보여준다. 이 두개의 "blocks in use:"와 "inodes in use:"는 시스템에 의해 자동으로 설정되고 제어되므로 이 값을 임의로 변경할 필요는 없다. 그리고 quota 설정시 soft 제한(soft =5000)은 유저가 사용할 수 있는 최대 용량을 뜻하 며 (이 예제에서는 약 5M 이다.)hard 제한(hard =6000)은 유저가 초과할 수 없는 절대 적인 디스크 사용량을 뜻한다."hard limit"는 "grace period"옵션이 설정되었을 때에만 적용된다. grace period 는 쿼터가 설정된 유저나 그룹이 soft limit 을 초과한 이후에도 사용 가능한 시간의 한계이다.예를 들어서 여러분이 관리하는 시스템에 "해당 유저의 홈디렉토리를 50MB 로 쿼터 제한하고 초과시 7일간의 유예기간을 준다"는 정책을 세울 수도 있다.각 자 유예 기간의 설정에 대해서는 나름대로 적당하다고 생각하는 기간을 정의할 수 있다. grace period 는 edquota –t 로 확인 및 설정할 수 있으며 아래의 경우에는 grace period 가 7일로 설정되어 있는 것을 알 수 있다.

/dev/sd1:block grace period:7 days,file grace period:7 days
/dev/sda8:block grace period:7 days,file grace period:7 days


그리고 한 유저에게 적용된 쿼터 설정을 다른 유저에게도 그대로 적용하려면 –p 옵 션을 사용하면 되는데,아래와 같이 실행하면 edquota 프로그램은 /etc/passwd 에 정 의된 유저중 UID 가 499 이후의 모든 유저에 대해 "user"의 쿼터 설정을 그대로 복사하 게 된다.

edquota -p user `awk -F:'$3 >499 {print $1}'/etc/passwd`


만일 사용자가 제한량을 넘게되면, 에러메세지를 출력하면서 메일수신을 하지 않는다.

2 바이러스 메일 필터링 방법

최근에 Sircam 이나 Nimda 등 일정 주기마다 발생하는 바이러스 메일 때문에 서버 관리자 들은 마음 고생이 이만저만이 아니다.Sendmail 에서는 이러한 바이러스 메일이나 스팸메일 에 대해 룰셋(ruleset)을 이용하여 차단하는 기능이 있는데,이를 사용하는 방법에 대해 알 아보도록 하자. Sendmail 에서는 제목이나 메일러 또는 첨부파일의 화일명등 각종 메일헤더 정보를 이용하 여 필터링을 할 수 있는데,먼저 발송되는 메일 제목(subject)으로 필터링을 해 보도록 하자. 아래는 메일 제목에 ILOVEYOU 로 발송하는 멜리사 바이러스를 차단하는 룰셋을 적용해

본 예이다. 먼저 sendmail.cf 파일을 열어 제일 하단에 아래의 내용을 추가한다.

HSubject:$>Check_Subject
D{WORMmsg}Access Denied -This message may contain a virus.
SCheck_Subject
RILOVEYOU $#error $:501 ${WORMmsg}
RRe:ILOVEYOU $#error $:501 ${WORMmsg}
RFW:ILOVEYOU $#error $:501 ${WORMmsg}


#주의 :$#error 앞의 blank는 스페이스가 아니라 반드시 탭으로 띄워주어야 한다. Sendmail.cf 의 설정 내용이 다소 어렵고 복잡하기는 한데,위 설정의 의미를 간단히 살펴보도록 하자.

  • H --위 경우에는 헤더에서 Subject:라는 문자열을 찾아 이 헤더를 Check_Subject로
정의한다.

  • D --WORMmsg 라는 매크로를 정의하여 해당 룰셋에 적용되는 제목을 확인시 발송한
유저에게 보낼 메시지를 정의한다.

  • S --헤더에서 check_subject로 정의한 부분을 룰셋으로 지정하는 부분이다.
  • R --해당 문자열이 포함된 메일을 발견시 앞에서 정의한 에러 메세지를 첨부하여
반송을 시킨다.

위와 같이 룰셋을 적용하였을 경우 "I LOVE YOU"와 같이 공란이 있을 경우 적용되지 않으며 "ILOVEYOU from me"와 같이 특정 단어가 추가시에도 적용되지 않으며 반드시 정확히 일치하여야 한다.추가적으로 회신시 추가되는 Re:와 전달(포워딩)시 추가되는 FW:가 추가된 메일도 거부한다.

다음으로 얼마전 유행했던 Sircam 바이러스 메일을 필터링해 보도록 하자. Sircam 바이러스의 헤더를 보면 정상적인 메일과는 달리 메일 헤더에 Content-Disposition:Multipart message 와 같은 부분이 추가되어 있으며 이 특징을 이용 하여 필터링을 하면 된다. Sendmail.cf 파일에 아래의 룰셋을 추가하면 된다.

HContent-Disposition:$>check_sircam
D{SIRCAM}"Warning:I Guess Sircam.worm Virus"
Scheck_sircam
RMultipart message $#error $:550 ${SIRCAM}


#주의 :$#error 앞의 blank는 스페이스가 아니라 탭으로 띄워주어야 한다. sendmail.cf의 수정을 끝낸 후 바로 sendmail을 재 시작하지 말고 룰셋이 정상적으로 작동하고 있는지 아래와 같이 테스트를 하는 것이 좋다.

#/usr/lib/sendmail &#8211;bt #테스트 모드로 접속
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter
>check_sircam Multipart message #Sircam 룰셋 테스트
check_sircam input:Multipart message
check_sircam returns:$#error $:550 553 Warning:Virus
>ctrl-D #테스트 종료


위와 같이 확인된 후 sendmail을 재시작(killall –HUP sendmail)하면 바로 적용된다. 아래와 같이 tail –f /var/log/maillog 로 로그 파일을 지켜보면 아래와 같이 실제로 Sircam 바이러스가 필터링되고 있음을 확인할 수 있다.

Sep 27 15:09:51 www sendmail [21386 ]:f8369of21386:to=<antihong@tt.co.kr>,
Guess Sircam.worm Virus.


마지막으로 최근에 가장 영향을 많이 주었던 변형된 Nimda Worm 을 필터링하는 방법에 대해 알아보자.Nimda Worm 은 정상적인 메일 메시지와 달리 헤더에 boundary="====_ABC1234567890DEF_===="나 라는 부분이 있는데,이 부분으로 필터 링을 할 수 있다.즉 메일 헤더에 위와 같은 설정이 되어 있으면 Nimda Worm 으로 간주 하고 필터링 하면 되는 것이다.Sircam 에서와 같은 방법으로 sendmail.cf 파일의 설정은 아래와 같다.

HContent-Type:$>check_ct
D{NIMDA}"I guess NIMDA.WORM!!!"
Scheck_ct
R$+boundary="====_ABC1234567890DEF_===="$#error $:550 ${NIMDA}
R$+boundary="====_ABC123456j7890DEF_===="$#error $:550 ${NIMDA}


3 메일이 수신이 안되는 경우

아웃룩 익스프레스에서 “배달 ”을 눌러 메일을 수신하려고 할 때 메일이 받아지지 않는 경 우가 있다.이러한 경우에는 아래와 같이 여러가지 이유가 있을 수 있으니 아래의 사항에 대해 하나씩 원인을 찾아보기 바란다.

3.1 (1)IMAP 패키지가 설치되지 않았을 경우

서버에 배달되어 있는 자신의 계정으로 온 메일을 클라이언트 PC에서 받으려면 pop3 데몬이 반응하게 된다.pop3d 는 IMAP 패키지안에 포함되어 있으므로,IMAP 패키지 를 설치하여야 pop3 를 사용할 수 있다.Rpm 으로 설치했다면 rpm –q imap 으로 현 재 시스템에 imap 패키지가 설치되어 있는지 확인한다.또는 /usr/sbin/ipop3d 파일이 있는지 확인해 본다.

3.2 (2)Inetd 에 설정되어 있지 않을 경우

pop3d 는 inetd 또는 Xinetd 에서 작동하게 된다. /etc/inetd.conf 또는 /etc/xinetd.conf 파일을 살펴보아 ipop3 가 주석처리 되어 있거 나 pop3 가 disable =yes 로 되어 있지는 않은지 확인한다.

3.3 (3)TCP Wrapper 에 설정되었는지 여부 확인

/etc./hosts.deny 에 pop3d 접근이 차단되지는 않았는지 확인한다.

3.4 (4)계정에 Lock 이 걸리지 않았는지 확인

메일을 받는 과정에서 갑자기 회선이 끊기거나 PC가 다운되는 등 비정상적으로 종료 시 서버의 pop3d 프로세스가 죽지 않고 계속 남아 있는 경우가 있다. 이러한 경우 계정에 “Lock 이 걸렸다 ”라고 하며 이러한 경우에는 해당 프로세스를 찾 아 kill 을 하면 된다.만약 계정에 Lock 이 걸린 상태에서 아웃룩 익스프레스에서 메일을 수신하려고 하면 아래와 같은 에러가 나게 된다. “메일 서버에 로그온하는 데 문제가 있습니다.지정한 암호가 거부되었습니다. 계정:'temazone.com',서버:'tt.co.kr',프로토콜:POP3,서버 응답: '-ERR Can't get lock.Mailbox in use',포트:110,보안(SSL):아니오, 서버 오류:0x800CCC90,오류 번호:0x800CCC92 ” 변경 설정) pop-3 stream tcp (6)110 번 포트로 확인 Trying 210.17.6.5... quit +OK Sayonara

3.5 (5)Pop3 접속이 많은 경우

Pop3d 가 서비스되는 inetd는 기본적으로 60초동안 40회의 접속을 받아들이 도록 (즉,maximum 40회 fork되도록)설정되어 있다.따라서 짧은 시간에 pop3d 요구가 많을 경우에는 메일로그에 pop3/tcp server failing (looping)라는 메시지가 나면서 pop3d 데몬 자체가 다운되어 버리므로 동시에 처리 가능한 프로세스의 한계 를 적절히 높여주어야 한다. 이를 위해서는 /etc/inetd.conf 를 열어 아래와 같이 수정하면 된다. 이전설정)

pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d


바뀐설정)

pop-3 stream tcp nowait:200 root /usr/sbin/tcpd ipop3d


(위의 경우 처리 가능한 프로세스를 200회로 늘려주었다.

3.6 (7)mail –v 로 확인

타 서버에서 mail –v antihong@tt.co.kr 와 같이 메일을 발송하여 정상적으로 메일이 도착 하는지를 확인해 본다.–v 옵션을 이용하여 메일 발송시에는 메일 전송의 경로 및 메일 서 버간에 주고받는 메시지를 확인할 수 있으므로 문제의 원인을 찾는데 도움이 된다.

4 센드메일 오류


4.1 Transient parse error -- message queued for future delivery

4.2 Name server: domain: host not found



sendmail 8.12 이후부터는 AAAA(IPv6), A, MX 순서로 도메인을 찾는다. 그런데 DNS가 AAAA를 제대로 지원하지 않을 경우 sendmail이 DNS에 질의를 하는 과정에서 오류가 생긴다.

$ dig 도메인이름 aaaa


했을 때 status에 NOERROR 대신 SERVFAIL이 나오면 DNS에 문제가 있는 것이다.

근본적인 해결책은 DNS 관리자에게 고쳐 달라고 하는 것이지만([http]http://www.sendmail.org/compiling.html#DNS), 그게 안 될 때는 /etc/mail/sendmail.mc, /etc/mail/submit.mc에

define(`confBIND_OPTS', `WorkAroundBrokenAAAA')dnl

을 추가하여 m4로 각각 sendmail.cf, submit.cf를 생성한 뒤에 sendmail을 재시동하면 문제를 회피할 수 있다.


http://wiki.kldp.org/wiki.php/Sendmail%20Tip
이올린에 북마크하기
2008/05/07 10:09 2008/05/07 10:09

사이트 비밀번호 입력하기

Posted at 2008/05/02 00:44 // in Linux // by 엔신
노출이 되서는 안되는 페이지라면 아래 php 구문으로 비밀번호를 입력하게끔 설정한다.
소스에서 가장 상단에 php 내용 삽입해주면 된다.(존재한다면 사이에 넣어주면됨)
로그인하는 페이지라면 상단에 삽입하여 서로 다른 아이디와 비밀번호로
이중 비밀번호로 보안을 철저히 할 수 있다.
퍼온거지만 출처는 불분명함

<?php
//여기서부터
$admin_id="아뒤"; //인증창이뜨면 넣을 아뒤
$admin_pwd="비번"; //넣을 비번
// 위 두가지는 자신의 디비설정이랑 상관없이 맘대로 만드시면 됩니다..
// 그리고 필요할때마다 바꿔서 쓰실수 있습니다..
function auth_User() {

        Header("WWW-authenticate: basic realm=\"Mysql Controller For Owner\" ");
        Header("HTTP/1.0 401 Unauthorized");
        echo ("
                <SCRIPT>
                alert('Fail! GO Away!');
                history.go(-1);
                </SCRIPT>");
        exit;
}

if($admin_id != $PHP_AUTH_USER || $admin_pwd != $PHP_AUTH_PW) {

        auth_User();

} else {
       
                SetCookie ("Haze_Name", $PHP_AUTH_USER);
                SetCookie ("Haze_Pwd", crypt("sw",$PHP_AUTH_PW));
                Header("HTTP/1.0 401 Unauthorized");
        }

//여기 위에 까지입니다.
?>
이올린에 북마크하기
2008/05/02 00:44 2008/05/02 00:44

httpd reload versus restart

Posted at 2008/04/07 23:52 // in Linux // by 엔신
doing /etc/init.d/httpd restart

- causes the current httpd to exit, which means for a time the server
    looks like it is down
- 짧은 시간동안 서버가 다운된 것으로 보인다.

doing /etc/init.d/httpd reload

- does not cause the current server to exit, which means connections
    are never refused and thus the server never looks down (but rather
    slow for a short period of time)
- 서버가 다운된 것 처럼 보이지는 않지만 잠시 느려진 것 같이 보인다. (~ 파일을 다시 읽는다. 하지만 오래 걸린다)

- does cause the server to reread all config files, and re parse all
    perl .pm files
-모든 환경설정파일이랑 분석파일을 다시 읽는다. 서버가.

- but will cause all long running httpd daemon requests to exit
-그러나 그건 매우 오래걸리고 httpd daemon 이 종료할것을 요구할것이다.


Thus a /etc/init.d/httpd reload is generally safe to do if you want to
stick a small change into the .pm and cause the server to see these
changes with out disturbing users much.
그러므로 리로드는 만약 니가 pm에 대한 작은 변화를 하고 서버에 무슨 변화가 있는지 유저가 느낄지를 알기를 원할때 해라.
이올린에 북마크하기
2008/04/07 23:52 2008/04/07 23:52

도메인앞에 www. 를 자동으로 붙이고 싶어요.

Posted at 2008/04/06 22:03 // in Linux // by 엔신
익스플러러 주소창에 abc.com 으로 접속을 하게 되면
자동으로 www.abc.com 으로 재접속 할 수 있도록 서비스가 가능합니다.

도메인이 계정에 다수개 연결되어 있을때 하나의 대표 도메인으로 통합 접속
할 수 있도록 서비스 하는데에도 동일한 방법이 이용됩니다.

주소창 : abc.com [이동] -> www.abc.com 으로 자동 변환

해당으로 처리를 희망하시는 경우
public_html/index.htm 혹은 index.html 파일의 첫줄에

<?
if ($_SERVER["HTTP_HOST"]!="www.abc.com") header("location:http://www.abc.com");
?>

위 세줄을 넣어 주시면 됩니다.
내용중 abc.com 은 회원님의 도메인 명으로 수정을 해주시면 됩니다.

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

위 방법과 별개로 rewrite rule 를 이용한 조정도 가능합니다.
이는 개별 소스를 수정하지 않고도 전체적으로 적용이 가능합니다.

www/.htaccess 파일을 다운 받아 메모장으로 여신후에 수정
을 해주시면 됩니다. [점으로 시작하는 파일은 ftp 프로그램 옵션에서 숨김파일보기
옵션을 활성화 하시고 접속하시면 확인이 가능합니다]

.htaccess 파일에 아래 내용을 추가
(아래 예제는 82i.com 으로 접근시 www.82i.com 으로 이동되도록 설정한것임)
(적절히 수정하여 심으세요)


RewriteEngine On
RewriteCond %{HTTP_HOST} ^82i\.com$ [NC]
RewriteRule ^(.*)$ http://www.82i.com/$1 [R=301,L]

http://www.82i.com/@/zboard.php?id=faq&page=4&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=3

이올린에 북마크하기
2008/04/06 22:03 2008/04/06 22:03

SSH Brute Force 공격 방어

Posted at 2008/04/06 22:01 // in Linux // by 엔신
Brute Force 공격은 요즘 초보 크래커들에 의해 많이 이용되고 있는 공격 방법 중 하나이다.

Brute Force 공격이란 사전적인 단어들로 구성된 아이디와 패스워드 리스트를 가지고 계속적으로 로그인을 시도하는 것이다. 허술한 패스워드를 사용하는 계정은 이런 식으로 뚫리게 된다.

설사 크래커가 계정 로그인에 성공하지 않더라도 계속적인 로그인 시도로 서버부하를 잃으켜 차단 하지 안으면 다소 많은 시스템 자원이 낭비된다.

필자의 경우 이러한 공격은 매일 한국 뿐만 아니라 중국, 독일, 일본, 맥시코 등에서 꽤 자주 날라온다... (-_-) Qaris 서버의 로그파일의 수 많은 해킹 시도 기록을 보면서 방어 방법에 대해 고민을 했다.

구글에서 의외로 쉽게 그 해답을 찾을 수 있었다.

SSHD FILTER 라는 PERL 기반 프로그램이 있는데, 설치와 설정도 편리하고 IPTABLES 를 이용하여 공격자를 차단하기 때문에 매우 강력하다. 기본 설정으로 셋팅을 하면 SSHD 로 6회 이상 로그인 시도에 실패할 경우 IPTABLES를 이용하여 SSHD 포트에 대한 IP 차단을 한다.

필자의 경우 SSHD Filter 적용 후, 매일 걸러지는 공격자 IP 만 해도 거의 4~5 개에 달한다.

SSHD FILTER는 아래 주소에서 최신버전을 다운 받을 수 있다.
http://www.csc.liv.ac.uk/~greg/sshdfilter/

http://www.82i.com/@/zboard.php?id=faq&page=3&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=13
이올린에 북마크하기
2008/04/06 22:01 2008/04/06 22:01

아파치 DoS 방어

Posted at 2008/04/06 22:00 // in Linux // by 엔신
DoS(Denial of Service, 서비스 거부) 공격은 널리 알려져있고, 또한 구현하기 비교적 쉬운 서버 공격방법 중 하나이다. 우리나라 네티즌들이 아주 즐겨 사용하는 공격중 하나다. -_-...

DoS 공격은 대량으로 패킷을 보내거나 요청하는 방식으로 공격이 이루어진다. 이때 서버의 과부하가 이루어지게 되어 결국 시스템 다운되거나, 시스템 다운을 방지하기 위해 서버 자체서 서비스를 중단하게 된다.

DoS 공격에 가장 많이 노출된 서버는 80번 포트를 열어둔 웹서버가 아닐까 싶다.

만약 아파치 웹서버를 이용하는 경우 DoS 를 방어할 수 있는 작으면서 비교적 강력한 모듈이 있다.

Nuclearelephant (핵 코끼리? -_-) 에서 개발한 mod_evasive 라는 모듈이다.



URL: http://www.nuclearelephant.com/projects/mod_evasive/

본 모듈은 아파치 서버 모듈 설정에서 정한 값 이상의 연속 http 요청을 했을 경우 자동으로 IP 차단이 이루어지게 된다.

모듈 설치는 readme 파일을 따라서 하면 그리 어렵진 않다. (설치 매뉴얼 생략)

설치 후 httpd.conf 파일 안에 다음과 같은 설정을 입력하여 준다.

<IfModule mod_evasive.c>
 DOSHashTableSize    3097
 DOSPageCount        20
 DOSSiteCount        100
 DOSPageInterval     1
 DOSSiteInterval     1
 DOSBlockingPeriod   10
 DOSEmailNotify      admin@asd.com
 DOSLogDir           "/var/lock/mod_evasive"
 DOSWhitelist        127.0.0.1
</IfModule>

설정에 대한 설명은 다음과 같다.


1. DOSPageCount: 몇개의 연속 pagehit 에 대해 차단 조치를 할 것인가에 대한 설정.
2. DOSSiteCount: 몇개의 연속 site 접속에 대해 차단 조치를 할 것인가에 대한 설정.
3. DOSPageInterval: pagehit 에 대한 "허용될 연속 접속 사이의 시간 간격"을 (초) 단위로 입력.
4. DOSSiteInterval: site 접속에 대한 "허용될 연속 접속 사이의 시간 간격"을 (초) 단위로 입력.
5. DOSBlockingPeriod: 차단된 호스트가 풀릴 때 까지의 시간을 (초) 단위로 입력.
6. DOSEmailNotify: 공격에 대한 정보를 보낼 메일 주소.
7. DOSLogDir: 로그파일 경로
8. DOSWhitelist: 차단에서 제외될 호스트
필자의 설정을 설명하자면 다음과 같다.

** 동일한 호스트로부터 "1초" 사이에 "20번" 이상의 pagehit 가 이루어질 경우 호스트 차단.
** 동일한 호스트로부터 "1초" 사이에 "100번" 이상의 site 접속 이 이루어질 경우 호스트 차단.
** 차단된 호스트는 10초 동안 차단한다.
** DoS 공격이 이루질 때 admin@asd.com 으로 메일을 보낸다.
** 127.0.0.1 은 차단 조치를 하지 않는다.

http://www.82i.com/@/zboard.php?id=faq&page=3&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=14

이올린에 북마크하기
2008/04/06 22:00 2008/04/06 22:00

리눅스에서 text 인코딩 한꺼번에 바꾸기

Posted at 2008/04/06 21:59 // in Linux // by 엔신
필자는 최근까지 인코딩으로 EUC-KR 을 절대적으로 고수해왔다.
하지만 최근 ajax에 빠지면서 UTF-8 으로 바꿔야 할 필요성을 절실히 느껴서 서버 셋팅을 몽땅 UTF-8 으로 갈아 엎게 되었다.

하지만 문제는....

기존에 개발했던 스크립트는 모두 EUC-KR 로 되어 있어서 한글이 모두 깨지고 주석 달아 놓은것도 알아볼 수 없는 상황이 되었다.

약간의 구글링 끝에 좋은 해결 방법을 발견해서 소개한다.

GNU 에서 배포하는 recode 라는 작은 프로그램이 있다.
(http://www.gnu.org/software/recode/recode.html)

필자는 우분투 리눅스를 사용하고 있는데 설치는 3초도 안걸렸다.
apt-get install recode :)

사용방법은 매우 간단하다.
쉘에서 다음과 같이 입력하면된다.

recode -v <소스인코딩>...<출력인코딩> <파일명>

가장 마음에 드는 점은 와일드카드 (*) 를 지원해서 파일들을 한꺼번에 인코딩 변환이 가능하다.

recode -v EUC-KR...UTF-8 *.php

recode -l 을 치면 지원하는 모든 charset 을 볼 수 있다. :)

http://www.82i.com/@/zboard.php?id=faq&page=3&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=17

centos에서도 설치가능 yum install recode


이올린에 북마크하기
2008/04/06 21:59 2008/04/06 21:59

아파치 2.x 에서의 트래픽 제한

Posted at 2008/04/06 21:54 // in Linux // by 엔신
글쓴이: 티니 (2007년 01월 12일 오전 12:10) 읽은수: 817

--------------------------------------------------------------------------------------
- 작성자 : 김혁중(티니) [sky(golbangi or at)tini4u.net]
- 작성일 : 2007-01-11
- 사이트 : http://linux.tini4u.net/
- 원제목 : 아파치 2.x 에서의 트래픽 제한
- 환 경 : CentOS 4.4, apache 2.2
- 키워드 : mod_cband
--------------------------------------------------------------------------------------
지난 강좌에서 아파치 1.x에서의 트래픽을 제한하는 모듈을 설명해 드렸습니다.
하지만 throttle 모듈은 아파치 1.x에서만 작동하기 때문에 아파치 2.x를 사용하시는 분들은
사용할 수 없다는 최대단점이 있습니다.
또한 최근엔 Legacy 딱지가 붙은 아파치 1.x보다는 최신버전인 아파치 2.x를 사용하시는 분들이
꽤 많기 때문에 그런 분들은 트래픽 제한을 하는데 있어 곤란함을 겪을 수 있습니다.
그렇지만 아파치 2.x에서도 트래픽을 제한할 수 있는 모듈이 있습니다. 바로 cband 모듈 인데요.
이 모듈은 throttle과 매우 흡사한 기능과 구조를 가지고 있지만, 트래픽을 제한하는 기능 말고도
또 한가지의 기능이 있습니다.
바로 대역폭을 제한하는 bandwidth 기능 입니다.
기존 아파치 1.x에서는 트래픽제한은 throttle 모듈을, 대역폭제한은 bandwidth 모듈을 이용했습니다.
그러나 아파치 2.x에서는 cband 모듈을 이용함으로써 두가지의 기능을 모두 사용할 수 있습니다.
또한 xml 형태로의 데이터까지 얻을 수 있기 때문에 관리자 입장에서 매우 반가울 수 밖에 없습니다.

1. mod_cband 설치 (최신버전: http://cband.linux.pl/)
[root@localhost]# wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
[root@localhost]# tar xfz mod-cband-0.9.7.5.tgz
[root@localhost]# cd mod-cband-0.9.7.5
[root@localhost]# ./configure --with-apxs=/usr/sbin/apxs
[root@localhost]# make
[root@localhost]# make install


2. 아파치 환경설정에서의 cband 설정
cband 모듈 또한 throttle와 마찬가지로 3rd-party 모듈이기 때문에 아파치에서 설정을 합니다.
[root@localhost]# vi /etc/httpd/conf/httpd.conf
<IfModule mod_cband.c>
   <Location /cband-status>
       SetHandler cband-status
       Order Deny,Allow
       Deny from All
       Allow from 127.0.0.1 100.100.100.100
   </Location>

   <Location /cband-me>
       SetHandler cband-status-me
       Order deny,allow
       Deny from all
       Allow from all
   </Location>
</IfModule>


※ SetHandler 설명
cband-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
cband-me -> 사용자 페이지 입니다.

3. cband 적용
cband는 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
아래는 여러가지 지시자중 하나인 가장 많이 사용되는 CbandLimit을 사용한 예제 입니다.
※ 각각의 호스트에 따로따로 설정해줄 때
<VirtualHost 192.168.0.1>
   ServerName foobar.com
   ServerAlias www.foobar.com
   DocumentRoot /home/foobar/public_html
   ErrorLog logs/foobar-err
   CustomLog logs/foobar-acc combined
   CBandLimit 100Mi
   CBandPeriod 1D
</VirtualHost>


※ 위 설정은 1Day 동안 100M의 트래픽을 허용하겠다는 설정입니다.

※ 하나의 유저(foobar)가 여러개의 호스트를 사용하고 있는 경우 (트래픽 공유)
<CBandUser foobar>
   CBandUserLimit 100Mi
   CBandUserPeriod 1D
</CBandUser>

<VirtualHost 192.168.0.1>
   ServerName foobar.com
   ServerAlias www.foobar.com
   DocumentRoot /home/foobar/public_html
   ErrorLog logs/foobar-err
   CustomLog logs/foobar-acc combined
   CBandUser foobar
</VirtualHost>

<VirtualHost 192.168.0.1>
   ServerName foobar2.com
   ServerAlias www.foobar2.com
   DocumentRoot /home/foobar2/public_html
   ErrorLog logs/foobar2-err
   CustomLog logs/foobar2-acc combined
   CBandUser foobar
</VirtualHost>


※ 위 설정은 foobar 유저에게 1Day 동안 100M의 트래픽을 허용하겠다는 설정이며,
foobar.com과 foobar2.com에서 foobar 유저의 트래픽을 공유해서 사용하겠다는 것입니다.

4. cband 단위
- 전송속도 단위
kbps, Mbps, Gbps - bits per second, 의미: 1024, 1024*1024, 1024*1024*1024 bps
kb/s, Mb/s, Gb/s - bytes per second, 의미: 1024, 1024*1024, 1024*1024*1024 b/s
기본값 : kbps

- 트래픽 제한 단위
K, M, G - bytes, 의미: 1000, 1000*1000, 1000*1000*1000 bytes
Ki, Mi, Gi - bytes, 의미: 1024, 1024*1024, 1024*1024*1024 bytes
기본값: K

- 시간 단위
S, M, H, D, W - 초, 분, 시간, 일, 주. 의미: 1, 60, 3600, 86400, 604800 Seconds
기본값: S


5. cband 지시자
이름: CBandDefaultExceededURL
설명: 제한을 초과했을때 보여줄 URL
문맥: Server config
문법: CBandDefaultExceededURL [URL]
예제: CBandDefaultExceededURL http://foobar.com/503.html

이름: CBandDefaultExceededCode
설명: 제한을 초과했을시 보여줄 에러 코드
문맥: Server config
문법: CBandDefaultExceededCode [HTTP_CODE]
예제: CBandDefaultExceededCode 509

이름: CBandScoreFlushPeriod
설명: scoreboard 파일에 기록할 요청수를 정하나, cband 퍼포먼스에 영향을 미칩니다.
기본값: 1
문맥: Server config
문법: CBandScoreFlushPeriod [요청수]
예제: CBandScoreFlushPeriod 100
    100번의 요청이 들어오면 scoreboard 파일에 한번 기록합니다.

이름: CBandSpeed
설명: 가상호스트 도메인의 최대 속도, 요청수, 접속수 설정
문맥: <Virtualhost>
문법: CBandSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수
예제: CBandSpeed 1024 10 30
    호스트에 대해 1024kbps 전송속도로 제한하며, 초당 10개의 요청을 처리하고,
    동시 접속을 30개로 제한합니다.

이름: CBandRemoteSpeed
설명: 호스트 접속자의 최대속도, 요청수, 접속수 제한
문맥: <Virtualhost>
문법: CBandRemoteSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수
예제: CBandRemoteSpeed 20kb/s 3 3
    호스트 접속자에 대해 1024kbps 전송속도로 제한하며,
    초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다.

이름: CBandClassRemoteSpeed
설명: IP class의 최대속도, 요청수, 접속수 제한
문맥: <Virtualhost>
문법: CBandClassRemoteSpeed [class_name] [kbps] [rps]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수
예제:
<CBandClass googlebot_class>
  CBandClassDst 66.249.64/24
  CBandClassDst 66.249.65/24
  CBandClassDst 66.249.79/24
</CBandClass>
CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
googlebot_class 클래스에 대해 20kb/s 전송속도로 제한하며,
초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다.

이름: CBandRandomPulse
설명: 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 방법입니다.
문맥: Global
문법: CBandRandomPulse [On/Off]
예제: CBandRandomPulse On

이름: CBandLimit
설명: 제한할 전송량을 설정한다.
문맥: <Virtualhost>
문법: CBandLimit [limit]
    limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)
예제: CBandLimit 10M
    전송량을 10M(10*1000*1000bytes)로 제한한다.
    CBandLimit 10Mi
    전송량을 10M(10*1024*1024bytes)로 제한한다.

이름: CBandClassLimit
설명: IP class에 대해 제한할 전송량 설정
문맥: <Virtualhost>
문법: CBandClassLimit [class_name limit]
    class_name - 클래스 이름
    limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)

이름: CBandExceededURL
설명: 제한을 초과했을때 보여줄 URL
문맥: <Virtualhost>
문법: CBandExceededURL [URL]
예제: CBandExceededURL http://foobar.com/503.html

이름 : CBandExceededSpeed
설명: 전송량을 초과했을때의 전송속도 제한 설정
문맥: <Virtualhost>
문법: CBandExceededSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수

이름: CBandScoreboard
설명: 가상호스트의 scoreboard 파일 지정
문맥: <Virtualhost>
문법: CBandScoreboard [path]

이름: CBandPeriod
설명: 제한기간
문맥: <Virtualhost>
문법: CBandPeriod [period]
    period - 사용단위: S(초), M(분), H(시간), D(일), W(주)
예제: CBandPeriod 1D

이름 : CBandPeriodSlice
설명: 기간을 나눌 기간 명시
기본값: slice_len = limit
문법: CBandPeriodSlice [slice_length]
예제: CBandLimit 100G
    CBandPeriod 4W
    CBandPeriodSlice 1W
지정된 제한값을 1주일 단위로 나누어 사용 합니다.
위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다.

이름: <CBandUser>
설명: 새로운 cband 가상 사용자 설정
문맥: Server config
문법: <CBandUser user_name>

이름: CBandUserSpeed
설명: cband 가상 사용자의 속도, 요청수, 동시 접속수 제한
문맥: <CBandUser>
문법: CBandUserSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수
예제: CBandUserSpeed 100kb/s 10 5

이름: CBandUserLimit
설명: cband 가상 사용자의 전송 용량 제한
문맥: <CBandUser>
문법: CBandUserLimit [limit]
    limit - 사용용량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)
예제: CBandUserLimit 10M
    전송량을 10M(10*1000*1000bytes)로 제한한다.
    CBandUserLimit 10Mi
    전송량을 10M(10*1024*1024bytes)로 제한한다.

이름: CBandUserClassLimit
설명: cband 가상 사용자의 IP class에 대해 제한할 전송량 설정
문맥: <CBandUser>
문법: CBandUserClassLimit [class_name] [limit]
    class_name - 클래스 이름
    limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)

이름 : CBandUserExceededURL
설명: cband 가상 사용자의 제한을 초과했을때 보여줄 URL
문맥: <CBandUser>
문법: CBandUserExceededURL URL
예제: CBandDefaultExceededURL http://foobar.com/503.html

이름: CBandUserExceededSpeed
설명: cband 가상 사용자의 전송량을 초과했을때의 전송속도 제한 설정
문맥: <CBandUser>
문법: CBandUserExceededSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수

이름: CBandUserScoreboard
설명: cband 가상 사용자의 scoreboard 파일 지정
문맥: <CBandUser>
문법: CBandUserScoreboard [path]

이름: CBandUserPeriod
설명: cband 가상 사용자의 제한기간
문맥: <CBandUser>
문법: CBandUserPeriod [period]
    period - 사용단위: S(초), M(분), H(시간), D(일), W(주)
예제: CBandPeriod 1D

이름: CBandUserPeriodSlice
설명: cband 가상 사용자의 기간을 나눌 기간 명시
기본값: slice_len = limit
문맥: <CBandUser>
문법: CBandUserPeriodSlice [slice_length]
예제: CBandLimit 100G
    CBandPeriod 4W
    CBandPeriodSlice 1W
지정된 제한값을 1주일 단위로 나누어 사용 합니다.
위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다.


6. 통계화면 보기
관리자모드 - http://foobar.com/cband-status
관리자모드(xml) - http://foobar.com/cband-status?xml
사용자모드 - http://foobar.com/cband-me
사용자모드(xml) - http://foobar.com/cband-me?xml

7. 통계화면에 아파치 인증 걸기
throttle 강좌에서도 말씀드렸지만 통계화면의 제한은 IP의 형태로 제한을 하는게 정설입니다.
그렇지만 IP가 자주 변경되는 분들은 매번 IP를 변경해주는것도 하나의 일이 될 수 있습니다.
따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
[root@localhost]# vi /etc/httpd/conf/httpd.conf
<IfModule mod_cband.c>
   <Location /cband-status>
       SetHandler cband-status
       AuthName "트래픽관리 페이지"
       AuthType Basic
       AuthUserFile /home/foobar/.htpasswd
       require valid-user
   </Location>

   <Location /cband-me>
       SetHandler cband-status-me
       Order deny,allow
       Deny from all
       Allow from all
   </Location>
</IfModule>
[root@localhost]# htpasswd -c /home/foobar/.htpasswd ID

http://www.82i.com/@/zboard.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=44
이올린에 북마크하기
2008/04/06 21:54 2008/04/06 21:54

mod_cband 제한 관련내용

Posted at 2008/04/06 21:52 // in Linux // by 엔신
6. 지시자 및 단위 설명
 1) 단위.
   * 전송속도 단위
         o kbps, Mbps, Gbps - bits per second: 1024, 1024*1024 , 1024*1024*1024 bps
         o kb/s, Mb/s, Gb/s - bytes per second:  1024, 1024*1024, 1024*1024*1024 b/s
         o 기본 : kbps


   * 트래픽 쿼터 단위
         o K, M, G - bytes: 1000, 1000*1000 ,1000*1000*1000 bytes
         o Ki, Mi, Gi - bytes: 1024, 1024*1024, 1024*1024*1024 bytes
         o 기본 : K


   * 시간(기간) 단위
         o S, M, H, D, W - 초, 분, 시간, 일, 주
         o 기본 : S


 2) 지시자들
    (1) 이름 : CBandDefaultExceededURL
         설명 : 제한을 초과했을때 보여줄 URL  (지정하지 않으면, 503 에러 페이지)
           문맥 : Server config
         문법 : CBandDefaultExceededURL URL


    (2)이름 : CBandDefaultExceededCode
        설명 : 제한을 초과했을시 보여줄 에러 코드
        문맥 : Server config
        문법 : CBandDefaultExceededCode HTTP_CODE
        예제 : CBandDefaultExceededCode 509  


    (3)이름 : CBandScoreFlushPeriod
        설명 : scoreboard 파일에 기록할 요청수, mod_cband 의 성능에 영향을 준다.
        기본값 : 1
        문맥 : Server config
        문법 : CBandScoreFlushPeriod 요청수
        예제 : CBandScoreFlushPeriod 100  ( 매 100번의 요청에 한번씩 scoreboard 파일에 기록)


    (4)이름 : CBandSpeed
        설명 : 가상호스트 도메인의 최대 속도, 요청수, 접속수  설정
        문맥 : <Virtualhost>
        문법 : CBandSpeed kbps rps max_conn
               kbps - 초당 최대 전송속도
               rps - 초당 최대 요청수
               max_conn - 최대 동시 접속수
        예제 : CBandSpeed 1024 10 30
                최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.


    (5)이름 : CBandRemoteSpeed
        설명 : 접속자(IP)의 최대속도, 요청수, 접속수 제한 (CBandSpeed와 비슷하지만, 접속자당 설정)
        문맥 : <Virtualhost>
        문법 : CBandRemoteSpeed kbps rps max_conn
                 kbps - 초당 최대 전송속도
                 rps - 초당최대 요청수
                 max_conn - 최대 동시 접속수
        예제 : CBandRemoteSpeed 20kb/s 3 3
                 접속자(ip)에대해 최대 20kb/s , 초당 3개의 요청, 동시 접속 3개로 제한.


    (6)이름 : CBandClassRemoteSpeed
        설명 : 정의한 class(ip 범위)에 대해 최대속도, 요청수, 접속수 제한
        문맥 : <Virtualhost>
        문법 : CBandClassRemoteSpeed class_name kbps rps
                 class_name - 이미 정의한 클래스 이름 (IP범위)
                 kbps - 초당 최대 전송속도
                 rps - 초당 최대 요청수
                 max_conn - 최대 동시 접속수
        예제 : <CBandClass googlebot_class>
                   CBandClassDst 66.249.64/24
                   CBandClassDst 66.249.65/24
                   CBandClassDst 66.249.79/24
                 </CBandClass>
                       CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
                       위에서 정의한 클래스(googlebot_class)의 요청에는 20kb/s 의 전송속도,
                      초당 3개의 요청, 동시 접속 3개로 제한.


    (7)이름 : CBandRandomPulse
        설명 : 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.
                  부하가 많을때는 자동 Off된다.
        문맥 : Global
        문법 : CBandRandomPulse On/Off


    (8)이름 : CBandLimit
        설명 : 제한할 전송량을 설정한다. (기간은 CBandPeriod 에서 설정)
        문맥 : <Virtualhost>
        문법 : CBandLimit limit
                 limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
        예제 : CBandLimit 10M
                   전송양을 10M(10*1000*1000bytes)로 제한한다.
                 CBandLimit 10Mi
                   전송양을 10M(10*1024*1024bytes)로 제한한다.


    (9)이름 : CBandClassLimit
        설명 : 정의한 class(ip범위)에 대해 제한할 전송량 설정.
        문맥 : <Virtualhost>
        문법 : CBandClassLimit class_name limit
                 class_name - 이미 정의한 클래스 이름(ip범위)
                 limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)


  (10)이름 : CBandExceededURL
        설명 : 제한을 초과했을시 보여줄 URL, 지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
        문맥 : <Virtualhost>
        문법 : CBandExceededURL URL


  (11)이름 : CBandExceededSpeed
        설명 : 전송양을 초과했을시 , 전송속도 제한 설정.
        문맥 : <Virtualhost>
        문법 : CBandExceededSpeed kbps rps max_conn
                 kbps - 초당 최대 전송속도
                 rps - 초당 최대 요청수
                 max_conn - 최대 동시 접속수


   (12)이름 : CBandScoreboard
        설명 : 가상호스트의 scoreboard 파일 지정. (성능향상을 위해 필요)
        문맥 : <Virtualhost>
        문법 : CBandScoreboard path
                 (path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)


   (13)이름 : CBandPeriod
        설명 : 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
        문맥 : <Virtualhost>
        문법 : CBandPeriod period
                 period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
        예제 : CBandPeriod 1W  (1주일)
                 CBandPeriod 14D  (14일)
                 CBandPeriod 60M  (60분)


  (14)이름 : CBandPeriodSlice
        설명 : 기간이 길때는 나눌 기간을 명시한다.
        기본값 : slice_len = limit
        문맥 : <Virtualhost>
        문법 : CBandPeriodSlice slice_length
        예제 : CBandLimit 100G
                 CBandPeriod 4W
                 CBandPeriodSlice 1W
                  4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
                  1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.


  (15)이름 : <CBandUser>
        설명 : 새로운 cband 가상 사용자 설정
        문맥 : Server config
        문법 : <CBandUser user_name>


  (16)이름 : CBandUserSpeed
        설명 : cband 가상 사용자의 속도, 요청수, 동시 접속수 제한
        문맥 : <CBandUser>
        문법 : CBandUserSpeed kbps rps max_conn
                 kbps - 초당 최대 전송속도
                 rps - 초당 최대 요청수
                 max_conn - 최대 동시 접속수
        예제 : CBandUserSpeed 100kb/s 10 5


  (17)이름 : CBandUserLimit
        설명 : cband 가상 사용자의 저송 용량 제한.
        문맥 : <CBandUser>
        문법 : CBandUserLimit limit
                 limit - 사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
        예제 : CBandUserLimit 10M
                 CBandUserLimit 10Mi


  (18)이름 : CBandUserClassLimit
        설명 : cband 가상 사용자의 정의한 class(ip범위)에 대해 제한할 전송량 설정
        문맥 : <CBandUser>
        문법 : CBandUserClassLimit class_name limit
                 class_name - 지정한 class(IP범위)이름
                 limit -사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)


  (19)이름 : CBandUserExceededURL
        설명 : cband 가상 사용자의, 제한을 초과했을시 보여줄 URL,
                  지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
        문맥 : <CBandUser>
        문법 : CBandUserExceededURL URL


  (20)이름 : CBandUserExceededSpeed
        설명 : cband 가상 사용자의, 전송양을 초과했을시 , 전송속도 제한 설정.
        문맥 : <CBandUser>
        문법 : CBandUserExceededSpeed kbps rps max_conn
                 kbps - 초당 최대 전송속도
                 rps - 초당 최대 요청수
                 max_conn - 최대 동시 접속수


 (21)이름 : CBandUserScoreboard
        설명 : cband 가상 사용자의, scoreboard 파일 지정.
        문맥 : <CBandUser>
        문법 : CBandUserScoreboard path
                 (path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)


 (22) 이름 : CBandUserPeriod
        설명 : cband 가상 사용자의, 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
        문맥 : <CBandUser>
        문법 : CBandUserPeriod period
                 period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
        예제 : CBandUserPeriod 1W
                 CBandUserPeriod 14D
                 CBandUserPeriod 60M


 (23)이름 : CBandUserPeriodSlice
        설명 : cband 가상 사용자의, 기간을 나눌 기간 명시
        기본값 : slice_len = limit
        문맥 : <CBandUser>
        문법 : CBandUserPeriodSlice slice_length
        예제 : CBandUserLimit 100G
                 CBandUserPeriod 4W
                 CBandUserPeriodSlice 1W
                  4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
                  1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.

http://www.82i.com/@/zboard.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=43
이올린에 북마크하기
2008/04/06 21:52 2008/04/06 21:52

lighttpd + php fastcgi + xcache 설치하기

Posted at 2008/04/06 21:51 // in Linux // by 엔신
APM이라는 말이 널리 이용될정도로 Apache + PHP + MySQL을 이용한 웹서비스들이 많이 생겼습니다.

Apache라는 웹서버는 초기 강력한 기능등으로 웹서버의 카테고리 킬러로 통할정도로 높은 점유율을 보유하고 있었습니다.

그런데 이 Apache가 범용적인 기능을 많이 보유하고 있고 또 메모리나 자원 점유율이 높은 편입니다.

아파치 1.x는 process단위이고 2.x는 thread를 이용하여 조금더 나아졌지만 자원 소모량등이 많은 것은 여전합니다.

이에 반해 lighttpd 는 non-blocking I/O로 단일 프로세스에서 실행되어 보다 가볍고 빠르다는 장점이 있습니다.

그리고 PHP를 다룰때 fastcgi기반으로 사용하기에 아파치의 mod_php와 비슷하거나 훨씬 빨라졌습니다.

lighttp는 apache의 모듈을 거의 다 쓸수 있다고 하네요. (실제 제게 필요한 모듈들은 다 있습니다)

lighttp에 php (enable fastcgi)를 연동하고 최근 각광받는 xcache를 이용하여 기존의 아파치+PHP보다 가볍고 빠른 웹서버 구축에 대해서 간단히 글을 쓰겠습니다.



php 설치
여기서는 php 5.2.0 을 기준으로 설치하도록 하겠습니다.
./configure의 옵션은 적당히 알아서 해주시면 됩니다. ( \ 역슬래시는 줄나눔의 의미이니 주의하세요)

view plaincopy to clipboardprint?
wget http://kr2.php.net/get/php-5.2.0.tar.gz/from/this/mirror  
tar xvfz php-5.2.0.tar.gz  
cd php-5.2.0  
./configure \  
--prefix=/usr/local/php  \  
--with-exec-dir=/usr/bin  \  
--with-mysql  \  
--with-sqlite  \  
--with-config-file-path=/etc  \  
--disable-debug  \  
--enable-sockets  \  
--with-png-dir=/usr/lib  \  
--with-freetype-dir=/usr/include/freetype2  \  
--enable-mod-charset  \  
--enable-calendar  \  
--enable-sysvsem=yes  \  
--enable-sysvshm=yes  \  
--enable-ftp  \  
--enable-magic-quotes  \  
--enable-gd-native-ttf  \  
--enable-inline-optimization  \  
--enable-bcmath  \  
--with-zlib  \  
--with-jpeg-dir=/usr/src  \  
--with-gd  \  
--with-ttf  \  
--with-gettext  \  
--enable-sigchild  \  
--with-libxml-dir=/usr/local/src/libxml2-2.6.11  \  
--with-zlib-dir=/usr/local/src/zlib-1.2.1  \  
--with-iconv  \  
--enable-fastcgi \  
--enable-force-cgi-redirect  
make  
make install  

wget http://kr2.php.net/get/php-5.2.0.tar.gz/from/this/mirror
tar xvfz php-5.2.0.tar.gz
cd php-5.2.0
./configure \
--prefix=/usr/local/php  \
--with-exec-dir=/usr/bin  \
--with-mysql  \
--with-sqlite  \
--with-config-file-path=/etc  \
--disable-debug  \
--enable-sockets  \
--with-png-dir=/usr/lib  \
--with-freetype-dir=/usr/include/freetype2  \
--enable-mod-charset  \
--enable-calendar  \
--enable-sysvsem=yes  \
--enable-sysvshm=yes  \
--enable-ftp  \
--enable-magic-quotes  \
--enable-gd-native-ttf  \
--enable-inline-optimization  \
--enable-bcmath  \
--with-zlib  \
--with-jpeg-dir=/usr/src  \
--with-gd  \
--with-ttf  \
--with-gettext  \
--enable-sigchild  \
--with-libxml-dir=/usr/local/src/libxml2-2.6.11  \
--with-zlib-dir=/usr/local/src/zlib-1.2.1  \
--with-iconv  \
--enable-fastcgi \
--enable-force-cgi-redirect
make
make install

이렇게 하면 php의 설치가 완료됩니다.
--enable-fastcgi, --enable-force-cgi-redirect는 필수입니다.

php.ini 파일은 /etc 디렉토리에 있는 것으로 설정하였습니다.
Zend Optimizer, eAccelerator등의 설치에 대해서는 소개하지 않습니다. :)

xcache 설치
xcache는 제로보드XE와 같은 class/object기반의 프로그램들을 보다 빠르고 가볍게 해주는 캐쉬 프로그램입니다.
APC나 eaccelerator 속도도 더 빠르다고 알려져 있구요.
php5.2.0에 돌아가는 xcache 1.2.1 을 기준으로 설치법을 알려드립니다.

wget http://xcache.lighttpd.net/pub/Releases/1.2.1/xcache-1.2.1.tar.gz
tar xvfz xcache-1.2.1.tar.gz
cd xcache-1.2.1
phpize
./configure --enable-xcache --enable-xcache-coverager
make
make install
cat xcache.ini >> /etc/php.ini

위에서 phpize나 configure시에 php 실행파일들의 경로 문제가 생길 수 있습니다.
1번처럼 php를 /usr/local/php/bin 에 실행파일이 생기게 했다면 아래와 같이 미리 PATH를 지정해주세요.

export PATH="$PATH:/usr/local/php/bin"

그 다음 /etc/php.ini 파일을 여세요.
만약 zend optimizer등을 설치하였다면 xcache 설정중 zend_extension이 zend optimizer보다 위에 있어야 합니다.

저는 아래와 같이 설정하였습니다.

view plaincopy to clipboardprint?
[xcache-common]  
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so  
[xcache.admin]  
xcache.admin.auth = On  
xcache.admin.user = "관리자 아이디"  
xcache.admin.pass = "md5 hash 비밀번호"  
[xcache]  
xcache.shm_scheme =        "mmap"  
xcache.size  =                64M  
xcache.count =                 4  
xcache.slots =                8K  
xcache.ttl   =                 0  
xcache.gc_interval =           0  
xcache.var_size  =            64M  
xcache.var_count =             4  
xcache.var_slots =            8K  
xcache.var_ttl   =             0  
xcache.var_maxttl   =          0  
xcache.var_gc_interval =     300  
xcache.test =                Off  
xcache.readonly_protection = On  
;xcache.mmap_path =    "/tmp/xcache"  
xcache.mmap_path =    "/dev/zero"  
xcache.coredump_directory =   ""  
xcache.cacher =               On  
xcache.stat   =               On  
xcache.optimizer =           On  
[xcache.coverager]  
xcache.coverager =          On  
xcache.coveragedump_directory = ""  

[xcache-common]
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so
[xcache.admin]
xcache.admin.auth = On
xcache.admin.user = "관리자 아이디"
xcache.admin.pass = "md5 hash 비밀번호"
[xcache]
xcache.shm_scheme =        "mmap"
xcache.size  =                64M
xcache.count =                 4
xcache.slots =                8K
xcache.ttl   =                 0
xcache.gc_interval =           0
xcache.var_size  =            64M
xcache.var_count =             4
xcache.var_slots =            8K
xcache.var_ttl   =             0
xcache.var_maxttl   =          0
xcache.var_gc_interval =     300
xcache.test =                Off
xcache.readonly_protection = On
;xcache.mmap_path =    "/tmp/xcache"
xcache.mmap_path =    "/dev/zero"
xcache.coredump_directory =   ""
xcache.cacher =               On
xcache.stat   =               On
xcache.optimizer =           On
[xcache.coverager]
xcache.coverager =          On
xcache.coveragedump_directory = ""


위의 설정중 xcache.admin.user와 xcache.admin.pass는 xcache 관리자 페이지를 사용할 경우 입력해주면 됩니다.
참고로 관리자 페이지는 xcache 소스중 admin 이라는 디렉토리에 있고 이 admin 디렉토리를 웹에서 접근할 수 있는 곳에 복사해주시면 됩니다.

xcache.size나 xcache.var_size는 적절히 해주시면 됩니다.
xcache.count와 xcache.var_count는 cpu process의 수를 적어주시면 됩니다.

cat /proc/cpuinfo |grep -c processor

위와 같이 명령어를 입력하면 프로세스의 수가 나옵니다.

lighttp 설치
공식사이트 : http://www.lighttpd.net
설치방법 ( 2007년 12월 24일 현재 최신 버전 기준)
view plaincopy to clipboardprint?
wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.gz    
tar xvfz lighttpd-1.4.18.tar.gz  
cd lighttpd-1.4.13  
./configure --with-pcre  
make  
make install  
cp doc/lighttpd.conf /etc  

wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.gz
tar xvfz lighttpd-1.4.18.tar.gz
cd lighttpd-1.4.13
./configure --with-pcre
make
make install
cp doc/lighttpd.conf /etc
위와 같이 하면 설치가 완료됩니다.

설정 파일
위 설치방법에서 lighttpd.conf 파일을 /etc 로 이동시켰습니다.
vi /etc/lighttpd.conf 해서 수정 작업 들어갑니다.

lighttpd의 경우 기본적으로 아파치에서 유용하게 사용되는 모듈들을 포함하고 있고 이를 사용하는 것은 lighttpd.conf 파일의 주석을 제거함으로 바로 사용가능합니다.

일단 lighttpd.conf 파일의 제일 위 부분을 보면 아래와 같습니다.

view plaincopy to clipboardprint?
server.modules              = (  
                              "mod_rewrite",  
#                               "mod_redirect",  
#                               "mod_alias",  
                               "mod_access",  
#                               "mod_cml",  
#                               "mod_trigger_b4_dl",  
                              "mod_auth",  
#                               "mod_status",  
#                               "mod_setenv",  
                              "mod_fastcgi",  
#                               "mod_proxy",  
                              "mod_simple_vhost",  
#                               "mod_evhost",  
#                               "mod_userdir",  
#                               "mod_cgi",  
                              "mod_compress",  
#                               "mod_ssi",  
#                               "mod_usertrack",  
#                               "mod_expire",  
#                               "mod_secdownload",  
#                               "mod_rrdtool",  
                               "mod_accesslog"  
                             )  

server.modules              = (
                              "mod_rewrite",
#                               "mod_redirect",
#                               "mod_alias",
                               "mod_access",
#                               "mod_cml",
#                               "mod_trigger_b4_dl",
                              "mod_auth",
#                               "mod_status",
#                               "mod_setenv",
                              "mod_fastcgi",
#                               "mod_proxy",
                              "mod_simple_vhost",
#                               "mod_evhost",
#                               "mod_userdir",
#                               "mod_cgi",
                              "mod_compress",
#                               "mod_ssi",
#                               "mod_usertrack",
#                               "mod_expire",
#                               "mod_secdownload",
#                               "mod_rrdtool",
                               "mod_accesslog"
                             )

# 은 주석을 의미합니다.
즉 필요치 않은 모듈은 #을 줄앞에 붙여줌으로서 사용하지 않도록 하면 됩니다.

그외 설정은 아래를 따르면 됩니다.

view plaincopy to clipboardprint?
server.document-root = "/home/..../public_html"; # document root 지정  
server.error_log = "/var/log/lighttpd/error.log"; # 에러 로그 저장. 디렉토리 생성해주세요.  
index-file.name = ( "index.php", "index.html", "index.htm", "default.htm") # index file 지정  
mimetype.assign = ... # 그냥 두시면 됩니다.  
accesslog.filename = "/var/log/lighttpd/access.log"; # access log 저장  
url.access-deny = ( "~", ".inc") # 특정 파일 형식에 대해 접근 금지 시킬 수 있습니다.  
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) # mod_fastcgi나 mod_cgi 사용시 지정될 파일입니다.  
 
# 아파치의 vhost와 같은 정의를 아래와 같이 쉽게 할 수 있습니다. 도메인에 대한 document-root 지정  
# 1개 이상의 vhost일 경우 아래 3라인을 복사해서 주죽 써나가시면 됩니다.  
# 좀 더 쉽게 하려면 가상호스트 모듈 mod_evhost를 이용하면 됩니다.  
$HTTP["host"] == "www2.zerophp.com" {  
       server.document-root = "/home/DOMAINS/WWW"  
}  
 
# mod_evhost 사용시 vhost 지정  
# %3 는 subdomain 1의 이름입니다. 아래와 같은 패턴이 정의되어 있습니다.  
# %% => % sign  
# %0 => domain name + tld  
# %1 => tld  
# %2 => domain name without tld  
# %3 => subdomain 1 name  
# %4 => subdomain 2 name  
evhost.path-pattern = "/var/www/hosts/%3/"  
 
server.username = "nobody" # 웹서버가 사용한 uid  
server.groupname = "nobody" # 웹서버가 사용할 gif  
 
# 아래가 php의 fastcgi 연결 부분입니다.  
# 다른 부분은 그대로 두고 --enable-fastcgi, --enable-force-cgi-redirect 옵션으로 컴파일한 php 실행 파일 경로만 신경쓰시면 됩니다.  
fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/var/run/lighttpd/php-fastcgi.socket", "bin-path" => "/usr/local/php/bin/php" )))  

server.document-root = "/home/..../public_html"; # document root 지정
server.error_log = "/var/log/lighttpd/error.log"; # 에러 로그 저장. 디렉토리 생성해주세요.
index-file.name = ( "index.php", "index.html", "index.htm", "default.htm") # index file 지정
mimetype.assign = ... # 그냥 두시면 됩니다.
accesslog.filename = "/var/log/lighttpd/access.log"; # access log 저장
url.access-deny = ( "~", ".inc") # 특정 파일 형식에 대해 접근 금지 시킬 수 있습니다.
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) # mod_fastcgi나 mod_cgi 사용시 지정될 파일입니다.

# 아파치의 vhost와 같은 정의를 아래와 같이 쉽게 할 수 있습니다. 도메인에 대한 document-root 지정
# 1개 이상의 vhost일 경우 아래 3라인을 복사해서 주죽 써나가시면 됩니다.
# 좀 더 쉽게 하려면 가상호스트 모듈 mod_evhost를 이용하면 됩니다.
$HTTP["host"] == "www2.zerophp.com" {
       server.document-root = "/home/DOMAINS/WWW"
}

# mod_evhost 사용시 vhost 지정
# %3 는 subdomain 1의 이름입니다. 아래와 같은 패턴이 정의되어 있습니다.
# %% => % sign
# %0 => domain name + tld
# %1 => tld
# %2 => domain name without tld
# %3 => subdomain 1 name
# %4 => subdomain 2 name
evhost.path-pattern = "/var/www/hosts/%3/"

server.username = "nobody" # 웹서버가 사용한 uid
server.groupname = "nobody" # 웹서버가 사용할 gif

# 아래가 php의 fastcgi 연결 부분입니다.
# 다른 부분은 그대로 두고 --enable-fastcgi, --enable-force-cgi-redirect 옵션으로 컴파일한 php 실행 파일 경로만 신경쓰시면 됩니다.
fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/var/run/lighttpd/php-fastcgi.socket", "bin-path" => "/usr/local/php/bin/php" )))


거의 대부분 기본 설정을 쓰시면 됩니다.
다만 사용하려는 모듈의 지정과 fastcgi.server, vhost 등 실제 값이 필요한 부분만 설정해주시면 됩니다.

실행은 다음과 같이 하면 됩니다.

lighttpd -f /etc/lighttpd.conf



일단 php with fastcgi, xcache, lighttpd 설치와 설정에 대해서 간단히 적었습니다.

더 상세히 적고 싶지만 저 역시 아직 공부하는 중이라 필요한 부분들만 적었습니다.

서버 관리를 하신다면 그렇게 어렵지 않을 거라 생각합니다.

참고로.. 제로보드XE에서 주소를 이쁘게 하는 mod_rewrite를 lighttpd에서도 쓸수 있는데 이걸 각 서브도메인별로 지정하는걸 모르겠네요.

일단 저는 lighttpd.conf에 지정해 놓았습니다.

먼저 server.module에서 mod_rewrite를 사용하게 해 놓으시구요.



view plaincopy to clipboardprint?
url.rewrite = (  
               "^/([a-zA-Z0-9_]+)/files/attach/images/(.*)" => "./files/attach/images/$2",  
               "^/([a-zA-Z0-9_]+)/modules/(.*)" => "./modules/$2",  
               "^/([a-zA-Z0-9_]+)/common/(.*)" => "./common/$2",  
               "^/([a-zA-Z0-9_]+)/([[:digit:]]+)page$" => "./index.php?mid=$1&page=$2",  
               "^/rss/([[:digit:]]+){0,14}/([[:digit:]]+){0,14}/([[:digit:]]+)$" => "./index.php?module=rss&act=rss&start_date=$1&end_date=$2&page=$3",  
               "^/rss/([[:digit:]]+)$" => "./index.php?module=rss&act=rss&page=$1",  
               "^/rss$" => "./index.php?module=rss&act=rss",  
               "^/admin$" => "./index.php?module=admin",  
               "^/([a-zA-Z0-9_]+)/api$" => "./index.php?mid=$1&act=api",  
               "^/([[:digit:]]+)$" => "./index.php?document_srl=$1",  
               "^/([[:digit:]]+)/([a-zA-Z0-9_]+)$" => "./index.php?document_srl=$1&act=$2",  
                "^/([[:digit:]]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$" => "./index.php?document_srl=$1&act=$3&key=$2",  
               "^/([a-zA-Z0-9_]+)/([[:digit:]]+)$" => "./index.php?mid=$1&document_srl=$2",  
               "^/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$" => "./index.php?mid=$1&act=$2",  
               "^/([a-zA-Z0-9_]+)/page/([[:digit:]]+)$" => "./index.php?mid=$1&page=$2",  
               "^/([a-zA-Z0-9_]+)/category/([[:digit:]]+)$" => "./index.php?mid=$1&category=$2",  
               "^/([a-zA-Z0-9_]+)/category/([[:digit:]]+)/page/([[:digit:]]+)$" => "./index.php?mid=$1&category=$2&page=$3",  
               "^/([a-zA-Z0-9_]+)/([[:digit:]]+)/([[:digit:]]+)$" => "./index.php?mid=$1&search_target=regdate&search_keyword=$2$3",  
                "^/([a-zA-Z0-9_]+)/([[:digit:]]+)/([[:digit:]]+)/([[:digit:]]+)$" => "./index.php?mid=$1&search_target=regdate&search_keyword=$2$3$4",  
               "^/([a-zA-Z0-9_]+)/tag/(.*)$" => "./index.php?mid=$1&search_target=tag&search_keyword=$2",  
                "^/([a-zA-Z0-9_]+)/writer/(.*)$" => "./index.php?mid=$1&search_target=nick_name&search_keyword=$2",  
               "^/([a-zA-Z0-9_]+)(/){0,1}$" => "./index.php?mid=$1" ) 

http://www.82i.com/@/zboard.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=42

이올린에 북마크하기
2008/04/06 21:51 2008/04/06 21:51

HowTo: Setup Lighttpd + PHP + eAccelerator

Posted at 2008/04/06 21:49 // in Linux // by 엔신
HowTo: Setup Lighttpd + PHP + eAccelerator

This guide will teach you how to install lighttpd with php support and eAccelerator



1st thing we need to do is to create a directory where we will download all the installtion files into it.

mkdir /root/installers
cd /root/installers



1. Download Lighttpd

wget http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz



2. Download PHP & FastCGI

wget http://www.fastcgi.com/dist/fcgi.tar.gz
wget http://il2.php.net/get/php-4.4.6.tar.gz/from/www.php.net/mirror



3. Download eAccelerator

wget http://bart.eaccelerator.net/source/0.9.5/eaccelerator-0.9.5.tar.bz2



4. Make Sure the following packages installed. pcre-devel, libpng-devel, libjpeg-devel,lib-gd

up2date -i pcre-devel libpng-devel libjpeg-devel lib-gd



5. Create the directories for compiling lighty

mkdir -p /www/service/
mkdir -p /www/service/logs
mkdir -p /www/service/config



6. Untar all packages

tar xzvfp lighttpd-1.4.15.tar.gz
tar xzvfp fcgi.tar.gz
tar xzvfp php-4.4.6.tar.gz
tar xjvfp eaccelerator-0.9.5.tar.bz2



7. Comiple Lighttpd

cd lighttpd-1.4.15/
./configure --prefix=/www/service
make
make install



8.a. Comiple FastCGI

cd ..
cd cd fcgi-2.4.0/
./configure
make
make install



8.b. Compile PHP (Here is disabled pear support '--without-pear') you can remove it if you need pear support

cd ..
cd php-4.4.6/
./configure --enable-fastcgi --with-curl --with-mysql=/usr/local/mysql \
           --enable-sysvshm --enable-sysvsem --enable-sysvmsg --with-gd \
           --with-zlib --without-pear
make
make install



9. create a copy for php.ini

cp -a php.ini-recommended /usr/local/lib/php/php.ini



10. Compile eAccelerator

cd ..
cd eaccelerator-0.9.5
export PHP_PREFIX="/usr/local"
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make
make install



11. Add eAccelerator Config to php.ini (add the lines into the end of the php file)

vi /usr/local/lib/php/php.ini

zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20020429/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"




10 . Make sure it's working type (php -v) you should get something like this.

php -v
PHP 4.4.6 (cgi-fcgi) (built: Apr 29 2007 17:14:12)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
   with eAccelerator v0.9.5, Copyright (c) 2004-2006 eAccelerator, by eAccelerator



11. Create Lighttpd Config Files.

cp -a /root/installers/lighttpd-1.4.15/doc/lighttpd.conf /www/service/config/



12. Edit Lighttpd config file (vi /www/service/config/lighttpd.conf)

vi /www/service/config/lighttpd.conf



12.a. Add the following line into the end of the file.

  #fastcgi.debug = 1
     fastcgi.server = (".php" =>
        ("lighttpd-php" =>
           ("socket" => "/tmp/lighttpd-php.sock",
            "bin-path" => "/usr/local/bin/php",
                    "max-procs" => 2,
                    "bin-environment" => (
                      "PHP_FCGI_CHILDREN" => "16",
                      "PHP_FCGI_MAX_REQUESTS" => "10000"
                    ),
                    "bin-copy-environment" => (
                      "PATH", "SHELL", "USER"
                    )
           )
     )
  )



13. Try IT

/www/service/sbin/lighttpd -f /www/service/config/lighttpd.conf

http://www.82i.com/@/zboard.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=41

이올린에 북마크하기
2008/04/06 21:49 2008/04/06 21:49

RRDTool

Posted at 2008/04/06 21:48 // in Linux // by 엔신
이 문서는 rrdtool의 모든 내용을 설명하지 않는다. 자주 사용될만하다고 생각되는 것들만을 설명하고 있다.

사용법
rrdtool graph filename [option ...] [data definition ...] [data calculation ...] \
[variable definition ...] [graph element ...] [print element ...]



설명
RRDtool의 graph를 사용하면, 저장되어 있는 rrd data 를 인간이 쉽게 알아볼 수 있는 그래프 이미지로 출력할 수 있다. graph의 원래 목표는 보기 좋은 그래프를 만들어내는 것이지만 수치연산을 통한 통계 레포트 작성도 가능하다. 예를 들자면, slide windows 수치연산을 이용해서 Trend 레포트를 만드는 등의 일이 가능하다.


자세히 보기
rrdtool graph를 이용하기 위해서는 수집된 RRD 데이터베이스로 부터, 하나 이상의 정의된 데이터 (data definition)를 사용해야만 한다. RDBMS로 치자면 데이터 필드가 필요하다는 얘기가 된다. 데이터베이스는 몇개가 되도 상관없다. 각각의 데이터베이스에서 가져올 데이터 필드의 이름만 알고 있으면 된다. 역시 RDBMS의 join과 비슷한 개념이라고 볼 수 있겠다.


또한 데이터베이스로 부터 Average, maxima, percentiles, etcetera 등의 값을 얻어올 수 있다. 물론 이러한 값을 사용하기 위해서는 RRD 데이터베이스를 만들때, 이들 값들에 대한 정의가 되어 있어야 할 것이다.


graph 명령을 수행하면 해당 시간범위에 해당하는 RRA의 데이터를 가져와서 - fetch - 2차원 평면 그래프에 그리게 된다. 때때로 가져온 데이터의 단위를 변경시켜줘야 하는 경우가 발생할 수 있다. byte per second 로 저장이 되어 있는데, bits per seconds로 변경해서 그래프로 나타내어야 하는 경우가 될 것이다. graph는 단위 변경에 사용할수 있는 간단한 수치연산 옵션을 제공한다.


옵션
filename

만들어낼 그래프 파일의 이름이다. 보통 확장자를 .png 로 한다. 파일이름을 '-'로 하면, 이미지를 표준출력 시킨다. 이경우 파일이 생성되지 않게 된다.


Time range



[-s|--start time] [-e|--end time] [-S|--step seconds]

RRA로부터 데이터를 읽어들일 시간범위를 지정한다. 지정하지 않을 경우 하루전 부터 지금까지의 데이터를 읽어온다. Start 와 end 는 여러가지 형식으로 지정할 수 있다. 32bit Unix Time stamp, yyyy/MM/DD 등으로 지정이 가능하다. step를 이용하면, 데ㅇㅣㅌ터를 얻어내기 위한 간격을 조정할 수 있다. 만약 step를 한시간인 3,600 으로 한다면, 스탭보다 작은 데이터 값들은 모두 무시가 된다.


Labels



[-t|--title string] [-v|--vertical-label string]

그래프의 수평 혹은 수직방향으로 문자열을 출력할 수 있다. -t를 이용하면 그래프의 상단 중앙에 문자열을 출력한다. -v를 이용하면 그래프의 왼쪽에 세로방향으로 문자열이 출력된다. -t 는 그래프의 제목을 위해서 -v 는 그래프의 단위를 표시하기 위해서 주로 사용한다.


Size



[-w|--width pixels] [-h|--height pixels] [-j|--only-graph]

그래프가 그려질 canvas의 크기를 pixel 단위로 지정한다. 기본값은 400 x 100 pixel 이다.
--only-graph를 이용하고 height를 32 보다 작게하면 thumnail과 같은 이미지를 얻어낼 수 있다. 이 옵션은 라벨등을 제외한 수치 그래프만을 이미지로 만든다.


Limits



[-u|--upper-limit value] [-l|--lower-limit value] [-r|--rigid]

이 옵션을 사용하지 않을경우, 그래프는 데이터의 크기에 따라서 자동적으로 y축 눈금의 범위가 결정된다. 이 옵션을 사용하면 y축 눈금의 범위를 조정할 수 있다. 그래프의 데이터는 --upper-limit 와 --lower-limit 사이에 위치하게 되며, 이 사이에서 자동으로 scaling 된다.


기타



[-c|--color COLORTAG#rrggbb[aa]]

그래프의 각 부위별로 색을 지정할 수 있다. 색을 지정할 부위는 COLORTAG로 결정된다. COLORTAG 에는 BACK, CANVAS, SHADE, GRID, FONT등이 있다. 부위 별로 옵션을 이용하면, 다수의 부위에 대해서 색을 지정할 수 있다.


--color BACK#00FF00 --color CANVAS#E0E0E0




[--zoom factor]

그래프를 확대/축소시키기 위해서 사용한다. 0에서 1사이라면 축소, 1보다 크면 확대된다. thumbnail을 만들기 위한 목적으로 사용할 수도 있을 것이다.



[-c|--color COLORTAG#rrggbb[aa]]

그래프에 문자가 표시되는 부위별로 폰트의 크기와 종류를 지정할 수 있다. 부위는 COLORTAG로 지정할 수 있으며, DEFAULT, TITLE, AXIS, UNIT, LEGEND 등이 있다. 다음은 사용 예이다. --color 과 마찬가지로 다수의 옵션을 사용할수 있다.


--font TITLE:13:/usr/lib/fonts/times.ttf --AXIS:12:/usr/lib/fonts/times.ttf

폰트이름에 .을 사용하면 기본폰트가 사용된다. 기본폰트는 환경변수 RRD_DEFAULT_FONT 를 변경하면 된다. 만약 UTF8 을 지원하고 baekmuk 과 같은 폰트가 있다면 한글을 출력할 수도 있다. 출력품질이 좋지 않다는게 문제다. 다음은 백묵폰트를 사용해서 한글출력을 한 예이다.


--font TITLE:13:/usr/share/fonts/truetype/baekmuk/dotum.ttf --font AXIS:6:/usr/share/fonts/truetype/baekmuk/dotum.ttf




Graph
그래프에 표현되는 글포맷, 라인등을 조정할 수 있다.

GPRINT:vname:format

그래프안에 문자열을 출력한다.


VRULE:time#color[:legend]

그래프의 해당 시간(time)에 수직의 라인을 그린다. 해당영역을 주목해야할 필요가 있을 때 사용한다. 색은 #color로 조절할 수 있다. #00FF00, #FF00FF 와 같은 형식으로 지정할 수 있다. 시간은 unix time을 사용한다.


HRULE:value#color[:legend]

그래프상의 값에 value에 해당하는 수평선을 그린다. 임계치 값을 표현하기 위한 용도로 사용한다.



LINEwidth:value[:legend[:STACK]

그래프상에 value에 해당되는 실제 값을 찍기 위해서 사용한다. width는 선의 굵기를 나타낸다. 0에서 부터 8까지 지정이 가능하다. STACK을 명시하면, 기존에 그려진 value에 더해서 그래프가 그려지게 된다. cpu 사용율은 wait, used, system 의 더한 값이다. 이 경우에는 STACK를 명시해야 명확한 그래프가 만들어질 것이다.


AREA:value[#color][:[legend][:STACK]

LINE과 마찬가지로 value에 해당되는 값을 그래프상에 찍기 위해서 사용된다. 선만을 그리는 LINE과는 달리, 영역을 주어진 color로 채운다는 점이 다르다.

http://www.82i.com/@/zboard.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=40

이올린에 북마크하기
2008/04/06 21:48 2008/04/06 21:48

CentOS (Redhat Enterprise)에서 lighttpd 설치

Posted at 2008/04/06 21:46 // in Linux // by 엔신
UNIX 2007/01/26 00:14
이번에 회사에서 새 서버들을 구매해서 IDC에 들어왔습니다. Dell PowerEdge SC1435로 AMD기반 옵테론 CPU라서 FreeBSD보다는 Linux가 좋을거 같더군요. 전에도 델서버 들어왔었는데 FreeBSD에서 네트워크 디바이스가 정상적으로 동작을 안하더군요. 델서비스에 연락했더니 Redhat Enterprise Linux(RHEL)구해서 설치하라고 해서 설치했었는데 네트워크 드라이버를 따로 구해서 설치해야되더군요. 서버에는 원래 엑스를 설치를 잘 안해서 고생했습니다. 일단 이미 설치된 다른 서버에 X 설치하고 웹에서 다운로드하는데 문서가 exe 파일이더군요! 황당 --; 집으로 VNC로 연결하여 실행하여 풀어보니 별거 없더군요 --; 설치했던 서버는 PE2950이었습니다. 다행히 USB 메모리가 있어서 네트워크를 잡을수 있었습니다...  그때 RHEL4를 받아서 설치했었는데 유료사용자가 아니면 업그레이드가 안되더군요. 그래서 이번에는 RHEL 소스를 이용하여 바이너리 호환이 되는 CentOS (Community Enterprise OS) AMD64 버전을 받아서 설치했습니다.

서버 여러대 설치하느라 시간이 좀 남아서(DVD 한장만 궈서갔음) FreeBSD 6.2(AMD64)도 설치해봤는데 별 이상없이 깔리더군요. 근데 SC1435에 PS/2 포트가 없어서 USB포트로 키보드와 마우스를 연결(Y케이블 이용해서 PS/2 키보드와 마우스연결)했는데 뺐다가 끼면 키보드와 마우스가 인식이 안되더군요.. 관리편의상 동시에 들어오는 서버는 같은 OS를 설치하는게 편하기 때문에 다시 밀고 CentOS를 설치하고, 업데이트까지 무사히 마치고 왔습니다. 업데이트는 정말 편하더군요. (#yum update) 그리고 네트워크 드라이버도 추가 설치없이 바로 잡히더군요.

이제 CentOS(AMD64)에서 lighttpd와 친구들 설치 방법에 대해서 설명드릴께요^^

AMD64의 php는 fastcgi가 컴파일안되어 있어서 lighttpd와 php를 fastcgi와 연결하기 위해서 php를 컴파일했습니다.


# cd /opt
# wget http://isoredirect.centos.org/centos/4/os/SRPMS/php-4.3.9-3.15.src.rpm
# rpm -i php-4.3.9-3.15.src.rpm
# vi /usr/src/redhat/SPECS/php.spec
      --enable-force-cgi-redirect \
     앞줄에
      --enable-fastcgi \
     를 넣어줍니다.


# rpmbuild --rebuild /opt/php-4.3.9-3.15.src.rpm

이때 필요한 패키지를 설치하고 해야할수도 있습니다. 오류에 뭐가 필요하다고 나옵니다.
 ( # yum update aspell-devel httpd-devel pcre-devel ...)
컴파일 완료되면 /usr/src/redhat/RPMS/x86_64 (또는 i386)에 바이너리 rpm이 생깁니다.

컴파일후 원하는 패키지를 업데이트 합니다. 버전번호 때문에 업그레이드가 안되면 --force를 이용해서 강제로 업데이트하면 됩니다.


lighttpd는 src rpm을 받아서 컴파일 합니다.


# wget http://www.lighttpd.net/download/lighttpd-1.4.13-1.src.rpm
# rpmbuild --rebuild lighttpd-1.3.15-1.src.rpm


xcache 역시 src rpm을 받아서 설치합니다.

# wget http://www.jasonlitka.com/media/files/SRPMS/php-xcache-1.2.0_0.2.src.rpm
# rpmbuild --rebuild php-xcache-1.2.0_0.2.src.rpm

rpm 바이너리 파일은 /usr/src/redhat/RPMS/x86_64 나 i386 등에 생깁니다. 적당히 원하는 패키지를 설치해주면 됩니다. 5대 서버에 설치하느라 한곳에서 컴파일하고 다음 스크립트를 이용하여 여러서버에 설치하였습니다.


#!/bin/sh
# install_lighttpd.sh

/usr/sbin/apachectl stop

rpm -ivh lighttpd-1.4.13-1.x86_64.rpm
rpm -Uvh --force php-4.3.9-3.15.x86_64.rpm php-devel-4.3.9-3.15.x86_64.rpm  php-pear-4.3.9-3.15.x86_64.rpm php-ldap-4.3.9-3.15.x86_64.rpm  php-mysql-4.3.9-3.15.x86_64.rpm
rpm -ivh php-xcache-4.3.9_1.2.0-0.2.x86_64.rpm

mkdir -p /etc/lighttpd
cp ./lighttpd.conf /etc/lighttpd
adduser -s /sbin/nologin www
/sbin/chkconfig httpd off
/sbin/chkconfig --add lighttpd
/sbin/chkconfig lighttpd on

touch /var/log/lighttpd.access.log
touch /var/log/lighttpd.error.log

chown www:www /var/log/lighttpd.access.log
chown www:www /var/log/lighttpd.error.log

/etc/init.d/lighttpd start

lighttpd.conf는 freebsd에서 사용하던걸 그대로 가져와서 server.event-handler 등 몇가지만 바꿨습니다. 주석등의 라인은 삭제했습니다.


# lighttpd.conf
server.modules              = (
                              "mod_redirect",
                              "mod_alias",
                              "mod_access",
                             "mod_status",
                             "mod_fastcgi",
                             "mod_userdir",
                              "mod_accesslog" )
server.document-root = "/var/www/html/"
accesslog.filename          = "/var/log/lighttpd.access.log"
server.errorlog             = "/var/log/lighttpd.error.log"
index-file.names            = ( "index.php", "index.html",
                              "index.htm", "default.htm" )
server.event-handler = "linux-sysepoll"
mimetype.assign             = (
 생략...
)

userdir.path = "public_html"
url.access-deny             = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
server.pid-file            = "/var/run/lighttpd.pid"
server.username            = "www"
server.groupname           = "www"
fastcgi.server              = ( ".php" =>
                              ( "localhost" =>
                                (
                                 "socket" => "/tmp/php-fastcgi.socket",
                                 "bin-path" => "/usr/bin/php",
                                 "min-procs" => 1,
                                 "max-procs" => 2,
                                 "max-load-per-proc" => 4,
                                 "idle-timeout" => 10,
                                 "bin-environment" => ( "PHP_FCGI_CHILDREN" => "16",
                                                        "PHP_FCGI_MAX_REQUESTS" => "2000" )
                                )
                             )
                            )

server.max-fds = 4096

그리고 로그가 계속 쌓이지 않도록 /etc/logrotate.d/lighttpd 파일을 만들었습니다.

/var/log/lighttpd.*.log {
 rotate 30
 daily
 missingok
 notifempty
 compress
 sharedscripts
 postrotate
      touch /var/log/lighttpd.access.log
      touch /var/log/lighttpd.error.log
      chown www:www /var/log/lighttpd.access.log
      chown www:www /var/log/lighttpd.error.log
      /bin/kill -HUP `cat /var/run/lighttpd.pid 2>/dev/null` 2> /dev/null || true
 endscript
}


참고 URL:
http://www.cyberciti.biz/tips/redhat-enterprise-linux-lighttpd-fastcgi-php.html
http://www.jasonlitka.com/2006/12/20/php-caching-and-acceleration-with-xcache/

http://www.82i.com/@/zboard.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=39

이올린에 북마크하기
2008/04/06 21:46 2008/04/06 21:46

lighttpd 웹서버설치

Posted at 2008/04/06 21:45 // in Linux // by 엔신
최근까지 아파치는 심각한 오픈소스 라이벌이 없었다. Netcraft사의 최근 웹서버 조사에서 한가지 주목할 만한 것이 있다. 언제나처럼 아파치가 정상을 차지하고 있고, Microsoft사의 IIS가 2위, 그리고 꾸준한 인기를 얻어온 unknown이 3위였다. 4위는 Sun사의 Java Web Server(이전까지는 ONE으로, 그이전에는 iPlanet, 그 이전에는 Netscape으로 알려져있었던). 그런데 5위는 1천 4백만 사이트에서 사용하고 있는 lighttpd라는 서버였다. 대체 어디서 나타난 녀석이란 말인가. 이제부터 lighttpd의 역사와 기본 설치 및 설정방법, 그리고 앞으로의 비전에 대해 살펴보려 한다.

이것은 '라이-티-피-디(lite-tee-pee-dee)'라고 발음하며, 짧게는 '라이티(lighty)'라고 부른다. 뭐라고 찾던 간에 웹사이트나 위키, 블로그 혹은 포럼 등에서 이것에 대한 많은 정보를 찾을 수 있다. lighttpd는 적은 자원을 사용하여 높은 성능을 내는 웹서버로서 고안되었다. 이것은 아파치보다 훨씬 적은 메모리를 사용하면서도 일반적으로 아파치보다 속도가 빠르다. lighttpd는 YouTube, Wikipedia, Meebo, 그리고 A List Apart를 포함한 여러 중책 사이트에서 묵묵히 가동되고 있다. lighttpd가 루비 온 레일즈나 트랙(Trac)과 같은 인기 툴들과 함께 아파치를 대신하는 것을 종종 보게 될 것이다.

아파치의 잘못된 점

그 인기에도 불구하고 가끔 아파치는 최상의 솔루션이 아닐 때가 있다. 아파치는 서로 다른 런타임 환경에서 사용할 수 있게 하기 위해 서로 다른 다중-프로세싱 모델(Multi-Processing Models, MPMs)을 제공한다. 선분기(prefork) 모델 -- Linux에서 가장 인기 있다 -- 은 시작시에 여러 개의 아파치 프로세스를 생성하고 이들을 풀에서 관리한다. 이에 대한 대안적인 작업모델은 여러개의 프로세스 대신에 다중 스레드를 사용한다. 비록 스레드가 프로세스보다 가볍긴 하지만, 전체 서버가 스레드에 안전(threadsafe)하지 않으면 이를 사용할 수 없다. 아파치와 mod_php가 스레드에 안전하다고 하지만 서드파티 모듈에 대해 보장되진 않는다. PHP 사이트는 스레드를 쓰는 MPM을 가진 아파치2 사용을 말리고 있다. 이것이 개발자들로 하여금 아파치 1.3에서 2.0으로 이동하는 것을 늦추게 된건지도 모른다. 그러나 선분기 모델은 그 자체에 문제점을 가지고 있는데, 각 프로세스(아파치 + PHP + 서드파티 모듈)가 너무 많은 메모리를 사용한다(30MB도 이상하지 않을 정도다). 여기에 동시에 돌아가는 아파치 프로세스 수를 곱하면, 사용할 수 있는 RAM은 순식간에 사라질 것이다.

lighttpd의 과거

어떤 웹사이트들은 동시에 수천개의 파일을 수행하는데, 메모리와 최대 스레드 또는 프로세스 수는 제한되어 있다. Dan Kegel은 C10K 문제에 관한 그의 페이지에서 수천개의 동시 접속을 다룰때 마주치게 되는 문제들에 대해 자세히 설명했다. 2003년 독일의 MySQL 개발자인 Jan Kneschke는 이 문제에 관해 흥미를 가지게 되었고 올바른 기술에 초점을 맞춤으로써 아파치보다 더 빠른 웹서버를 만들 수 있을 것이라고 믿었다. 그는 단일 스레드와 비블러킹(non-blocking) I/O를 가진 단일 프로세스로서 lighttpd를 고안했다. poll, epoll, kqueue, 혹은 /dev/poll 중 어느 하나를 선택하는 대신에 목표 시스템에서 가장 빠른 이벤트 핸들러를 사용했다. 그리고 read나 write보다는 sendfile 같은 제로카피(zero-copy) 시스템 콜을 채택했다. 몇 개월 후 lighttpd는 아파치보다 더 빠르게 정적 파일들을 수행할 수 있었다.

다음 단계는 동적 어플리케이션(CGI), 특히 PHP를 다루는 문제였다. Kneschke 인터넷 초창기 시절 CGI 수행속도를 향상시키기 위해 Open Market에서 만들었던 FastCGI를 털어냈다. 각각의 호출상에서 웹서버가 똑같은 외부 CGI 프로그램을 시작하는 대신, FastCGI는 본질적으로 CGI 어플리케이션을 먼저 실행시키고 자신과 웹서버 사이에서의 통신을 다루는 데몬이었다. 이것도 빨랐지만 후에 펄과 PHP가 아파치에 모듈로 흡수되면서 더 빨라졌고 아파치의 내부 HTTP 실행 단계에 접근 할 수 있게 되었다. 아파치용 FastCGI는 등한시 되었지만 후에 lighttpd에 추가되고 PHP와 연결되면서 FastCGI의 성능은 mod_php를 쓰는 아파치와 상응하거나 그를 초월하게 되었다. 추가적으로 lighttpd구현에는 자동 로드밸런싱이 추가되었다.

lighttpd 생태계는 가상 호스트, 리플렉션, URL 재작성, 인증 및 다른 웹스런 것들을 관리하기 위한 모듈로 확장되어 왔다. 대부분의 용도로는 아파치로 할 수 있는 어떠한 것도 lighttpd에서 할 수 있다. 다음 몇개의 장들에서 lighttpd 설치와 설정하는 법들을 아파치의 경우와 함께 살펴보려 한다.

lighttpd 설치

lighttpd를 설치하고 이리저리 쿡쿡 찔러보도록 하자. 위키의 설치 페이지에서는 다양한 리눅스 배포판에 대한 바이너리 혹은 소스 설치 예를 보여주고 있다. 단순 무식한 남성미가 넘치는 개발자들(여러분들을 말하는 것은 아니다)을 위한, 전체 소스 인스톨은 다음과 같이 한다.

추가) 컴파일을 하기전에 pcre과 zlib 개발 패키지가 시스템에 설치되어야 한다.

   # yum install pcre-devel
   # yum -y install zlib-devel

   # wget http://www.lighttpd.net/download/lighttpd-1.4.13.tar.gz
   # tar xvzf lighttpd-1.4.13.tar.gz
   # cd lighttpd-1.4.13
   # ./configure
   # make
   # make install


이는 /usr/local 아래에 lignttpd를 설치할 것이다. 만약 빌드가 실패하면, 설치에 앞서 필요한 pcre과 zlib 개발 패키지가 시스템에 설치되어 있는지 확인하라.

lighttpd를 수동으로 시작하거나 종료하고 싶으면 여기서 끝이다. lighttpd를 아파치처럼 서비스로서 인스톨 하려면, init 스크립트를 수정하고 인스톨한다.

   # sed -e 's/FOO/lighttpd/g' doc/rc.lighttpd > lighttpd.init
   # chmod a+rx lighttpd.init
   # cp lighttpd.init /etc/init.d/lighttpd
   # cp -p doc/sysconfig.lighttpd /etc/sysconfig/lighttpd
   # install -Dp ./doc/lighttpd.conf /etc/lighttpd/lighttpd.conf
   # chkconfig lighttpd on



기본 설정

lighttpd 설정 파일의 문법은 아파치와의 눈에 보이는 가장 큰 차이점이라 할 수 있다. 위키의 설정 페이지 예제는 아파치의 XML스러운 httpd.conf보다 펄(혹은 PHP나 파이썬)쪽에 더 가까워 보인다. 정적인 파일들을 지닌 간단한 웹사이트의 경우, 아파치의 경우와 같이 도큐먼트 루트, 로그파일명, 리눅스 사용자와 그룹명 등을 명시할 필요가 있다. 다음의 아파치 설정(httpd.conf)과 lighttpd 설정(lighttpd.conf)은 대등하다.



Apache:

DocumentRoot /var/www/html
CustomLog /var/www/logs/access
ErrorLog /var/www/logs/error
User www
Group www

lighttpd:
server.document-root = "/var/www/html"
accesslog.filename = "/var/www/logs/access"
server.errorlog = "/var/www/logs/error"
server.username = "www"
server.groupname = "www"
server.modules = ( "mod_accesslog" )

lighttpd는 아파치와 유사한 인클루드 메커니즘을 가지고 있기 때문에 lighttpd.conf가 더 커질 필요가 없다. 추가적인 모듈을 사용하기 위해, 그 기능을 켜고 그 옵션을 설정하면 된다. 아파치는 LoadModule로 이것을 켜지만, lighttpd는 단지 server.modules 배열에서 주석처리 안된 모듈명을 인클루드 한다. 그보다 훨씬 필요한 유일한 하나는 mod_accesslog이다.

인증(Authentication)과 권한부여(Authorization)

lighttpd는 .htaccess 파일을 지원하지 않으므로 모든 설정을 lighttpd.conf 파일 혹은 그것이 인클루드하는 파일에 명시할 필요가 있다. 이것은 기본적인 아파치 user 파일을 잘 이해하고 인증을 소화한다. 그러나 group 파일 지원은 아직 구현되지 않았다. 다음은 special이라 부르는 최상위 디렉토리에 비밀번호 보호를 거는 방법이다.

Apache:

 AuthName "My Special Directory"
 AuthType Basic
 AuthUserFile /var/www/passwords/users
 Order deny,allow
 require valid-user


lighttpd:
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/var/www/passwords/users"
auth.require = ( "/special/" =>
 (
 "method"   => "basic",
 "realm"    => "My Special Directory",
 "require"  => "valid-user"
 )
)

가상 호스트

이번엔 열심히 일하면서도 진가를 인정받지 못하는 여러분의 웹서버를 위한 또 다른 과제다: scratch.example.com과 sniff.example.com로 불리우는 두 사이트를 관리하는 일이다.

Apache:
NameVirtualHost *

 ServerName "scratch.example.com"
 DocumentRoot "/var/www/hosts/scratch/docs"


 ServerName "sniff.example.com"
 DocumentRoot "/var/www/hosts/sniff/docs"


lighttpd:
$HTTP["host"] == "scratch.example.com" {
 server.document-root = "/var/www/hosts/scratch/docs/" }
$HTTP["host"] == "sniff.example.com" {
 server.document-root = "/var/www/hosts/sniff/docs/" }

이는 힘들게 일하는 방식이다. 만약 여러분이 많은 호스트들을 관리한다면, 가상 호스트 모듈로 입력을 더 줄일 수 있다:

Apache:
LoadModule vhost_alias_module modules/mod_vhost_alias.so
VirtualDocumentRoot /var/www/hosts/%1/docs

lighttpd:
server.modules = ( ..., "mod_evhost", ... )
evhost.path-pattern = "/var/www/hosts/%3/docs"

Server-Side Includes (SSI)

동적 컨텐츠를 향한 기초 걸음마로, 파일끝에 .shtml를 붙여서 SSI를 켜는 것은 쉽다.

Apache:
AddHandler server-parsed .shtml

lighttpd:
server.modules = ( ..., "mod_ssi", ... )
ssi.extension = ( "shtml" )

PHP

lighttpd 는 CPU 집중적인 동적 컨텐츠를 또 다른 프로세스에 덜어줌으로써 정적 파일 처리량을 최적화 한다. PHP를 내부적으로 처리하기보다는 아파치가 mod_php를 쓰는 것처럼, lighttpd도 FastCGI에 그것을 맡긴다. 이러한 설정 부분은 지루하고 활기없는 .php파일들을 활기찬 PHP 스크립트로 변화시킨다. 이곳과 같은 패밀리 사이트에서 보는 것 보다 좀 더 즐겁게 세부적인 것을 보려면, 이 페이지를 참조하라.

Apache:
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php

lighttpd:
server.modules = ( ..., "mod_fastcgi", ... )
fastcgi.server =
 ( ".php" =>
   ( "localhost" =>
     (
     "socket" => "/tmp/php-fastcgi.socket",
     "bin-path" => "/usr/local/bin/php"
     )
   )
 )
lighttpd의 실행 및 종료 (추가)
실행# /usr/local/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
종료# ps auwx | grep lighttpd# kill [lighttpd ps]
lighttpd의 장점

lighttpd 는 압축, 디렉토리 목록나열, 사용자 디렉토리, SSL, WebDAV, 그리고 URL 다시쓰기(rewriting)나 리다이렉션에 대해 아파치와 동등한 모듈을 포함한다. 이러한 것들에 대해서는 웹사이트 상에서 읽어볼 수 있다. lighttpd에만 있는 다른 흥미로운 모듈들도 있다.

조그만 YouTube가 되고 싶다면, mod_flv_streaming 모듈을 사용하여 수천개의 플래시 무비를 평행하게 스트리밍할 수 있다. 비록 YouTube는 아직 이 모듈을 사용하지는 않지만, 정적 파일들에 대해서는 lighttpd로 수행한다.

여러분이 만약 수많은 플래시 파일들을 보유한 사이트를 가지고 있다면 핫링킹(hotlinking)에 대해 보호하는 것은 어떤가. 어떠한 파일 타입에도 적용가능한 lighttpd의 해결책은 mod_secdownload이다. 특별한 URL을 생성하는 함수를 작성하여 이 모듈이 그 URL을 가지고 주어진 파일을 주어진 시간만큼 접근할 수 있는 권한을 주는 것이다.

Lighty 1.5.0

Kneschke는 현재 1.5.0 버전에 박차를 가하고 있다. 이 버전에서는 성능과 유연성이 향상될 것이다. 새로운 I/O 서브시스템은 스레딩(여기서는 스레드가 맞을 듯 하다)과 비동기 I/O -- POSIX나 리눅스 네이티브, 혹은 glib 2.0에 있는 userland gthread wrapper -- 를 통해 향상될 것이다.

mod_proxy_core는 mod-proxy, mod-fastcgi, mod-scgi 세 개의 백-엔드(backend) 모듈을 통합한다. 실제 처리에서 프로토콜을 분리함으로써 로드밸런싱 및 실패처리(fail-over), keep-alive, 기본 프록시 기능에 내부 큐를 사용하는 것들이 가능해진다.

mod_magnet라 부르는 최근의 추가사항은 lighttpd의 미래에 커다란 역할을 할 것으로 기대된다. 이것은 URL 재작성이나 컨텐츠 생성을 포함하여 HTTP 요청과 응답의 서로다른 단계에 접근하게 할 수 있다. 한가지 흥미로운 선택은 아파치의 mod_rewrite와 같은 복잡한 문법 보다는 Lua라는 내장된 스크립트 언어를 사용한다는 것이다. 우리는 개발자들이 이것을 좋아하게 되던지 아니면 아파치의 친숙하지만 때론 어려운 rewrite 규칙에 고착하게 되는지 보게될 것이다.

Lighty는 어디로 가고 있는가?

Kneschke는 lighttpd의 미래가 다음 두가지 경우를 따를 것이라 기대한다:
고성능, 고사용성의 컨텐츠 전송
임베디드 서버, 크로스 컴파일, 적은 메모리 사용
1.5.0 이후에, mod_magnet는 좀더 많은 동적 서버 설정을 제공할 것이다. 이는 .htaccess을 지원하지 않아 lighttpd로 옮겨가길 거부해온 일부 아파치 개발자들을 끌어들일 것이다. 필자는 Comet--역 Ajax의 한 종류, 새로운 데이터가 있을때 서버가 클라이언트를 업데이트한다--에 대한 지원이 계획되길 고대하고 있다. 이것은 웹 대쉬보드나 채팅, 혹은 다른 상당히 인터랙티브한 어플리케이션들을 가지고 있다. Ajax와 Comet으로 웹 어플리케이션은 좀 더 전통적인 GUI 어플리케이션과 같은 모습을 할 수 있다. 그러나 이러한 새로운 기능들이 아니더라도 lighttpd는 벌써 아파치의 강력한 경쟁상대--특히 메모리가 제한되어 있거나 많은 정적파일들로 구성된 작업량에 대해서--이다. 가벼운게 좋은거다.


--------------------------------------------------------------------------------
저자 Bill Lubanovic는 70년대에 UNIX로 소프트웨어 개발을 시작했고, 80년대에는 GUIs, 90년대에는 웹개발을 해왔다. 그는 현재 한 풍력 관련 회사에서 웹 비주얼 작업을 하고 있다.

http://www.82i.com/@/zboard.php?id=faq&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=38

이올린에 북마크하기
2008/04/06 21:45 2008/04/06 21:45

SSH클라이언트 접속시 한글깨짐문제 - /etc/sysconfig/i18n

Posted at 2008/04/06 21:06 // in Linux // by 엔신

SSH클라이언트 접속시 한글깨짐문제 - /etc/sysconfig/i18n

 

흠..

별로 신경 안썼었는데 SSH접속 시 한글이 깨지는 경우를 볼 수 있었다.

putty는 안그런다고들 하지만.. 내경우엔 Zterm을 쓰니.. (습관이 무섭다;)

 

암튼 어쩔수없이 설정을 잡기로 맘먹고..

 

/etc/sysconfig/i18n

 

>> 설정내용 (EUCKR용) =============================================

LANG="ko_KR.eucKR"
SUPPORTED="en_US.iso885915:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="lat0-sun16"
SYSFONTACM="iso15"

 

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

손을 댔는데.. 흠.. 역시 난 EUC-KR이 싫다.

뭐 EUC-KR이 기필코 필요하다면 써야하니.. 일단 주석처리..ㅋㅋ

다시 설정을 잡아야지..


>> 설정내용 (UTF-8용) ==============================================

LANG="en_US.UTF-8"
SUPPORTED="en_US.UTF-8:en_US:en:ko_KR.UTF-8:ko_KR:ko"

SYSFONT="latarcyrheb-sun16"
====================================================================


한글 자알~나오고있다ㅋㅋ

   

이올린에 북마크하기
2008/04/06 21:06 2008/04/06 21:06

mod_security를 통한 방화벽구축

Posted at 2008/04/05 20:18 // in Linux // by 엔신

wget http://www.modsecurity.org/download/modsecurity-apache_2.5.1.tar.gz

KrCERT 제공 공격 차단룰 를 참고로 conf파일에 인클루 시켜 룰을 설정한다.

 1. 컴파일시 필요한 패키지 설치

yum install httpd-devel pcre-devel libxml2-devel

2. mod_unique_id, (/etc/httpd/conf/httpd.conf)
LoadModule unique_id_module modules/mod_unique_id.so

3. 압축 풀기
tar xvfz modsecurity-apache_2.5.1.tar.gz

 4. compile(apache2/)
./configure

5. 설치 (mod_security2.so 모듈을 떨궈준다.)
make && make install


6.
mod_security 설치

LoadModule security2_module modules/mod_security2.so


 7. httpd 재시작

/etc/init.d/httpd restart

[출처] mod_security를 통한 방화벽구축|작성자 shumahe


/////////////////////////////////////////////////////
설치후에 mod_security 모듈을 httpd.conf 에서 불러들이도록 해야하며
불러들여서 사용하게 하면서 conf 설정 해야함
KrCERT 제공 공격 차단룰 을 반드시 참조하여 conf 설정 적용하고 공격차단 정책(룰)을 적용하여야 함
http://www.krcert.or.kr/firewall2/index3.jsp
공격 차단룰을 적용해야 되며 위 링크에 나와잇는 샘플을 이용하는 것이 좋음
샘플은 기본적으로 로그는 되나 차단안하고 허용하도록 되어 있음
SecDefaultAction "pass,log,phase:2,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase"
위 부분에 pass 는 정책에 걸려도 허용한다는 것인데 deny 로 정책에 걸리면 차단하도록 해야됨

이올린에 북마크하기
2008/04/05 20:18 2008/04/05 20:18

하나의 계정에 여러개 도메인 포워딩하여 각각 사이트 구현하기

Posted at 2008/04/01 16:57 // in Linux // by 엔신

아래의 PHP소스를 잘 살펴 보시기 바랍니다.

<?
if ($_SERVER[HTTP_HOST]=="www.
도메인1") { $index="인덱스1"; }
elseif ($_SERVER[HTTP_HOST]=="
도메인1") { $index="인덱스1"; }
elseif ($_SERVER[HTTP_HOST]=="www.
도메인2") { $index="인덱스2"; }
elseif ($_SERVER[HTTP_HOST]=="
도메인2") { $index="인덱스2"; }
?>
<? include $index; ?>


우선 소스로 index.php 만들어 줍니다.
그리고 도메인1으로 접속하였을때 엑세스하는 문서 인덱스1으로 지정해 주고
도메인2 접속하였을때 엑세스하는 문서를 인덱스2 지정해 주시면 됩니다.
예를 들어 a.com으로 접속하였을때 index1.html 화면이 보이고자 하고
b.com 접속하였을때 index2.html 화면이 보이고자 할때는

<?
if ($_SERVER[HTTP_HOST]=="www.a.com") { $index="index1.html"; }
elseif ($_SERVER[HTTP_HOST]=="a.com") { $index="index1.html"; }
elseif ($_SERVER[HTTP_HOST]=="www.b.com") { $index="index2.html"; }
elseif ($_SERVER[HTTP_HOST]=="b.com") { $index="index2.html"; }
?>

<? include $index; ?>

위와같이 작성해 주시면 됩니다.
a.com b.com 같은 호스팅에 포워딩되어 있어야 하며
index.php , index1.html , index2.html 같은폴더 안에 있어야 정상적인 페이지가 표시됩니다.
주의 것은 위에도 말씀드렸듯이 같이 호스팅에 포워딩이 되어 있어야만 가능한 부분입니다.

이올린에 북마크하기
2008/04/01 16:57 2008/04/01 16:57

검색로봇을 막는 방법 robots.txt

Posted at 2008/03/24 23:38 // in Linux // by 엔신
필요한 파일이 robots.txt라는 조그마한 텍스트 파일입니다. 정리하면 robots.txt파일을 생성해야 하는 이유는 크게 두가지입니다. 트래픽을 조절할 수 있다는 것과 다른 사람에게 알리고 싶지 않는 정보를 보호하기 위해서 입니다. 이 파일의 역할을 당신의 블로그를 방문하는 로봇들에게 사이트를 검색하게 허용할 것인지, 허용한다면 어떤 로봇에게, 어떤 디렉토리를 허용할지를 담고 있는 파일입니다.

윈도우의 경우 메모장을 이용해서 생성하면 되는데요, 파일은 반드시 계정의 최상위(root) 디렉토리에 있어야 합니다. 이를테면 제 사이트 http://bklove.info/ 라면 http://bklove.info/robots.txt 에 위치해야 합니다. http://bklove.info/temp/robots.txt  라면 제대로 작동하지 않습니다.

파일의 내용은 크게 세 부분으로 나뉩니다.
주석(#), 로봇의 이름을 적는 부분(User-agent) , 방문을 허용하지 않을 디렉토리를 적는 부분(Disallow)으로 구분됩니다.
User-agent: *
Disallow: /

위처럼 적으면 모든 로봇에서 모든 디렉토리에 대한 검색을 불가능하게 하겠다는 뜻을 담고 있습니다. [*]는 User-agent에서만 사용가능한데 [모든 로봇]이라는 뜻을 지니고 있습니다. Disallow의 [/]는 디렉토리에 있는 모든 폴더를 나타내는 것이구요.

만약 특정 디렉토리를 차단하게 하려면 다음과 같이 적어주면 됩니다.

User-agent: *
Disallow: /blog

위는 모든 로봇[*]에게 [blog]디렉토리 아래에 있는 부분에 대해서는 접근을 차단한다는 내용을 담고 있습니다.

그렇다면 특정 로봇을 차단하는 방법은 어떤게 있을까요? 이를테면 사이트에서 네이버의 로봇이 활동하게 하지 못하는 방법은 다음과 같습니다.

User-agent: Cowbot
Disallow: /

Cowbot은 네이버 로봇의 이름입니다. 위처럼 작성해주시면 네이버 로봇의 경우 검색을 하지 못하게 됩니다.

조금 복잡하게 구글과 네이버는 허용하고, 그외에는 모두 차단하는 방법은 다음과 같습니다.

User-agent: Cowbot
Disallow:

User-agent: Googlebot
Disallow:

User-agent: *
Disallow: /

Disallow에 아무적도 적지 않으면 모두 허용한다는 의미가 되기 때문이죠.
/blog와 /blog/는 조금 다릅니다.
/blog의 경우는 /blog/a.htm와 /blog.htm에 대해서 불가능한 것이고
/blog/의 경우는 /blog/a.htm에 대해서만 불가능 합니다.
즉 /blog는 디렉토리와 파일까지도 포함하고, /blog/는 디렉토리만을 의미하거든요.


앞 서 트래픽을 아끼기 위해서 이미지 로봇을 차단하는 방법은 다음과 같습니다. 참고로 원래는 Disallow항목에 *표시를 넣을 수 없습니다. 이 명령어는 구글과 MSN등에서만 통용되구요. 파일명 뒤에 반드시 $표시를 해주셔야 합니다. 즉 모든 검색엔진에서 통용되지는 않습니다.
User-agent: Googlebot-Image
Disallow: /*.gif$
Disallow: /*.jpg$
위 문장은 구글의 이미지를 검색하는 로봇에게 gif와 jpg로 된 이미지를 모두 검색하지 않도록 하는 명령어입니다.

참고로 주석문을 작성하기 위해서는 앞에 #를 적어주시면 됩니다. 로봇의 이름은 개별 검색사이트를 방문하셔서 아셔야 합니다. 주로 쓰는 로봇의 이름만 알려드리면...
구글: Googlebot
구글 이미지 : googlebot-image
네이버 : cowbot
야후 : Slurp
야후 이미지 : Yahoo-MMCrawler
엠파스봇 : empas
MSN : MSNBot
첫눈: 1Noonbot 1.0


차단했을 경우에, 즉시 삭제되는 것은 아니지만 시간이 지나면 검색포털에서의 검색 결과 역시 삭제된다는 사실을 염두에 두셔야 합니다.


* Crawl-Delay 항목을 지정하시면 검색엔진의 방문을 지연시킬 수 있습니다. 기본단위는 초단위입니다. 아래의 명령어 역시 위의 *.jpg$처럼 야후, MSN에서만 작동됩니다.
User-agent: Slurp
Crawl-delay: 20

이렇게 하시면, 모든 검색로봇의 방문을 허용하되 5초동안은 다시 방문을 하지 않도록 지정하게 됩니다.


** http://www.mcanerin.com/EN/search-engine/robots-txt.asp  이곳에 가시면.. 비록 외국 사이트긴 하지만.. robots.txt를 제작해줍니다. ^^!! 고르기만 하면 자동으로 파일을 생성해주죠. 가져와서 메모장에 붙여놓고 저장후 FTP로 올리면 됩니다.

***
http://tool.motoricerca.info/robots-checker.phtml 이곳은 만들어진 robots.txt파일이 잘 작성되었는지 검사해주는 사이트입니다.

**** 끝으로 제가 사용하고 있는 robots.txt는 http://bklove.info/robots.txt  여기서 확인이 가능합니다. 야후의 경우 시간을 지연시키는 명령어를 사용했고, 구글과 구글이미지, MSN의 경우 이미지와 PDF, ZIP, PPT파일에 대한 검색을 차단했습니다.

http://cafe.naver.com/nanospeed.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=188
네이버 [robots.txt]이용 검색로봇 차단 가이드 검색 카페 최상위 글
이올린에 북마크하기
2008/03/24 23:38 2008/03/24 23:38

[apache] 검색로봇 차단법

Posted at 2008/03/24 23:22 // in Linux // by 엔신
갑자기 특정한 IP 주소에서 짧은 시간에 많은 접속을 하여 시스템의 부하가 올라가 웹 접속 로그를 살펴보니 아래와 같이 이해할 수 없는 내용이 남는 경우가 있다.

211.51.63.4 - - [26/Sep/2001:22:19:42 +0900] "GET /robots.txt HTTP/1.0" 404 285
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /index.asp HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /index.php HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /index.php3 HTTP/1.0" 404 285
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.htm HTTP/1.0" 404 286
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.html HTTP/1.0" 404 287
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.asp HTTP/1.0" 404 286
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.php HTTP/1.0" 404 286
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.php3 HTTP/1.0" 404 287
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /main.htm HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /main.html HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /main.asp HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /main.php HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /main.php3 HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.htm HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.html HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.asp HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.php HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.php3 HTTP/1.0" 404 284

무 작위로 index.php index.asp, index.php3, default.html, default.asp 등의 파일을 순서대로 요청하는 것으로 보아 검색 엔진일 가능성이 높다고 가정할 수 있다. 특히 robots.txt 파일을 요청하는 것으로 검색 엔진이라고 장담할 수 있을 것이다.
httpd.conf 에서 Logformat 를 common 대신 {User-agent} 변수를 추가하여 정의하면 서버에 접근하는 agent 정보도 알 수 있는데, UA(User Agent)는 일반적인 웹 브라우저 뿐만 아니라 검색 로봇이나 방랑 로봇등 웹서버에 접속하여 웹 페이지를 가져오거나 해석하는 모든 종류의 프로그램을 뜻한다. 이는 흔히 사용하는 Internet Explorer나 Netscape 등의 브라우저외에도 lycos의 spider 나 AltaVista의 Scooter와 같은 검색 로봇과 Teleport 나 WebZIP, GetRight 등 오프라인 브라우저 모두 UA의 범위에 속한다. 검색 로봇이 어떤 사이트를 방문하여 문서를 인덱싱 하거나 오프라인 브라우저가 페이지를 한꺼번에 요청하여 긁어가는 것은 일반 사용자가 웹 브라우저로 서버에 접속하여 원하는 페이지를 보는 일반적인 경우와 그 성격이 다르다. 여러 페이지를 동시에 요청하는 정도를 벗어나 아예 한 웹 사이트의 모든 페이지를 짧은 시간에 통째로 긁어가기도 하기 때문에 이러한 경우에는 서버에 매우 많은 프로세스를 생성하면서 웹 서버의 로드가 크게 올라가게 되는 것이다. 특히 DB와 연동하는 사이트의 경우에는 심할 경우 정상적인 서비스를 하지 못 할 정도이다.
모든 사이트가 검색 엔진에 등록될 필요는 없거나 또는 허용된 일부 유저만 접근이 가능한 페이지의 경우 로봇의 접근을 차단할 필요가 있으므로 이러한 경우에는 아래와 같이 설정된 robots.txt 파일을 웹 서버의 최상위 / 디렉토리에 두면 모든 검색 로봇이 /secure 디렉터리를 인덱싱하지 않는다.

User-agent: *
Disallow: /secure

"User-agent: *"는 모든 로봇를 대상으로 한다는 것을 뜻하며 예를 들어 AltaVista Scooter등 특정한 UA 에 대해서만 설정하고 싶다면 다음과 같이 하면 된다.

User-agent: scooter

검색로봇과 관련된 더 자세한 정보를 얻기 원한다면 아래의 사이트를 참고하기 바란다.


http://info.webcrawler.com/mak/projects/robots/robots.html
http://info.webcrawler.com/mak/projects/robots/norobots.html

아울러 웹서버에서 특정한 User-Agent 의 접근을 차단하고자 한다면 httpd.conf 에 아래와 같이 BrowserMatch 를 사용하여 설정해도 된다.

BrowserMatch "WebZIP" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out
BrowserMatch "WebCopier" go_out
BrowserMatch "NetZip Downloader 1.0" go_out
BrowserMatch "NetZip-Downloader/1.0.62" go_out
BrowserMatch "Teleport Pro/1.29" go_out
BrowserMatch "Teleport Pro/1.24" go_out
BrowserMatch "Teleport Pro/1.26" go_out
<Directory /home/no-ua/>
Options Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
Deny from env=go_out
</Directory>

위 와 같이 설정시에는 /home/no-ua/ 디렉토리 이하에 대해서는 go_out 이라는 변수에 지정한 WebZip 이나 Teleport등 UA 프로그램의 접근을 차단하게 된다. 다른 UA도 차단하고 싶으면 위와 같이 웹서버의 로그를 살펴보아 agent 정보에 남는 UA를 go_out 으로 추가해 주면 된다.
같은 방식으로 만약 특정 디렉토리 이하에 대해서 MSIE 브라우저로 접근하지 못하도록 설정한다면 어떻게 하면 될까?
아래와 같이 BrowserMacth 를 이용하여 설정하면 agent 정보에 MSIE 라 설정되는 UA는 차단될 것이다.

BrowserMatch "MSIE" msie
<Directory />
Options Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
Deny from env=msie
</Directory>

최근에는 각종 로봇이 버전을 새롭게 하며 계속적으로 나오고 있으므로 지속적으로 로그를 살펴보아 접근 통제를 하고자 하는 UA 를 설정하는 것이 좋다.
이올린에 북마크하기
2008/03/24 23:22 2008/03/24 23:22

파일내 문자열 검색

Posted at 2008/03/15 10:20 // in Linux // by 엔신
파일명의 확장자 txt를 포함하는 파일들을 현재 디렉토리에서 찾아서 내용중에서 "홍길동"이 있는 파일의 내용은 모두 보여준다.
find . -name "*.txt" | xargs grep 홍길동

파일명의 확장자 txt를 포함하는 파일들을 현재 디렉토리에서 찾아서 내용중에서 "홍길동"이 있는 파일의 이름을 보여준다.
find . -name "*.txt" | xargs grep -l 홍길동

리눅스 파일에 특정 문자열 치환 하기
find ./ -name "*.jsp" -exec perl -pi -e 's/기존문자열/바꿀문자열/g' {} \;

http://www.ihave.kr/bbs/view.php?id=board&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=14
이올린에 북마크하기
2008/03/15 10:20 2008/03/15 10:20

사랑비 설치시 테이블 생성 실패

Posted at 2008/03/14 18:35 // in Linux // by 엔신

mysql 버전이 4.x대에서는 테이블 생성 실패한다
사랑비내에 schema.php 파일을 아래와 같이 수정하면 설치 가능

////////////////////////////////////////

<?
$table="default";

$sarangbi_bgm_query1 = "CREATE TABLE sarangbi_setup_".$table."(
`no` int(1) NOT NULL auto_increment,
`pw` varchar(41) NOT NULL default '',
`use_start` int(1) NOT NULL default '1',
`use_random` int(1) NOT NULL default '0',
`use_context` int(1) NOT NULL default '0',
`use_category` int(1) NOT NULL default '0',
`use_status` int(1) NOT NULL default '1',
`use_user` int(1) NOT NULL default '1',
`use_sort` int(1) NOT NULL default '3',
`use_frame` int(1) NOT NULL default '0',
`init_volume` int(2) NOT NULL default '7',
`bgm_frame` varchar(255) NOT NULL default 'top.bgm',
`list_frame` varchar(255) NOT NULL default 'top.bgmlist',
`skin_dir` varchar(255) NOT NULL default 'pink',
`play_alt` varchar(255) NOT NULL default 'Play',
`stop_alt` varchar(255) NOT NULL default 'Stop',
`back_alt` varchar(255) NOT NULL default 'Previous Mulsic Play',
`forward_alt` varchar(255) NOT NULL default 'Next Music Play',
`pause_alt` varchar(255) NOT NULL default 'Pause',
`vol_up_alt` varchar(255) NOT NULL default 'Volume Up',
`vol_down_alt` varchar(255) NOT NULL default 'Volume Down',
`one_alt` varchar(255) NOT NULL default 'No Loop',
`loop_alt` varchar(255) NOT NULL default 'Loop',
`sound_on_alt` varchar(255) NOT NULL default 'Sound On',
`sound_off_alt` varchar(255) NOT NULL default 'Sound Off',
`sequence_alt` varchar(255) NOT NULL default 'Sequence',
`random_alt` varchar(255) NOT NULL default 'Ramdom',
`list_alt` varchar(255) NOT NULL default 'Show BGM List',
`admin_alt` varchar(255) NOT NULL default 'Administrator',
`num_list` int(2) NOT NULL default '20',
PRIMARY KEY (`no`))";

$sarangbi_bgm_query2 = "CREATE TABLE sarangbi_category_".$table."(
`no` int(13) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '일반',
PRIMARY KEY (`no`))";

$sarangbi_bgm_query3 = "CREATE TABLE sarangbi_music_".$table."(
`no` int(13) NOT NULL auto_increment,
`subject` varchar(255) NOT NULL default 'MUSIC',
`context` text,
`filename` varchar(255) NULL default '',
`s_filename` varchar(255) NULL default '',
`ftp` int(13) default NULL,
`link` varchar(255) default NULL,
`linkfile` int(1) default NULL,
`use_this` int(1) default '1',
`category` int(13) default '1',
`use_caption` int(1) default '0',
`caption_url` varchar(255) default NULL,
`caption_filename` varchar(255) default NULL,
`caption_s_filename` varchar(255) default NULL,
PRIMARY KEY (`no`))";

$sarangbi_bgm_query4 = "CREATE TABLE sarangbi_ftp_".$table."(
`no` int(13) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '0',
`address` varchar(255) NOT NULL default '0',
`directory` varchar(255) NOT NULL default '',
`link` varchar(255) NOT NULL default '0',
`id` varchar(255) NOT NULL default '0',
`pw` varchar(255) NOT NULL default '0',
`port` varchar(10) NOT NULL default '21',
PRIMARY KEY (`no`))";


// 초기값 입력
$sarangbi_bgm_query5 = "INSERT INTO sarangbi_setup_".$table." values(1, '2d828fdd01b8e5b7', 1, 0, 0, 0, 1, 1, 3, 0, 7, 'top.bgm', 'top.bgmlist', 'pink', 'Play', 'Stop', 'Previous Music Play', 'Next Music Play', 'Pause', 'Volume Up', 'Volume Down', 'No Loop', 'Loop', 'Sound On', 'Sound Off', 'Sequence', 'Random', 'Show BGM List', 'Administrator', 20)";
$sarangbi_bgm_query6 = "INSERT INTO sarangbi_category_".$table." values('1','일반')";

?>

이올린에 북마크하기
2008/03/14 18:35 2008/03/14 18:35

Mysql 4.1이상버전에서 4.0 으로 다운그레이드

Posted at 2008/03/14 14:15 // in Linux // by 엔신
Mysql 4.1이상버전에서 4.0 으로 다운그래이드시 데이터 이동법

백업받을 서버에서 백업
./mysqldump -u{UserID} -p{PASSWORD} {DbName} {TableName} --default-character-set=euckr > {DumpFileName}

;Dump시에 캐릭터셋이 utf인가 모시깽인가로 되서 한글이 깨져서 나오더군요. 그래서 캐릭터셋을 지정을 해줘서 dump를 받습니다.

 

데이터 넣을 서버에서

#wget http://DomainName/{DumpFileName}
: 파일 받기

 

#vi {DumpFileName}
:vi editor를 열어서 아래의 CharterSet 부분 삭제
"DEFAULT CHARSET=euckr "

 

#mysql -u{UserID} -p{PASSWORD} {DbName} < {DumpFileName}


4.1 서버에서 dump 받으실때. --compatible=mysql40 옵션을 주시면. 4.0 버젼에 맞게 변형되어 백업이 받아집니다.  


mysql4.1.x -> mysql4.0.x 로 옮기기
리눅스_디비서버 2006/05/22 13:57  
mysql 4.0.x 버전에서 4.1.x 버전과 character-set이 달라서 데이터를 이전할때 고생하시는 분들이 많습니다.  
4.0.x 버전에서 4.1.x 버전으로 업그레이드 하는 문서는 많지만, 다운그레이드에 관한 문서는 별로 없어서 저도 고생을 좀 했습니다. ^^  

1. 4.1에서 덤프 받을때 --default-character-set=euckr 옵션을 주고 덤프 받는다.

# /usr/local/mysql/bin/mysqldump --default-character-set=euckr -u xxx -p xxx > xxx.sql

2. 덤프받은 xxx.sql 파일을 vi 편집기로 열고 편집

" DEFAULT CHARSET=euckr" 삭제       :%s/ DEFAULT CHARSET=euckr//g
" collate euckr_bin" 삭제                     :%s/ collate euckr_bin//g
euckr -> euc_kr로 변경                       :%s/euckr/euc_kr/g

3. xxx.sql을 4.0이하 버전에서 복구

# /usr/local/mysql/bin/mysql -u xxx -p xxx < xxx.sql



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

mysqldump --create-options --compatible=mysql40 -uroot -p비밀번호 


백업받을 서버에서 백업
./mysqldump -u{UserID} -p{PASSWORD} {DbName} {TableName} --default-character-set=euckr > {DumpFileName}

;Dump시에 캐릭터셋이 utf인가 모시깽인가로 되서 한글이 깨져서 나오더군요. 그래서 캐릭터셋을 지정을 해줘서 dump를 받습니다.



데이터 넣을 서버에서

#wget http://DomainName/{DumpFileName}
: 파일 받기



#vi {DumpFileName}
:vi editor를 열어서 아래의 CharterSet 부분 삭제
"DEFAULT CHARSET=euckr "



#mysql -u{UserID} -p{PASSWORD} {DbName} < {DumpFileName}


4.1 서버에서 dump 받으실때. --compatible=mysql40 옵션을 주시면. 4.0 버젼에 맞게 변형되어 백업이 받아집니다.

http://cafe.naver.com/himss.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=658
네이버에 Mysql 4.1이상버전에서 4.0 으로 다운그래이드 검색해서 보면됨
이올린에 북마크하기
2008/03/14 14:15 2008/03/14 14:15

UTF-8 지원 제로보드4

Posted at 2008/03/11 15:58 // in Linux // by 엔신

이 프로그램은 본 홈페이지를 작업하며 생성된 제로보드의 수정본입니다.
프로그램의 라이센스와 버전은 존재하지 않으며 이 제로보드를 사용하여 발생하는 문제에 대해 본인은 어떠한 책임도 지지 않습니다.

특징1. 제로보드가 UTF-8을 지원할 수 있도록 파일포맷 및 일부코드가 수정되었습니다.
2. 사용자의 선택에 따라 제로보드의 언어를 바꿀 수 있습니다. (현재는 한국어, 일본어, 영어만 지원됩니다.)
3. 한번 선택된 언어는 다음번 접속에도 언어정보를 유지할 수 있도록 언어정보를 쿠키에 저장합니다.
4. 페이지별 properties가 존재하여 페이지 로드시 언어셋 문자열을 같이 로드하게 되므로 세션의 낭비가 적습니다.
5. 언어의 추가적인 확장이 용이합니다. (페이지별 properties가 존재하여 페이지별 작성이 가능합니다.)
6. 사용된 제로보드 버전은 4.1 pl8 입니다.

[UTF-8 지원 제로보드4]


원래 이거, 노출 안할라했는데,

생각해보니 나도 네이버 블로그라던지 카페에서 유용한 자료를 많이 얻었기에 보답 차원에서...


유의사항 : 버그패치만 하고 있습니다. (-_-)

이올린에 북마크하기
2008/03/11 15:58 2008/03/11 15:58

화이트 도메인 등록 방법

Posted at 2008/02/29 14:53 // in Linux // by 엔신

웹메일서버를 사용하기 위해 4대포털 사이트에 ip등록
-> www.kisarbl.or.kr 입니다. 요기등록하믄 국내 10개 포털에 자동등록됩니다.

SPF 레코드 작성하기


아래 예시값을 참고하여 DNS ZONE 파일이 입력하여 주십시요. ( 최종 )

예)zone 파일의 마지막에 도메인, IN, TXT, 밑의 예시값을 넣으시고 DNS를 재 시작합니다.
예)kisarbl.or.kr. IN TXT "v=spf1 ip4:61.251.112.142 -all"
윈도우 DNS 서버를 운영할 경우 다음을 참조하십시요. → 윈도우 SPF 설정
리눅스계열의 경우 밑의 주황색 권고안중에서 하나만 하셔야 합니다
ekid.co.kr.  IN   TXT   "v=spf1 ip4:219.154.135.141 -all"
의미: 위 메일발송IP를 위조하여 보내온 메일은 수신자의 메일서버에서 drop시켜라.
ekid.co.kr.  IN   TXT  "v="spf1" ip4:219.154.135.141 ~all"
의미: 위 메일발송IP를 위조하여 보내온 메일은 수신자의 메일서버의 정책에 따라 판단하라
DNS ZONE파일을 변경시킨후, 하루이상이 지난후 확인을 하셔야 모든 DNS에 올바른 설정값이 나타납니다.
DNS의 특성상, 모든 DNS가 Refresh가 되는 시간이 필요합니다.
만약, 당장 확인을 원하신다면 다음과 같이 해주시기 바랍니다.
//////////////////////////////////////////////////////

위 내용을 읽었어도 처음에 잘 이해가 안될 가능성이 높다.
자세히 설명할테니 잘 읽어 보아라.
화이트 도메인이란 스팸이 많이 오니까 다음이나 네이버 같은 대형포털에서 해당 아이피를 차단하게 된다.
차단하다보니 스팸을 보내지 않은 사람들도 우연찮게 불이익을 당하여 차단되어 메일발송이 거부되는 경우가 많다. 그래서 화이트 도메인(말그대로 깨끗한도메인)을 등록하여 해당 도메인이 깨끗하다는 것을 입증시켜서 차단을 막는 방법이다.
우선 SPF레코드를 등록해야 된다.
그러기 위해서는 사용하는 계정(호스팅)에 SPF레코드 등록을 요청하여야 한다.
SPF 레코드값을 적어서 호스팅 업체에 등록을 해달라고 요구를 하여야 하는데,
일단 메일서버 IP를 확인하여야 한다.
시작 - 실행 - cmd 입력하고 창뜨면 - nslookup rain9.com(도메인)

////////////////////////////
Server:  kns.kornet.net
Address:  168.126.63.1

Non-authoritative answer:
Name:    rain9.com
Address:  61.111.254.241
///////////////////////////
라고 뜰 것이다(내 도메인을 예를 들어서 설명하니까 각자 도메인별로 좀 틀릴수 있다.
그러면 Address:  61.111.254.241 이것이 나의 메일서버 아이피이다.(메일서버 웹서버이기도 하고 ftp서버이기도함)
물론 나의 계정(호스팅) 서버 아이피이다. 호스팅 받는 업체가 메일서버를 따로 두고 사용한다면
해당 메일서버 도메인을 적는다거나, 업체측에 메일서버 아이피를 문의하여 확인하길 바란다.
아무튼 그럼 나의 rain9.com의 메일서버 아이피는 61.111.254.241이다. SPF레코드 작성을 하기 하여야 한다.
위 내용중에 보면
의미: 위 메일발송IP를 위조하여 보내온 메일은 수신자의 메일서버에서 drop시켜라.
의미: 위 메일발송IP를 위조하여 보내온 메일은 수신자의 메일서버의 정책에 따라 판단하라.
라는 부분이 있다.
두 줄의 차이점이 뭐가 다른지 처음에 잘 모를텐데 뒷부분인 -all 과 ~all 로 차이가 있음을 알 수있다.
차이에 따른 의미는 한글로 잘 설명이 되어있으니 이해가 되었을 것이다.
아무튼 둘중 하나를 개인에게 맞는걸로 골라서
v="spf1" ip4:219.154.135.141 ~all"  이 값을(또는-all) 호스팅업체에 연락해서 SPF레코드 추가해달라고 해야 한다. 그 작업을 위에 나와있는 대로 dns zone 파일 변경 작업이라고 한다.
호스팅업체에서 변경해준다고 해서 처리되서 바로 적용 되는 것은 아니고 네임서버 변경으로 인해 인터넷에 퍼지는 시간이 만하루정도 걸린다고 보면 된다.그러니 이 다음부터는 하루 후에 다시 하자.
하루정도 지나서 위에 나와있는 nslookup해서 server 도메인네임서버주소 해서 확인을 해보자.
도메인네임서버 확인은 호스팅받고있는 업체의 홈페이지에 접속하면 네임서버라고 해서 1차 2차 해서 안내되고 있는 것을 확인할 수 있다.(어느업체나 메인페이지에 다 나와있음)
주로 ns1.byus.net(나는 byus.net이란 호스팅업체를 사용중이다) 이런식으로 되어 있을것이다.
그러니 nslookup 에서 server byus.net(앞에ns1은 빼야 된다)
하고 set type=txt 입력하고 rain9.com 쳐보면 위에 그림처럼 나타난다.

//////////////////////////////////////////////////////////
C:\Documents and Settings\Administrator>nslookup
Default Server:  kns.kornet.net
Address:  168.126.63.1

> server byus.net
Default Server:  byus.net
Address:  210.118.193.172

> set type=txt
> rain9.com
Server:  byus.net
Address:  210.118.193.172

rain9.com       text =

        "v=spf1 ip4:61.111.254.241 ~all"
rain9.com       nameserver = ns.byus.net
rain9.com       nameserver = ns2.byus.net
ns.byus.net     internet address = 210.118.193.172
ns2.byus.net    internet address = 61.111.255.123
//////////////////////////////////////////////////////////

나같은 경우는 이렇게 나온다. 밑에 v=spf1 해서 나오는 부분이 안나오고 다른 것이 나올 경우
SPF레코드값이 적용이 안되었기 때문이다. 호스팅업체에 요청했을 경우 다시 한번 SPF레코드값이 등록됐는지 확인하길 바란다. 또는 호스팅업체에 요청하고 하루 지났지도 않았는데 안나온다고 난리피우지 마라.
사실 이건 자기가 뭘 하는지 알기 위한 방법을 안내한거고 귀찮으면 호스팅업체에다가 연락해서 SPF레코드 등록해달라고 해당 도메인 알려주면서 요청하면 알아서 해줄 것이다.
아무튼 등록되면 되서 확인을 하거나 하루지났으면
https://www.kisarbl.or.kr/ 사이트로 접속해라.
한국정보호진흥원에서 관리하는 사이트로서 한국정보호진흥원은 국가기관으로 볼수있다. IT보안과 개인정보 해킹 등 관련된 모든 업무를 한다고 보면 된다.
아무튼 접속했으면 White Domain 등록에서 사용하는 도메인 적으면 넘어가서 술술 적으면 될 것이다.
만일
현재 위 도메인의 DNS에는 SPF Record가 작성되어 있지 않거나 잘못 작성되어 있으므로, White Domain으로 등록할 수 없습니다.
라고 뜨게 되면 위에서 말한 SPF레코드가 등록이 안됐기 때문이니 등록하고 다시해라.
이상 끝인데 가끔 등록신청해놓고 등록거부 당하는 경우가 있다.
그럴 경우를 대비해서 신청해놓고 몇일후나 몇주후에 한번 접속해서 등록거부 당하지 않았는지 확인해보자.
그러나 화이트 도메인 등록이 완료되었다고 대형포털사이트로의 이메일 발송이 다 해결 되는 것은 아니다. 해당 포털들은 정보보호진흥원의 스팸차단리스트 내역을 참조만 할 뿐이고 100% 그대로 이행하는 것은 아니기 때문이다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/02/29 14:53 2008/02/29 14:53