시스템 백업 과정
========================
시나리오: 장애가 발생한 CentOS의 MySQL InnoDB 파일을 이용해서(C 서버), Slackware 상에(S 서버)
복구하고 mysqldump 받기
Table Space: /mydb_db/mydb_sp/
Database: mydb
1) C 서버: 다음과 같은 파일들이 복구 시 필요하다. 아래 위치의 파일들을 백업받는다.
ib_logfile1, ib_logfile0, ibdata1, ibdata2
/mydb_db/mydb_sp/*
table관련 .frm 파일들
/usr/local/mysql/var/mydb/*
2) S 서버: my.cnf 파일의 로그 사이즈를 기존 시스템과 동일하게 한다.
# /etc/rc.d/rc.mysqld stop
# cd /var/lib/mysql/
# mkdir mydb
# cp ~/db/var/mydb/* /var/lib/mysql/mydb/
# chown mysql:root mydb
# chown mysql:mysql mydb/*
2단계까지 하고 재시작하면 에러가 나면서 mysql 을 시작할 수 없다.
3) S 서버: my.cnf 에 다음줄을 추가한다.
<<<
# Uncomment the following if you are using InnoDB tables
innodb_force_recovery = 4
>>>
4) S 서버: 재시작
# /etc/rc.d/rc.mysqld start
5) S 서버: mysqldump 받을 수 있다.
# mysqldump mydb > mydb.2007
시스템 복구 과정
========================
6) C 서버: mysqld 중지
# service mysqld stop
7) C 서버:
# vi /etc/my.cnf
innodb_force_recovery = 4 옵션을 제거한다.
8) C 서버: 기존 Table Space내의 파일들과 frm 관련 파일들을 삭제한다.
# rm /mydb_db/mydb_sp/*
# rm /usr/local/mysql/var/mydb/*
9) C 서버: mysqld 재시작
# service mysqld start
10) C 서버: data import
# mysql mydb < mydb.2007

Linux에서 pop3, imap 사용을 위해 범용적으로 사용 되는 dovecot이지만, 자잘한 에러들이 너무나 많다.

그래서 문제가 있을때 마다 조금씩 정리 해보고자 합니다.

 

증상 1 – telnet 혹은 아웃룩을 통한 연결시 끊어짐 연결 현상 발생.

[root@ns1 /etc]#telnet localhost 110
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
+OK dovecot ready.
user *****
+OK
pass *****
+OK Logged in.
Connection closed by foreign host.

 

– Error Log

Feb  2 19:26:56  dovecot: Dovecot v1.0.7 starting upFeb  2 19:27:01 test dovecot: chdir(/home/users/eye) failed with uid 123: Permission denied

Feb  2 19:27:01 test dovecot: child 4170 (pop3) returned error 89

 

– 해결방안

홈디렉토리 권한 711 이상 필요.

chmod 711 /home/users/eye

해결이 되지 않는 경우 하위 디렉토리 권한도 함께 확인!! /home, /home/users 또한 711이 되지 않는다면 에러 발생.

 

전체 참고 : http://rhn.uta.edu/pub/docs/RH-DOCS/rhel-ig-x8664-multi-ko-3/index.html

1. 디스크 파티션 이해 및 Red Hat Linux 설치시 파티션 툴의 사용 방법
——————————————————————————————————————————————————————————————————
* 디렉토리 설명
/ : Root 디렉토리(최상의 디렉토리이며, 리눅스는 드라이브명이라는 개념이 없다. 오직 Root 디렉토리를 기준으로 모든 파일 디렉토리가 위치한다.
/bin : 시스템 부팅에 관련된 파일이 모여 있다.
/dev : 디바이스 파일
/etc : 각종 시스템 설정 상황을 담고 있는 파일들이 위치해 있다.
/home : 일반 사용자의 홈 디렉토리(만약 슈퍼유저인 root로 로그인을 하게 되면 /root 라는 폴더가 개인 폴더가 된다)
/lib : 공유 라이브러리
/mnt : 다른 파티션을 마운트할 마운트 포인트
/proc : 프로세스 정보를 담고 있는 파일들이 위치한다.
/root : 슈퍼 유저의(root)의 홈 디렉토리
/sbin : 슈퍼 유저가 시스템을 운영하는데 필수적인 실행 파일들이 들어 있다.
/tmp : 임시 파일들을 읽고 쓰는 역할을 하는 디렉토리
/usr : 사용자들을 위한 여러가지 프로그램들과 설정 파일들이 담겨 있다. 기타 데몬들이 아래 디렉토리에 설치된다.
/var : 로그 파일을 비롯한 각종 시스템 관리와 관련된 정보들이 저장된다.

* 파티션
/boot : 커널 컴파일을 안한다면 100M로 충분 여유있게 500M까지 잡는게 좋다.
/root : 100M ~ 300M 사이
/usr : 설치 프로그램이 많으면 많이 주고 최소 2G 이상으로 하는게 좋다.
SWAP : DB(Oracle)를 사용한다면 2G 정도의 여유를 주는게 좋다.
/tmp : 임시파일이 저장되는 곳이니 200M 충분
/var : Server를 돌린다면 변동 파일들이 저장되는 곳 대략 2G

ex)

Filesystem Size Used Avail Use% Mounted on
/dev/sda5 9.7G 751M 8.4G 9% /
/dev/sda1 99M 12M 83M 12% /boot
none 506M 0 506M 0% /dev/shm
/dev/sda3 9.7G 6.1G 3.2G 66% /home
/dev/sda9 37G 11G 24G 32% /supp1
/dev/sda7 2.0G 36M 1.8G 2% /tmp
/dev/sda2 9.7G 6.3G 2.9G 69% /usr
/dev/sda6 4.9G 249M 4.4G 6% /var

——————————————————————————————————————————————————————————————————

– 디바이스 포맷
# mke2fs -t ext2 /dev/hda : ext2 파일시스템 생성하기
# mke2fs -j /dev/hda : ext3 파일시스테 생성하기
# mkfs -t ext2 /dev/hda : ext2 파일시스템 생성하기
# mkfs -t ext3 /dev/hda : ext3 파일시스템 생성하기

– 디바이스 마운트
# mount -t 파일형식 디바이스명 마운트지점(마운트 설정)
# umount 디바이스명(마운트 해지)
ex)
# mount -t ext3 /dev/hda /mnt/cdrom
# umount /dev/hda

– DVD ROM 부팅 방법
1) EFI Shell [Built -in]으로 부팅
2) Shell> fs0:
3) fs0:>> ls
4) fs0:>> elilo

– SWAP 공간 추가
# dd if=/dev/hda8 of=/swap bs=1024 count=65535
# mkswap /swap
# swapon /swap (설정)
# swapoff /swap (제거)
# rm /swap (swap 잡은 파일 삭제)

– 여러파일 백업할때
# ls 대상파일명 | 표준입력을 변환(xargs) -t -i cp {} {}.bak
ex)
# ls test* | xargs -t -i cp {} {}.bak

– 한글언어 사용
# vi /etc/sysconfig/i18n
LANG=”ko_KR.eucKR”
SUPPORTED=”en_US.UTF-8:en_US:en:ko_KR.eucKR:ko_KR:ko”
SYSFONT=”lat0-sun16″
SYSFONTACM=”8859-15″

# vi /etc/profile 내용 추가
#================================
LANG=”ko_KR.eucKR”
SUPPORTED=”ko_KR.UTF-8:ko_KR:ko”
SYSFONT=”latarcyrheb-sun16″
export LANG SUPPORTED SYSFONT
#================================
export LC_ALL=ko_KR.eucKR
export LANG=ko_KR.eucKR

– Console command 경로 표시
# vi /etc/bashrc
37 [ “$PS1” = “\\s-\\v\\\$ ” ] && PS1=”[\u@\h \$PWD]\\$ ”

– 콘솔에서 VI 편집기 명령어 변환하기
# set -o vi

– 시스템 정보 감추기
# vi /etc/inetd.conf
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

– 네트워크 통신 테스트 단계
1) Gateway 까지 통신에 이상이 없는지?
2) 외부망까지 통신에 이상이 없는지?
3) DNS까지 통신에 이상이 없는지?
4) 도메인을 통한 통신이 이상이 없는지?

2. Red Hat Linux 설치에 관한 전반적인 이해 및 능력, 특히 네트워크 설치

Master Boot Recoder.(MBR)이란
컴퓨터의 전원이 들어오면 롬바이오스의 하드웨어 체크가 끝난 뒤,
하드디스크 중에서 가장 먼저 읽어들이는 첫부분.
즉 OS로 부팅을 하기 위한 내용을 위한 공간. 이 부분이 물리적으로
파손되면 이 하드디스크로는 절대로 부팅할 수 없다.

– 네트워크 설치

/etc/sysconfig/network-scripts 디렉토리에 ifcfg-xxxx와 같은 파일을 보실 수있습니다.
네트워크 카드에 따라 파일이름이 다릅니다.
여러개의 네트워크 카드가 있을경우 xx0 , xx1, xx2와 같은 파일명을 보실 수 있습니다.

보통은 아래와 같은 파일을 볼 수 있습니다.

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

여기서 ifcfg-lo 파일은 루프백 설정파일로 변경하실 필요가 없고
ifcfg-eth0, ifcfg-eth1 과 같은 파일을 vi에디터로 열어서 편집하시면 됩니다.
설정내용은 파일을 열어보시면 쉽게 알 수 있을것입니다.

파일 내용이 변경되었다면 아래 명령어로 네트워크를 재 시작하시면 됩니다.
# /etc/init.t/network restart
# ifdown eth1
# ifup eth1

# vi /etc/sysconfig/network-script/ifcfg-eth0
—————————————————————————————————————————————
DEVICE=eth0 : 네트워크 디바이스의 장치명, 리눅스는 ethx로 네트워크 디바이스 장치명이 정해져 있음
BOOTPROTO=static : NIC에 IP를 Dynamic으로 설정할 것인지 아니면 Static으로 설정할 것인지 정함
(dhcp = 유동 IP 설정으로 DHCP Server를 통하여 IP 설정, static = 고정 IP 설정으로 관리자가 IP를 직접 입력)
IPADDR=100.5.77.113 : eth0에 IP 주소를 설정
BROADCAST=100.5.77.255 : Broadcast 주소를 설정
NETMASK=255.255.255.0 : Netmask 값을 설정
NETWORK=100.5.77.0 : 해당 네트워크의 Network ID 설정
ONBOOT=yes : 해당 NIC를 시스템이 부팅할 때 활성화할지 여부(yes or no)
USERCTL=no : 해당 NIC를 root를 제외한 사용자가 On/Off 가능하게 할지 여부(yes or no)
GATEWAY=100.5.77.1 : 해당 NIC의 Default Gateway를 설정한다. /etc/sysconfig/network 파일에서 설정한 gateway 보다 우선한다.
—————————————————————————————————————————————
/etc/inittab

◆3. 설치시 구성 요소에 관한 이해 (LILO/GRUB, authentication, networking, system initialization, packages 등)

◆4. 설치 옵션의 post-installation 구성 방법에 관한 이해

5. Red Hat Linux 파일시스템 레이아웃 이해
FHS (Filesystems Hierarchy Standard)는 Linux와 Unix사이에서 디렉토리 구조의 상호 교환성을 유지하기 위한 표준수단이 된다.

* mkfs

-t 는 type 즉 ext2, ext3, reiserfs, vfs, jfs

장치이름에는 /dev/hda1 이런식의 파일시스템을 만들 하드디스크나 이동식 디스크 등의 블럭 장치가 들어가게 되는 것입니다.

# mkfs -t ext3 /dev/hda2

현재 mount된 파일 시스템 타입을 알고 싶다면 mount를 하시면 되구요.
-V 정 보를 자세하게 보여준다. 여기에는 실행되는 특정파일 시스템을 만드는 풀그림에 대한 정보도모두 포 함 된 다. 이 옵션이 한번 이상 사용되면 특정 파일 시스템을 만드는데 사용될그 풀그림의 정보만 보여주고 실질 적으로 실행은 되지 않는다. 이것은 실질적으로 검사하는 것에만 유용하게 쓰인다.
-t 형태 만들어질 파일 시스템의 형태를 지정한다. 이 옵션 이 지정되지 않으면, /etc/fstab 파일에서 그 해당 파일시스템을 찾고, 여기서도 못 찾으면, 기본적으 로 minix 파일 시스템을 사용한다.
fs-options 이것은 각 특정 파일 시스템을 만드는 풀그림에서 사용 되는 옵션을말한다. 대부분 같은 형식의 옵션이다.
-c 파일 시스템을 만들기 전에 먼저 불량 블럭 검사를 한다.
-l 파일이름 filename 으로부터 불량 블럭 목록을 읽는다.
-v 작업 상태, 결과를 자세하게 보여준다.

-o ro (readonly)를 주는 이유는 혹시라도 어떤 이유로 쓰기 동작이 수행되면 더 복구가 안되게 꼬여버릴 수 있기 때문이구요.

상세 파티션 정보
# fdisk -l

실행 레벨(RUNLEVEL)
# vi /etc/fstab
———————————————————————-
# Default runlevel. The runlevels used by RHS are:
# 0 – halt (Do NOT set initdefault to this)
# 1 – Single user mode
# 2 – Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 – Full multiuser mode
# 4 – unused
# 5 – X11
# 6 – reboot (Do NOT set initdefault to this)
#
id:5:initdefault:

6. script가 하는 일 및 /etc/sysconfig/network-scripts 파일 구성에 대한 이해
# ifconfig -a (네트워크 장치에 대한 모든 내용 출력)
# ifconfig eth0 up (해당 장치명을 사용)
# ifconfig eth0 down (해당 장치명을 사용하지 않음)
# ifconfig eth0 192.168.1.3 netmask 255.255.255.0 broadcast 192.168.0.255
(IP : 192.168.1.3, Netmake : 255.255.255.0, Gateway : 192.168.0.255)
# route (Route Table 출력)
# route add default gw 168.126.63.1(디폴트 게이트 웨이 설정)

7. multiple-boot 설치에의 다양한 접근 방법 이해 및 때때로 multiple-boot 설치에 사용되는 관련 설치 툴(rawrite, fips)

rawrite 부팅디스크 만들기

MS-DOS를 사용하여 디스켓을 단드시려면 RHEL CD #1에 dosutils/ 경로에서 rawrite 유틸을 사용한다.
C:\> d:
D:\> cd \dosutils
D:\dosutils> rawrite
Enter disk image source file name: ..\images\bootdisk.img
Enter target diskette drive: a:
Please insert a formatted diskette into drive A: and
press –ENTER– : [Enter]
D:\dosutils>
————————————————————————————————————-
우선 rawrite 유틸리티는 디스켓 이미지의 파일명을 묻습니다; 디렉토리와 기록할 이미지 이름 (예, ..\images\bootdisk.img)을 입력해 주십시오. 그 후 rawrite는 이미지를 기록할 디스켓 드라이브를 요청합니다; a:라고 입력하십시오. 마지막으로 rawrite는 선택하신 드라이브에 포맷된 디스켓을 삽입하셨는지 확인합니다. 확인을 위해 [Enter] 키를 누르시면, rawrite는 그 이미지 파일을 디스켓에 복사할 것입니다. 또 다른 디스켓을 만드셔야 한다면, 그 디스켓에 적절한 이름을 붙이신 후 rawrite를 다시 실행하시고 적절한 이미지 파일을 지정하시면 됩니다.

리눅스 (또는 리눅스와 유사한 운영 체제) 하에서 설치 디스켓을 만드시려면, (리눅스에서는 /dev/fd0라고 알려진) 3.5 인치 디스켓 드라이브를 나타내는 장치에 대한 쓰기 권한이 있어야 합니다.

먼저 포맷된 공 디스켓에 적절한 이름을 붙입니다. (예, 부팅 디스켓 또는 업데이트 디스켓) 그 후 디스켓을 디스켓 드라이브에 삽입하십시오. (디스켓을 mount[3]하지 마십시오.) Red Hat Enterprise Linux CD-ROM을 마운트하신 후 원하는 이미지 파일이 있는 디렉토리로 이동합니다. 그 후 다음 명령을 사용하시기 바랍니다. (필요하다면 이미지 파일명과 디스켓 장치명을 적절히 변경하십시오):

dd if=bootdisk.img of=/dev/fd0 bs=1440k

– fips
; fips라는 유틸리티를 이용하여 기존의 하나로 되어있는 파티션을 나누어 주어야 한다.

fips라는 유틸리티는 리눅스 시디의 /dosutils 라는 디렉토리에 있으며 자세한 사용법은 /dosutils/fipsdocs 라는 디렉토리에 있다.

참조 : http://blog.naver.com/joldan23?Redirect=Log&logNo=140013311986

8. kickstart 설치 기본 이해 (kickstart file, floppy- vs. network-based, installation media, boot disk preparation, etc.)

Kickstart 는 레드햇 리눅스의 설치를 자동화 시켜주는 것으로, 설치과정에서 필요로 하는 정보를 담은
파일이 필요(ks.cfg)로 한다. Kickstart 설치는 하나의 서버 시스템에 담은 파일(ks.cfg)을 담아놓으면
개별 컴퓨터에서 설치하는 동안 ks.cfg 파일을 읽어들여 설치를 자동화 하도록 한다.

하나의 머신에서 레드햇 설치시 이전 설치와 똑같이 설치하고자 하는 경우
네트워크에 있는 여러대의 머신을 모두 똑같이 설치하고자 하는 경우
네트워크에 있는 여러대의 머신을 모두 다른 설정으로 자동 설치하고자 하는 경우

참조 : http://coffeenix.net/board_view.php?cata_code=65&bd_code=22&bpage=

9. rpm 명령어 및 switch들에 대한 전반적인 지식, 특히 설치 및 querying of package에 관계된 것.

RPM(Redhat Package Manager)
레드헷 패키지 매니져 RPM으로 만들어진 패키지를 시스템에 설치/삭제/관리 해주는 명령어 이다.

-ivh : 패키지 설치
-Uvh : 패키지 버젼 업그레이드
-qa : 패키지 검색
-e : 패키지 삭제

RPM 기본 명령어

-U : 기존의 것을 삭제하고 업그레이드 하며 아무 메시지도 보여 주지 않는다.
-Uv : 기존의 것을 삭제하고 업그레이드 하며 패키지 이름을 보여 준다.
-Uvh : 기존의 것을 삭제하고 업그레이드 하며 그 설치 진행과 과정을 표시한다.
-i : 기존읠 것을 삭제하고 처음 설치한다.
–nodeps : 의존성 관계에 있는 다른 패키지가 설치 되어 있지 않다해도 강제로 설치한다.
ex) rpm -Uvh test.rpm –nodeps
–force : 버전을 무시하고 설치한다.
ex) rpm -Uvh test.rpm –force –nodeps

-evv : 삭제하는 동안에 상세한 설명을 보여준다.
-q : 패키지 설치되어 있는지 확인
-qa : 설치되어 있는 모든 패키지 확인

* RPM 만들기
/usr/src/redhat/SOURCE/ : RPM을 만들 소스가 들어간다(ex) tar.gz 파일)
/usr/src/redhat/SPEC/ : RPM을 만들기 위한 spec 파일이 있는곳
/usr/src/redhat/BUILD/ : RPM을 만들때 컴파일 하는 디렉토리
/usr/src/redhat/SRPM/ : RPM Source 파일이 위치 하는 곳
/usr/src/redhat/RPM/ : RPM 바이너리 파일이 위치 하는 곳

> spec 파일 만들기
;spec 파일만 만들면 rpm을 만들 수 있다.

example

> spec 파일이 다 만들어지면 RPM을 만들자
rpm -ba [spec file]

10. 기본적인 source(*.src.rpm) rpm packages 요소에 대한 이해

# rpm -Uvh *.src.rpm
# cd /usr/src/배포판이름/SPEC
# rpmbuild -ba *.SPEC
# cd /usr/src/배포판이름/RPMS/i386

– RPM 패키지의 구조

[패키지 이름]-[버전]-[릴리이즈 번호].[아키텍쳐].rpm

ex) postgresql-6.3.2-5kr.i386.rpm

—————————————————————
이 코너가 고급활용인 만큼… 서론은 이쯤에서 줄이고… ㅡㅡ;;
—————————————————————

지금까지 많은 분들이 리눅스 배포판에서 제공되는 rpm을 가지고, 설치와 제거를 해보셨을 거라 생각됩니다.
오늘 이 강좌를 통해서… 이제는 간단한 패키지들을 직접 만들어서 사용할 수 있는 고급 유저로 거듭나시길 바랍니다. ^^
rpm을 만든다는 것은

① 개발자에 의해 소스RPM(SRPM)으로 1차 만들어진 파일을 받아서 RPM을 추출해 내는 방법
② 원본 소스바이너리 파일을 받아서, 현재의 리눅스 시스템에 맞도록 제작하는 방법

위의 2가지 방법을 말할 수 있습니다.

1번에서의 SRPM은… 개발자가 원본 소스바이너리를 받아서 1차적으로 RPM형식으로 만든 파일을 말하는 것으로, 이것을 이용해 사용자는 쉽고 편리하게 rpm을 만들어서 사용할 수 있습니다
그리고, 프로그램을 개발하는 개발자 또는 리눅스 프로그램을 수정하여 사용하고자하는 고급유저들에 있어서도 이 소스RPM은 유용하게 사용됩니다.
코어리눅스 2004 Workstation에는 코어리눅스에서 사용되는 프로그램에 대한 SRPM을 CD로 제공하고 있습니다.
4번,5번 CD에 이러한 소스RPM을 제공하고 있으므로,
소스RPM을 필요로 하는 사용자는 유용하게 사용할 수 있습니다.

2번의 방식은 개발자에 의해 SRPM으로 만들어지지 않은 원초적인 소스바이너리를 가지고, RPM을 만드는 방법으로, SRPM에 비해 사용자가 조금더 작업을 해줘야 하는 차이점을 가지고 있습니다. 2번째의 방식을 익히면 1번째의 방식은 자연히 아시게 되리라 생각되어, 아래에는 소스바이너리를 통해 직접 RPM을 제작하는 방법에 대해 설명을 드리겠습니다.

===============================================================
아래에서 예를 드는, GKrellm이라는 프로그램은, 시스템 정보를 실시간으로 보여주는 모니터링 툴로서, 별다른 의존성 등의 문제없이 쉽게 설치할 수 있는 프로그램으로 교육용으로 적합하다 생각되어 예로 들었습니다.

실제 프로그램 패키징 작업에서는 이외에도 많은 기술 및 방법들이 필요한 관계로, 비교적 간단한 GKrellm을 통해서 설명을 드리겠습니다.
===============================================================

(1). 소스파일 구하기

리눅스배우기에 올려져 있는 httpd-2.2.8의 소스파일을 다운로드 합니다. 오픈자료실 httpd-2.2.8받으러 가기 압축을 풀면, gkrellm-2.2.4 라는 디렉토리가 생성됩니다.
# tar xzvf gkrellm-2.2.4.tar.gz

이렇게 다운로드한 소스파일은 컴파일 방식으로 설치를 할 수도 있지만, 여기서는 RPM 제작을 설명해야 하므로, RPM 제작 방식으로 진행하도록 하겠습니다.
※ 소스컴파일 방법은 오픈자료실의 해당 게시물을 참조해 주시기 바랍니다.

(2). SPEC 파일 확인하기

보통 리눅스 관련 프로그램을 개발하게 되면, 해당 프로그램을 RPM으로 만들수 있도록 SPEC 파일을 함께 포함하고 있는 경우가 많습니다.
압축을 푼 디렉토리에 가보시면, httpd.spec 이라는 파일이 있습니다. 이 파일을 통해서 RPM을 제작할 수 있게 됩니다.

(3). 설치를 위한 파일 복사

위의 httpd.spec 파일을 아래의 경로에 복사합니다.
# cp httpd.spec /usr/src/redhat/SPECS/

다운받은 원본 파일을 아래의 경로에 복사합니다.
# cp httpd-2.2.8.tar.gz /usr/src/redhat/SPECS/

RPM을 제작하기 위해서는 제작 내용을 기술하고 있는 SPEC 파일을 /usr/src/redhat/SPECS/디렉토리에 넣어두고, 해당 프로그램의 원본파일을 /usr/src/redhat/SPECS/디렉토리에 넣어두고 작업을 해야 합니다.

(4). SPEC 파일의 내용 확인 및 수정

방금 복사한 httpd.spec을 열어서 내용을 확인하고 수정이 필요한 부분이 있으면 적절히 수정합니다.

패키징을 해본 결과, 소스파일의 경로가 적절치 않아 패키징이 진행되지 않으므로, 아래 문자을 찾아서 다음과 같이 수정해 줍니다.

Source: http://web.wt.net/~billw/gkrellm/%{name}-%{version}.tar.bz2

(수정)

Source: %{name}-%{version}.tar.gz

※ 이외에는…. 크게 수정하지 않아도 코어리눅스에서 잘 동작하는 환경이므로, 내용만 한번 둘러보시면 되겠습니다.

(5). RPM 패키징 시작

드뎌 기다리고 기다리던 패키징 시간입니다.
아래와 같이 입력하고 패키징을 시작해 봅니다.

# rpmbuild -ba -v httpd.spec

이상한 문자들이 주루룩~~ 나오면서 리눅스가 혼자서 뭔가를 만들어 냅니다.
정상적으로 종료가 되면, /usr/src/Kore/RPMS/i386/ 디렉토리에 RPM 파일이 만들어 집니다.

# cd /usr/src/Kore/RPMS/i386/
# ls
.rpm

오류: Failed build dependencies:
apr-devel is needed by httpd-2.2.8-1.i386
apr-util-devel is needed by httpd-2.2.8-1.i386
/usr/bin/apr-1-config is needed by httpd-2.2.8-1.i386
/usr/bin/apu-1-config is needed by httpd-2.2.8-1.i386

소스 컴파일 하기위해서 apr-devel, apr-util-devel, apr 3개의 RPM이 필요하다.

# yum install apr

(6). RPM 파일 설치

이제 패키징이 끝났습니다.
위 파일을 가지고, rpm 설치를 진행하면 됩니다.

# rpm -Uvh apache-2.0.5-5.i386.rpm

(7). 실행

이제 실행을 해볼까요. ^^

# apache &

화면 귀퉁이에 시스템 모니터링 프로그램이 실행된 것이 보일 겁니다.
이상과 같은 방식으로 다른 패키지들도 RPM으로 만들 수 있습니다.

◆11. system recovery를 위한 rescue 환경으로의 부팅 방법 및 사용법

– mknod : 디바이스 파일 생성(/dev/hda…)
; 문자 디바이스 파일, 블록 디바이스 파일 등을 만드는 데 사용된다.
초기값으로 만들어지는 파일 모드는 0666이다.
디바이스 파일명 인자를 쓴 후 그 파일의 특수 형태를 알리는 값을 지정해야 한다.

# mknod /dev/ttySO c 4 64

특수 형태를 지정하는 값을 다음과 같다.
b : 블록 디바이스 파일
c : 문자 디바이스 파일

-m 옵션 : 모드에 해당하는 접근 허가 속성을 지정

ex 1)
# mknod /dev/ttyS0 c 4 64

ex 2)
# mknod -m 660 test_dev c 3 2 ]# ls -al test_dev crw-rw—- 1 root root 3, 2 2007-08-29 13:11 test_dev

참조: http://www.lanana.org/docs/device-list/devices-2.6+.txt

◆12. 여러 종류의 user account 생성법

# useradd [옵션] 계정명
# usermod [옵션] 계정명
# userdel [옵션] 계정명

-c : 패스워드 파일에 새로운 사용자 설명추가
-d : 디렉토리 위치 지정
-e : 지정된 날짜에 사용자 계정을 삭제
-f : 패스워드가 만기도니 후 계정이 영구히 말소될때까지의 기간
-u : 사용자 ID에 대한 값
-s : 사용자의 로그인 쉘 지정
-n : 사용자 계정 추가 기본 모드를 지정하지 않을 때
-G : 사용자가 기본 그룹 이외의 다른 그룹에 추가하고자 할 때

ex) -c 현재 000001 라는 설명을 추가한다.
# useradd -c 000001 imsi
cat /etc/passwd | grep imsi
imsi:x:502:502:000001:/home/imsi:/bin/bash

ex) -d imsi사용자 홈 경로를 지정할 수 있다.
# useradd -d /supp1 imsi

ex) -e imsi 계정의 2008년 3월 3일에 계정 삭제
# useradd -e 2008/03/03 imsi

ex) -f

ex) -s imsi 계정의 스크립트를 Csh 쉘로 생성
# useradd -s /bin/csh imsi

ex) -g -u imsi 계정의 그룹 ID, 사용자 ID를 따로 생성 할 수 있음.
# useradd -g 509 -u

사용자 계정 삭제
# userdel 계정명
(단, 하지만 사용자 계정의 홈 디렉토리는 남아 있다.)
# userdel -r 계정명
-r 옵션을 사용하면 디렉토리 및 파일 모두가 한본에 삭제 됨.

계정 서비스를 보류한 사용자의 계정처리
/etc/passwd 의 열쇠글 필드를 * 표시로 처리 = > 로그인 불가

실계정을 발급하되 로그인은 불가능 하도록 처리
/etc/passwd 파일에서 /bin/bash 부분을 /bin/false 로 변경

그룹 관리

/etc/passwd 파일에 계정 정보 저장
형식 – 사용자계정:사용자비번:사용자UID: 사용자GID:사용자정보:사용자홈디렉토리:사용자로그인쉘
ex)test:x:501:502::/supp1/:/bin/bash

>사용자가 열쇠글을 변경시 유의할 사항
열쇠글은 숫자로만 지정해서는 안된다.
열쇠글은 사전적인 쉬운 단어로 지정해서는 안된다.
열쇠글은 6자 이상이어야 하는데 이는 /etc/login.def 파일에 명시되어 있다.
열쇠글은 이전에 사용하였던 열쇠글과 동일해서는 안된다.
열쇠글은 여러 문자와 숫자를 조합하여 사용하는 것이 가장 좋다.

새도우 열쇠글 시스템
# cat /etc/passwd

# /usr/sbin/pwconv < – 새도우 열쇠글 시스템 적용

# /usr/sbin/pwunconv < – 열쇠글 필드에 x 대신 열쇠글이 나타나도록 설정.
(단, pwunconv 상태에선 사용자 비밀번호 변경이 불가함.)

/etc/shadow
1계정명:2열쇠글:3최종변경일:4변경취소일수:5변경유옝기간:6변경경고일수:7상요불가날짜:8만료일:9예약

chage 를 이용한 계정 열쇠글 관리
-l 사용자명 : 현재 계정에 대한 정보를 보여줌
-m 최소일수 사용자명
-M 최대일수 사용자명
-W 경고일수 사용자명
-I 무효일수 사용자명
-E 만료일수 사용자명
-d 새 패스워드 변경일 사용자명

ex)
# chage -M 15 -E 2009/01/16 계정명

로그인 관리

특정 계정 로그인 허용 및 불허 정책
/etc/pam.d/login 파일의 맨 윗줄 수정(추가)
————————————————————————————————————-
auth required /lib/security/pam_listfile.so item=user sense=allow file=/etc/loginuser onerr=succeed
————————————————————————————————————-
/etc/loginuser 파일 생성 및 로그인 가능한 계정 추가
이 파일안에 로그인 가능한 계정만 추가

(단, 반대인경우 위 입력한 라인에서 sense=deny file 부분을 nologinuser로 한다음 /etc/nologinuser를 생성하여 계정추가)

혹자는 로그인 불허하는 방법으로 제일 쉬운 방법을 /etc/passwd에서 그 계정에 해당하는 쉘 종류를 /bin/bash에서 /bin/false로 변경 하는 거라고 한다.

또한 잠깐 동안 못쓰게 하려면 /etc/passwd 에서 그 계정의 두번째 컬럼부분의 x에 해당하는 부분을 *로 변경하는 법이다

PAM 에 의한 계정의 로그인 허용과 불허 방법은 콘솔, 텔넷, FTP, SSH에서 모두 적용가능.

su – 명령 사용자 제한
/etc/pam.d/su 파일 수정
auth sufficient /lib/security/pam_rootok.so
auth requried /lib/security/pam_wheel.so use_uid
이 두부분이 아마 주석처리 되어 있을껀데.. 이부분을 주석 제거한다.

/etc/group의 wheel 그룹에 su 명령 사용가능한 계정 추가
예를 들어 wheel:x:10:whereyou 이런식으로 고친다

%추가로 로그 기록을 위한 debug 옵션 추가를 한다
auth required /lib/security/pam_wheel.so debug use_uid

%verify 하는 법
#tail /var/log/messages

– 일반 사용자가 루트 권한 행사하기(sudo)
#/etc/sudoers 파일의 설정 형식
root ALL=(ALL) ALL root 사용자에 대한 모든 권한
%wheel ALL=(ALL) ALL wheel그룹에 대한 루트 권한
fedora ALL=/sbin/shutdown, /usr/sbin/adduser 일반사용자에 대한 특정 권한

– sudo 사용법
# sudo shutdown -r now
password:

X-win 에서 사용자 관리 명령어
# system-config-users

Shadow

useradd

13. user 환경 구성법
(12.설명 됨.)

14. system and user bash configuration files
(12. 설명 됨.)

◆15. quotas, quota concepts 이해 및 user, group quotas 방법

16. cron system 이해 및 cron을 사용해서 scheduled jobs를 셋팅하는 방법
– 예약 작업(at , cron, anacron)

1) At(특정 시간에 작업을 예약하는 방법으로 특정시간, 한번만 작업을 예약해 놓는 것 입니다.)
우선적으로 데몬을 먼저 실행 후 설정
# /etc/rc.d/init.d/atd start

# at 4:00 pm (오후 4시에 apache, sendmail 재실행)
at> /supp1/util/apachectl restart
at> /supp1/util/sendmail restart
at> (ctrl+d 입력)
job 1 at 2005-10-21 16:00

기타 시간 설정
# at 6pm + 2 days (2일후 오후 6시에 작업)
# at 11am Jul 21 (7월 21일 오전 11시에 작업)
# at 3pm tomorrow (내일 오후 3시에 작업)

# at 11:00 pm (오후 11시에 시스템 리부팅 예약)
at> shutdown -r now
at> (ctrl+d 입력)
job 2 at 2005-10-21 23:00

예약작업 현황 보기(atq)
# atq
2 2008-02-27 17:00 a root
1 2008-02-27 16:00 a root

예약 된 at 작업은 /var/spool/at 디렉토리에 저장되게 됩니다

# ls /var/spool/at/
-rwx—— 1 root root 1821 2월 26 23:07 a00001013237a4
-rwx—— 1 root root 1836 2월 26 23:13 a00002013237e0
drwx—— 2 daemon daemon 4096 8월 23 2005 spool

예약작업 취고(atrm)
# atrm 현황 번호
ex)
# atq
2 2008-02-27 17:00 a root
1 2008-02-27 16:00 a root
# atrm 2
1 2008-02-27 16:00 a root

2) Cron
# crontab -l (리스트)
# crontab -e (수정)
# crontab -r (삭제)
설정
#minute (0-59),
#| hour (0-23),
#| | day of the month (1-31),
#| | | month of the year (1-12),
#| | | | day of the week (0-6 with 0=Sunday).
#| | | | | commands

# 12월 30일 01:00 /supp1/util/start.sh 파일을 실행해라.
* 1 30 12 * /supp1/util/start.sh

# 매주 금요일 01:00 /supp1/util/start.sh 파일을 실행해라.
* 1 * * 5 /supp1/util/start.sh

3)Anacron(cron과 유사하지만 시스템이 계속적으로 켜져있지 않아도 작동하는 차이점이 갖습니다)

/sbin/service anacron start
/sbin/service anacron stop

◆17. 필수 커널 개념 이해 (monolithic vs. modular kernels, initial ramdisks, etc)

CORBA/==CORBA(Common Object Request Broke Architecture)에 파일을 저장한다
DIR_COLORS==컬러-ls 명령어 표시색의 설정파일
HOSTNAME==FQDN(Fulley Quallified Domain Name)형식으로 호스트명으로 쓰여있는 파일
Muttrc==메일소프트웨어 Mutt의 설정파일
TextConfig==콘솔 화면의 해상도,커서모양,폰트정보
X11==X Window System 설정파일군을 저장하는 디렉토리
adjtime==시각을 설정하는 hwclock의 파라미터 파일
aliases==메일의 앨라이어스 설정파일
aliases.db==메일의 앨라이어스 데이터베이스 파일
amd.conf,amd.net==amd 데몬의 설정 파일
anacrontab==24시간 가동하지 않는 시스템을 위한 cron
at.deny==at 명령어 이용을 금지하는 유저를 기술하는 파일
auto.master==automount 데몬의 설정 파일
auto.misc==automount데몬이 이용하는 맵 파일
bashrc==bash 기동시에 실행되는 설정 파일(~/.bashrc)의 템플릿
cdrecord.conf==cdrecord 명령어의 설정 파일
charsets/==Mutt 캐릭터세터 정의 파일을 저장하는 디렉토리
codepages/==삼바에서 이용하는 codepage 정보를 저장하는 디렉토리
conf.linuxconf==linuxconf의 모듈을 기술한 파일
conf.modules==modeprobe가 이용하는 로더블 모듈 설정 파일(테보리눅스는 modules.conf)
cron.d/==crontable 명령어의설정 파일을 저장하는 디렉토리
cron.daily/==하루에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
cron.hourly/==1시간에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
cron.monthly/==1개월에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
cron.weekly/==1주일에 1회 자동 실행시키고 싶은 스크립트를 저장하는 대렉토리
crontab==crontab명령어의 설정 파일
csh.cshrc==C 쉘 기동시에 실행되는 설정 파일(~/.cshrc)의 디렉토리
csh.login==C 쉘이 로그인시에 시랳하는 설정파일(~/.login)의 디렉토리
default/==신규유저용 디폴트 설정을 저장하는 디렉토리
dhcpc/==DHCP 클라이언트 데몬 dhcpcd가 네트웍 정보를 저장하는 디렉토리
dumpdates==dump명령어로 디스크의 백업을 한 일시와 시각등이 기록된다
enscript.cfg==텍스트 파일을 PostScript로 변환하는 enscript 의 설정 파일
esd.conf==Enlightened Sound Daemon 설정 파일
exports==nfs(Network File System)서버의 설정파일
fb.modes==프레임버퍼 디바이스의 데이타베이스파일(레드햇 리눅스만)
fdprm==플로피 디스크의 패러미터 파일
filesystems==이용할수 있는 파일 시스템의 리스트가 기술된 파일
fnrc==폰터렌더링 라이브러리 fnlib의 설정 파일
fstab==파일 시스템과 마운트 포인터를 기술하는 파일
ftpaccess==ftp서버의 설정 파일
ftpconversions==ftp서버에서 압축/아카이브 전송시의 명령어와 확장자의 설정파일
ftpgroups==ftp서버의 설정 파일
ftphosts==ftp서버에 액세스를 허가/금지하는 호스트를 설정하는 파일
ftpusers==ftp 액세스를 금지하는 유저를 설정하는 파일
gated.conf.sample==동적경로 설정 데몬 gated의 설정 파일 견본
gettydefs==getty가 이용되는 시리얼의 설정 일람
gnome/==GTK+의 국제화 대응 캐릭터 세트 정의 파일을 저장하는 디렉토리
gpm-root.conf==컷&페이스트와 마우스서버(gpm)의 디폴터핸들러의설정파일
group==유저그룹을 정의한 파일
group-==그룹파일의 백업
gshadow==암호화된 그룹 패스워드를 기술한 파일
gshadow-==gshadow의 백업
gtk/==The Gimp Toolkit(GTK+)의 국제화 대응 캐릭터세트 정의 파일을 저장하는 데렉토리
host.conf==name resolve 에 사용되는 방법.우선순위의 설정파일(libc5)
hosts==로컬에서 이름을 해결하기 위한 호스트명,IP 어드레스 정의 파일
hosts.allow==inetd 경유에서 기동된 서버의 액세스 제어 파일,접속 허용 호스트를 기록
hosts.deny==inetd 경유에서 기동ㄷ횐 서버의 액세스 제어파일,접속 불허 호스트를 기록
httpd/==웹서버 Apache의 설정파일 등을 저장하는 디렉토리
identd.conf==개인 인증에 사용되는 identd의 설정 파일
im_palette-small.pal,im_palette-tiny.pal,im_palette.pal,imrc==
화상이미지 묘사 라이브러리 imlib의 파레트 설정 파일
inetd.conf==인터넷 수퍼서버 inetd 설정 파일
info-dir==info명령어가 디폴트로 표시하는 파일
initlog.conf==init가 출력하는 로그인에 관한 설정 파일
inittab==기동시의 런 레벨과 init설정을 기술하는 파일
inputrc==bash등이 이용한느 행입력 컬러 라이브러리의 Readline의 설정 파일
ioctl.save==싱글유저 모드에서 이용하는 콘솔 디바이스 설정(init가 작성한다)
irda/==적외선 통신을 하기위한 irda-utils 패키지의 초기화 스크립트 저장 디렉토리
isapnp.gone==ISA plug&play로 인식할수 없는 리소스를 기술하는 파일
isdn/==ISDN카드 지원 설정 파일을 저장하는 디렉토리
issue==로컬에서 로그인 시 표시하는 메시지
issue.net==리모트에서 로그인 할때 표시하는 메시지
krb5.conf==케로베로스의 설정 파일
ld.so.cache==공유라이브러리를 검색할 떄 이용하는 캐시파일
ld.so.conf==공유라이브러리를 저장하는 디렉토리를 기술하는 파일
ldap.conf==LDAP(Lightweight Directory Access Protocol)모듈 nss_ldap 설정 파일
lilo.conf==lilo 설정 파일
linux-terminfo/==사용되고 있는 콘솔에 대한 데이타가 저장되어 있다
lmhosts==Samba가 NetBios명 해결에 이용하는 호스트명,IP 어드레스 정의 파일
localtime== 머신의 타임존이 쓰여져 있는 바이너리 파일
login.defs==로그인의 설정
logrotate.conf==로그 관리 유틸리티 logrotate의 설정 파일
logrotate.d/==RPM파일에서 인스톨한 데몬을 위한 logrotate설정 파일을 저장한다
ltrace.conf==라이브러리 트레이서의 설정 파일
lvs.cf==레드햇 클러스트링 서비스의 데몬 콘솔 설정 파일
lynx.cfg==텍스트 베이스 웹 브라우저lynx의 설정 파일
mail/==Send mail이 이용한 데이타베이스 파일 등을 저장한다
mail.rc==메일 명령어의 설정 파일
mailcap==metamail 설정 파일
mailcap.vga==metamail 설정 파일(멀티미디어 메일 처리)
man.config==man 명령어의 설정 파일
mc.global==파일 매니저 GNU Midnight Commander의 설정 파일
mesa.conf==OpenGL호환 3D 라이브러리 mesa의 설정 파일
mgetty+sendfax/==mgetty+sendfax 패키지의 설정 파일을 저장하는 디렉토리
midi/==MIDI플레이어의 playmidi 등이 이용한느 음색파일 저장 디렉토리
mime-magic==파일 내용에서 마임 형식을 판단하기 위한 정의 파일
mime-magic.dat==mime-magic에서 만들어진 데이타베이스 파일
mime.types==웹서버 아파치(Apache)가 이용하는 MIME 정의 파일
minicom.users==시리얼통신 프로그램 minicom의 유저 설정 파일
motd==로그인할 때 표시되는 메시지를 기술하는 파일
mtab==마운트 되어있는 파일 시스템의 일람이 쓰여져 있는 파일
mtftpd.conf==리모트 부트 데몬 pxe에서 이용하는 MTFTP서버의 설정 파일
mtools.conf==도스의 패키지를 읽고 쓰는 툴 패키지의 mtools의 설정 파일
named.boot==DNS서버 BIND4의 설정 파일
named.conf==DNS server BIND8의설정 파일
news/==net news server inn의 설정 파일을 저장한다
nmh/==MH를 베이스로 한 메일 툴 패키지 mtools의 설정 파일
nscd.conf==네임서비스 참조개시 데몬 nscd의 설정 파일
nsswitch.conf==시스템데이타베이스와 네임서비스 스위치 설정 파일
ntp/==Network Time Protocol서버 xntp3 패키지가 데이타를 저장
ntp.conf==Network Time Protocol서버 xntpd의 설정 파일
newserv.conf==mars(Netware 에뮬레이터) 설정 파일
newserv.stations==mars용 네트웨어 설정 파일을 저장한다
openldap/==OpenLDAP(Light Weight Directory Access Protocol) 설정 파일 등을 저장
pam.d/==PAM(Pluggable Authentication Modules)의 설정 파일을 저장한다
paper.config==용지 크기의 정의 파일
passwd==모든 유저의 유저명,유저id,그룹id등이 기술되어 있는 파일
passwd-==passwd의 백업
pbm2ppa.conf==portable bitmap 이미지 파일을 HP프린터로 사용하는 PPA 파일로 변환하는 툴의 설정 파일
pcmcia/==pcmcia의 설정 파일을 저장하는 디렉토리
phhttpd.conf==http 엑셀레이터 phhttpd의 설정파일
pine.conf==메일/뉴스 리더 pine의 설정 파일
pine.conf.fixed==메일/뉴스리더 pine의 설정 파일
pnm2ppa.conf==portable anymap 이미지 파일을 HP프린터로 사용하는 PPA 파일로 변환하는 툴의 설정 파일
ppp/==ppp데몬의 설정 파일을 저장하는 디렉토리
printcap==프린터의 설정 파일
profile==bash가 로그인 할떄 실행되는 설정 파일
profile.d/==로그인시 프로파일에서 불려나와 실행된 스크립트의 저장 디렉토리
protocols==프로토콜 설정 파일 (변경 불가)
pwdb.conf==pwdb의 설정 파일
pxe.conf==리모트 부트 데몬 pxe의 설정 파일
rc.d/==기동시에 데몬 등을 기동하는 스크립트를 저장하는 디렉토리
redhat-release등==디스트리뷰션의 릴리스명.issue로 전송된다.
resolv.conf==이름 해결 수단의 우선순위 등 리졸버의 설정 파일
rmt@==/sbin/rmt로의 링크,백업때 사용된다
rpc==RPC(Remote Procedure Call)서버 명과 번호의 대응이 기술된 파일
rpm/==RPM명령어 패키지에 이용하는 디렉토리
rpm2html.config==RPM 레포지터리에서 HTML 데이타베이스를 작성하는 rpm2html 설정파일
rpbfind.conf==인터넷상의 RPM 파일을 검색하는 rpm2html 설정파일
rpmlint/==RPM파일의 에러를 체크하는 rpmlint의 설정파일을 저장한다
screenrc==화면관리 프로그램,스크린의 설정파일 템플릿
security/==PAM(pluggable authentication modules)에서 이용하는 모듈을 저장
sendmail.cf==sendmail의 동작 설정 파일
sendmail.cw==sendmail에서 호스트 명을 이용하는 경우 별명을 정의 하는 파일
sendmail.mc==sendmail.cf를 만들기 위한 매크로 정의 파일,매크로 프로세서 m4로 이용
services==네트웍 서비스명으로 사용하는 포트,프로토콜의 대응을 정의 하는 파일
shadow==각 유저의 새도우 패스워드에 관한 저옵를 기술하는 파일
shadow-==shadow의 백업 파일
shells==로그인 쉘로서 설정 가능한 쉘을 기술하는 파일
skel/==도트파일의 템플릿을 저장하는 디렉토리
slip/==SLIP(Serial Line Internet Protocol)로그인을 위한 설정 파일 저장
smb.conf==삼바의 설정 파일
smbpasswd==삼바의 패스워드 파일
smbusers==리눅스 유저명과 삼바 유저명을 대응 시키는 설정 파일
smrsh/==sendmail용 제한 쉘로 이용할 수 있는 프로그램을 저장한다.
snmp/==SNMP(Simple Network Management Protocol)에이전트의 설정 파일
sound/==GNOME의 이벤트에 나누어 붙인 사운드 파일의 설정 파일을 저장한다
squid/==웹캐시프록시 Squid의 설정 파일을 저장한다
sysconfig/==기동시에 참조된 디바이스 등의 설정 파일을 저장한다
sysctl.conf==기동시에 네트웍을 설정하는 파일
syslog.conf==syslog데몬의 설정 파일
termcap==이전에 사용되어진 단말 정의 데이타베이스 화일
up2date.conf==up2date설정 파일
uucp/==UUCP(Unix To Unix Copy)의 설정파일을 저장한다
vfontcap@==Vflib에서 사용하는 트루타입 폰트의 설정 파일
vga==SVGALIB가 이용하는 트루타입 폰트의 설정 타입
wegtrc==HTTP/FTP대응 파일 다운로드 툴 wfget의 설정 파일
yp.conf==NIS의 설정 파일
ypserv.conf==NIS 서버의 옵션을 기술하는 파일
ytalkrc==ytalk 설정 파일
zlogin,zlogout,zprofile,zshenv,zshrc==zsh의 설정 파일

◆18. 커널 소스 설치 및 Linux 커널을 rebuild하기 위해 필요한 개발 툴
◆19. 소스로 부터 Linux 커널과 모듈을 구성, build, 설치하는 법. LILO/ GRUB 요소, 부팅 절차 및 구성에 대한 이해
◆20. Apache, Samba, NFS, basic sendmail, POP3/IMAP4 email, DNS, and ftp 등 network services에 대한 이해
(Tomcat , Weblogic, Oracle , PhP, MySql)

-Apache
./configure –prefix=/app1/web/apache2055-worker –enable-module=shared –enable-mods-shared –enable-proxy –enable-ssl –enable-rewrite –with-ssl=/usr/bin/ –enable-modules=ssl –enable-charset=euc_kr –with-mpm=worker –disable-cgid –disable-cgi

> with-mpm=worker :아파치의 작동방식을 멀티스레드방식의 실행을 지원하기 위한 설정한
> enable-module=so : so 모듈을 DSO 모듈로 컴파일 함(톰켓 연동)
> enable-shared=max : 모듈을 enable 시키고 httpd_core와 mod_so를 포함

* Apache Module

mod_rewrite

#cd /usr/local
#wget http://ftp.superuser.co.kr/pub/apache/httpd-2.0.55.tar.gz
#tar xvfpz httpd-2.0.55.tar.gz
#cd httpd-2.0.55/modules/mappers
#/usr/local/apache/bin/apxs -aic mod_rewrite.c

* httpasswd

# vi /apache/conf/httpd.conf
—————————————————————-

Options FollowSymLinks
# AllowOverride None
AllowOverride All

AllowOverride AuthConfig
# AllowOverride None
—————————————————————-
# vi /apache/conf/.htaccess
—————————————————————-
AuthName “Thank you for visiting!!”
AuthType Basic
AuthUserFile /supp1/sr_webdocs/drbbs/.htpasswd
# AuthUserFile http://192.168.1.3:7001/drbbs/.htpasswd
Satisfy any
Order deny,allow
Deny from all
require valid-user admin
—————————————————————-
# vi /apache/conf/.htpasswd
—————————————————————-
cloud0486:Qj2uEcStautnc
admin:Ih04w7y4LivDQ
—————————————————————-
# vi 소스경로/.htaccess
—————————————————————-
AuthUserFile /app1/web/apache2055-php/conf/.htpasswd
AuthName “INPION SYSTEM ENGINEER”
AuthType Basic

order deny,allow
deny from all
allow from 203.241.147.14 203.241.147.15 203.241.161.2
require valid-user

—————————————————————-

.htpasswd (저장될 파일이름)
생성되는 아이디 (id)
옵션 항목
-c 패스워드 파일을 새로 만들 경우 (처음에만)
-m MD5를 이용해서 비밀번호를 생성할때
-d crypt()를 이용해서 비밀번호 생성
-p 평범한게 암호화하지않고 만드는방법

– Tomcat

Tomcat-Connectors 설치
# tar -xvzf tomcat-connectors-4.1.18-src.tar.gz
# cd jakarta-tomcat-connectors-4.1.18-src/jk/native
# ./buildconf.sh
# ./configure –with-apxs=/usr/local/apache/bin/apxs
# make
# make install
# ll /usr/local/apache/modules
합계 376
-rw-r–r– 1 root root 8217 10월 31 00:19 httpd.exp
-rwxr-xr-x 1 root root 368539 10월 31 00:57 mod_jk.so

mod_jk.so 이 생깁니다.

– Apache php
apache
./configure -prefix=/usr/local/httpd -enable-mods-shared=most -enable-modules=so -with-mpm=worker -enable-module=vhost_alias
php
./configure -with-apxs2=/usr/local/httpd/bin/apxs -with-config-file-path=/usr/local/httpd/conf -with-exec-dir=/usr/local/httpd/bin -enable-track-vars -enable-trans-sid

-Sendmail
pop3s : SSL을 지원하는 pop3클라이언트를 사용하여 메일에 접근할수 있게 하는 서비스이다.
pppoe : adsl서비스에 연결시켜 주는 데몬
-Apache

-Samba:삼바서버에서 사용자를 등록하기 위해서는 smbpasswd라는 삼바명령어를 사용합니다. 그리고 생성한 삼바사용자의 삼바패스워드 또한 smbpasswd라는 명령어를 이용합니다. 구버전의 삼바서버에서는 삼바사용자 생성을 smbadduser명령어로 하고 생성한 삼밧용자의 패스워드생성과 변경은 smbpasswd로 작업합니다.

* 삼바를 사용하기 위한 5가지 패키지
삼바서버패키지 : samba-3.0.8-0.pre1.3
삼바클라인트패키지 : samba-client.3.0.8-0.pre1.3
삼바서버와 클라이언트에서 모두 사용하는 파일들 패키지 : samba-common-3.0.8-0.pre1.3
삼바서버 웹관리 패키지 : samba-swat-3.0.8-0.pre1.3
삼바서버 설정툴 패키지 : system-config-samba-1.2.21-1

*삼바의 주요 패키지
/etc/logrotate.d/samba : 삼바로그를 관리하기 위한 삼바로그 로테이트 스크립트 파일
/etc/rc.d/init.d/smb : 삼바데몬(nmbd, smbd)을 실행(종료, 재시작)하기 위한 스크립트 파일
/etc/sysconfig/samba : 삼바 제어판 설정파일
/usr/bin/smbstatus : 삼바서버에 로그인한 정보를 확인하기 위한 유틸리티
/usr/sbin/nmbd : 삼바 NetBIOS 데몬
/usr/sbin/smbd : 윈도우서버와 파일 및 프린트 공유를 위한 삼바 주데몬
/usr/bin/smbclient : 삼바 클라이언트 유틸리티로서 삼바서버로 접속이 가능하도록 제공함.
/usr/bin/smbmount : 삼바 원격마운트 유틸리티
/usr/bin/smbumount : 삼바 원격마운트 해제 유틸리티
/etc/samba : 삼바의 주된 디렉토리
/etc/samba/lmhosts : 삼바서버의 NetBIOS 호스트파일(삼바서버에서 사용하는 호스트정보파일)
/etc/samba/smb.conf : 삼버서버의 주 설정파일
/usr/bin/smbpasswd : 삼바사용자 생성, 삭제 및 삼바사용자 패스워드 설정, 변경 유틸리티
/usr/bin/testparm : 삼바서버 설정파일(smb.conf)점검 유틸리티
/etc/xinetd.d/swat : 삼바서버의 웹관리를 위한 xinetd 환경의 삼바설정파일
/usr/sbin/swat : 삼바서버 웹관리툴
/usr/bin/system-config-samba : X환경에서의 삼바설정 유틸리티
/var/log/samba : 삼바로그 저장되는 디렉토리
/etc/samba/smbusers : 리눅스ID와 삼바ID가 다를 경우에 이를 매칭하기 위한 매칭테이블파일

* 삼바 실행 & 확인
# /etc/samba/smb start
# ps -ef | grep mbd

* 삼바 홈경로 : /etc/samba/smb.conf

* 삼바 원격 연결
(1). 개인PC의 탐색기에서 원격삼바디스크 사용하기
– 윈도우의 내컴퓨터를 오른쪽마우스클릭 후 ‘네트워크 드라이브 연결’ 메뉴을 선택
– 드라이브 : 사용하고 있지 않은 드라이브를 선택
– 폴더 : \\삼바서버IP주소\삼바서버ID
– 마침 후 입력창에 팝업되면 아이드와 패스워드를 입력
– 컴퓨터 부팅 후 한번의 계정 입력으로 로컬드라이브처럼 사용할 수 있다.

(2). 웹브라우즈에서 웹폴더 형식으로 사용하기
– 웹브라우즈창에 ‘\\삼바서버IP주소\삼바서버ID’ 입력
– 사용자창에 암호 입력

(3). 리눅스에서 윈도우 공유 자원 접근
– 사용형식 : smbclient service [options]
– # smbclient //Mycomputer/share
– smb: \> 이것이 띄면 사용가능

# useradd inpion
# passwd inpion

이제 inpion이라는 삼바사용자를 생성하기 위해서는 smbpasswd라는 명령어에 -a옵션을 사용하여 inpion이라는 삼바사용자를 생성하였습니다.
# /etc/samba/

– 삼바명령어
# smbstatus : 삼바서버 상태
# smbpasswd -d inpion : 사용중지
# smbpasswd -e inpion : 사용가능
# smbpasswd -x inpion : 사용자삭제
# smbpasswd -a inpion : 사용자생성

– NFS(Network Filesystem)

mount -t nfs 아이피:/상대경로 /경로 : 원격서버 파일 시스템 마운트하여 사용하기(NFS 마운트 하는 방법)

ex)
A: 100.5.77.113
B: 100.5.77.150

B# portmap
B# service nfs stop
Shutting down NFS mountd: [ OK ]
Shutting down NFS daemon: [ OK ]
Shutting down NFS quotas: [ OK ]
Shutting down NFS services: [ OK ]
B# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
B# mkdir /nfsb
B# vi /etc/hosts
100.5.77.150 design_backup
B# vi /etc/exports
/nfsb design_backup(rw,no_root_squash)
B# 수정후 exportfs -ra 명령을 실행하여 설정 내용을 갱신하도록 한다.
A# vi /etc/hosts
100.5.77.113 monitor
A# mkdir -p /mnt/nfsa
A# mount -t nfs monitor:/nfsb /mnt/nfsa
A# mount
monitor:/nfsb on /mnt/nfsa type nfs (rw,addr=100.5.77.113)

portmap : RPC(NFS, NIS, mcsev등) 연결을 관리하기 위한 포트 매핑 데몬으로 RPC를 사용하는 프로그램을 실행하기 위해서는 반드시 선택하여야 하는 데몬.
(단, PORTMAP은 인증 방식이 없기 때문에 보안상 취약하다고 한다)

– FTP(VSFTPS)

# tar xvfz vsftpd-2.0.1.tar.gz
# cd vsftpd-2.0.1
# make
# grep “nobody” /etc/passwd : VSFTP를 운영하기 위해서는 nobody가 필요합니다. nobody가 존재할 경우는 생성하지 않아도 됩니다.
# useradd -M nobody
# mkdir -p /usr/share/empty : VSFTP는 empty 라는 디렉토리를 필요로 합니다.
# mkdir /var/ftp
# chmod root.root /var/ftp
# usradd -d /var/ftp ftp
# mkdir -p /usr/local/sbin
# mkdir -p /usr/local/man/man8
# mkdir -p /usr/local/man/man5
:make install 을 해 줌으로서 생성된 vsftpd 파일이 /usr/local/sbin 에 복사가 되고 vsftpd의 man 페이지가 /usr/local/man/man5, /usr/local/man/man8 로 복사가 되고 inet 모드로 운영할 때 사용할 vsftpd 파일도 /etc/xinetd.d 디렉토리에 복사됩니다.
# make install
# cp vsftpd.conf /etc/
# vi /etc/vsftpd.conf
시스템의 local 사용자들의 접속을 허가 하기 위해 복사된 /etc/vsftpd.conf 를 열고 local_enable=YES 부분과 write_enable=YES, local_umask=022 부분의 주석을 제거합니다.
# cp RedHat/vsftpd.pam /etc/pam.d/ftp
우선 install 할때 복사되었던 /etc/vsftpd/vsftp.conf 파일을 열어 disable = no 로 설정되어 있나 확인합니다.
혹시 disable = yes 로 되어 있다면 no 로 변경해 줍니다.
# /etc/init.d/vsftpd start
# ftp localhost : 테스트 확인

# yum install vsftpd
# /etc/init.d/vsftpd start

◆21. 기본적인 troubleshooting을 할 수 있도록 그런 서비스의 function, configuration, logging에 대한 충분한 이해 필요
Function

configuration

◆22. 위의 서비스를 위한 access 제한 방법
◆23. Red Hat Linux에서 지원되는 다른 network services : squid, innd NNTP server, xntpd, etc.
◆24. 일반적인 X 이해 및 특히 XFree86 X server에 대한 이해. (configuration file 및 그 파일을 수정하는데 사용되는 툴 포함)
◆25. Red Hat Linux 상에서 가능한 윈도우 매니저와 데스크탑 환경 선택 및 방법 이해
◆26. remote login과 remote client를 포함한 remote로 X 사용하기
◆27. xinetd 역할 이해 및 tcp_wrappers 보안 방법의 실행법 이해
◆28. 기본적인 NIS 개념 이해 및 NIS와 관련된 components.
◆29. PAM subsystem의 목적 이해, 기본적인 PAM 구성 변경법
◆30. router로서의 Red Hat Linux 사용과 관련된 configuration issues : routing options, IP forwarding, and kernel configuration

Ethernet을 여러개 설정하면 해당 Network에 대해 접근하는 것은 문제되지 않지만, default route 가 없어 다른 Network은 접근하지 못하는 일이 발생한다.
이는 IP Route 명령을 이용해 default가 어디로 설정되어 있는지 확ㅇ니하면 쉽게 알 수 있다. 예를 들어 private network이 default로 잡혀 있다거나
이런 경우 default router를 변경해 주어야 하는데 명령은 다음과 같다.
# route del default IP
# route add default 100.5.77.1 dev eth0
위 명령은 default Gateway를 삭제하고 100.5.77.1인 Gateway를 Device Eth0를 통해 Access 하도록 설정한다.
이 명령은 Reboot 전 까지만 유효하다.
Reboot 후에도 유효하도록 하려면 다른 설정이 필요하다.

# vi /etc/sysconfig/network
————————————–
GATEWAY=”100.5.77.1″
GATEWAYDEV=”eth0″
FORWARDING_IPV4=”yes”
————————————–
완료 후 service network restart

31. 기본적인 firewall 정책을 실행하기 위해 iptables 사용하기, Red Hat Linux에서의 User Private Group scheme 이해

# iptables -A INPUT -p TCP -s xxx.xxx.xxx.0/24 –destination-port 3306 -j ACCEPT

이제 xxx.xxx.xxx.0 ~ 255 까지의 IP 대에서 접근이 가능합니다.
-A : 새로운 rule 을 추가하는 옵션 (INPUT, FORWARD, OUTPUT)
-p : 사용할 프로토콜을 지정 (TCP, UDP)
-s : 사용할 ip 주소를 지정
–destination-port : 사용할 포트를 지정
-j : 패킷처리방법을 지정(ACCEPT, DROP, REJECT)

추가했던 chain rule 을 제거하는 방법
# iptables -D INPUT -p TCP -s xxx.xxx.xxx.0/24 –destination-port 3306 -j ACCEPT

– iptables 일부 포트만 열어주는 방법

IPTABLES 현재 상황 보기
# iptables -L

모든것을 DROP 시키는 방법
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP

허용하는 설정
# iptables -A INPUT -p TCP –destination-port 23 -j ACCEPT
# iptables -A OUTPUT -p TCP –source-port 23 -j ACCEPT

허용하는 설정
# iptables -A INPUT -p TCP –destination-port 21 -j ACCEPT
# iptables -A OUTPUT -p TCP –source-port 21 -j ACCEPT

허용하는 설정
# iptables -A INPUT -p ICMP –icmp-type 8 -j ACCEPT
# iptables -A OUTPUT -p ICMP -m state –state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -p ICMP –icmp-type 8 -j ACCEPT
# iptables -A INPUT -p ICMP -m state –state ESTABLISHED,RELATED -j ACCEPT

허용하는 설정
# iptables -A OUTPUT -p UDP –destination-port 53 -j ACCEPT
# iptables -A INPUT -p UDP –source-port 53 -j ACCEPT
# iptables -A OUTPUT -p TCP –destination-port 53 -j ACCEPT
# iptables -A INPUT -p TCP –source-port 53 -m state –state ESTABLISHED,RELATED -j ACCEPT

허용하는 설정
# iptables -A INPUT -p TCP –destination-port 80 -j ACCEPT
# iptables -A OUTPUT -p TCP –source-port 80 -j ACCEPT

기타 설명
iptables는 상당히 자세한 메뉴얼 페이지(man iptables)를 가지고 있다. ipchains 에 익숙하다면 <@@ref>Appendix-Aipchains와 iptables의 다른점을 보아라. 이 둘은 매우 비슷하다.
iptables로 할수 있는 일에는 몇가지 다른것이 있다. 첫번째 작동은 전체 체인을 조절한다. 처음 시작은 세개의 미리 만들어진 체인으로 시작하는 데 이것은 제거될 수 없다.

새로운 체인 만들기 (-N).
비어있는 체인을 제거하기 (-X).
미리 만들어진 체인의 정책을 바꾸기 (-P)
어떤 체인의 규칙들을 나열하기 (-L)
체인으로부터 규칙들을 지우기 (-F)
체인내의 모든 규칙들의 패킷과 바이트의 카운드를 0 으로 만들기 (-Z)
체인 내부의 규칙을 조작하는 몇가지 방법이 있다.

체인에 새로운 규칙을 추가하기 (-A)
체인의 어떤 지점에 규칙을 삽입하기 (-I)
체인의 어떤 지점의 규칙을 교환하기 (-R)
체인의 어떤 지점의 규칙을 제거하기 (-D)
체인에서 일치하는 첫번째 규칙을 제거하기 (-D)

URL : http://kldp.org/Translations/html/Packet_Filtering-KLDP/Packet_Filtering-KLDP.html#toc7

기타

1 – VIM

“”” ========================================================
“”” 기본적인 설정들
“”” ========================================================
set nocompatible ” Vim 디폴트 기능들을 사용함
set backspace=2 ” 삽입 모드에서 백스페이스를 계속 허용
set autoindent ” 자동 들여쓰기
set cindent ” C 언어 자동 들여쓰기
set smartindent ” 역시 자동 들여쓰기
set textwidth=120 ” 120번째 칸을 넘어가면 자동으로 줄 바꿈
“set nowrapscan ” 찾기에서 파일의 맨 끝에 이르면 계속하여 찾지 않음
“set nobackup ” 백업파일을 만들지 않음
set novisualbell ” 비주얼벨 기능을 사용하지 않음
set nojoinspaces ” J 명령어로 줄을 붙일 때 마침표 뒤에 한칸만 띔
set ruler ” 상태표시줄에 커서 위치를 보여줌
set tabstop=4 ” 간격
set shiftwidth=4 ” 자동 들여쓰기 간격
“set keywordprg=edic ” K를 눌렀을 때 실행할 명령어
set showcmd ” (부분적인) 명령어를 상태라인에 보여줌
set showmatch ” 매치되는 괄호의 반대쪽을 보여줌
” set ignorecase ” 찾기에서 대/소문자를 구별하지 않음
” set incsearch ” 점진적으로 찾기
set autowrite ” :next 나 :make 같은 명령를 입력하면 자동으로 저장
set title ” 타이틀바에 현재 편집중인 파일을 표시

set sta
set foldmethod=marker
set encoding=euc-kr
“set encoding=utf-8
set fileencodings=utf-8,euc-kr
“set fileencodings=euc-kr

if has(“syntax”)
syntax enable
endif

2 – AWK, GREP, XARGS, CVS, FIND, rsync, DUMP, Quota

베드섹터 검사
# badblocks -v -o badblock.txt /경로
– badblock.txt 기록 파일 남김.

아파치 응답속도 측정하기
# /usr/local/apache2059/bin/ab -n 1 http://www.yahoo.co.kr
– 사용한 옵션 -n은 측정을 위한 웹페이지 요청수를 의미합니다
# /usr/local/apache2059/bin/ab -c 30 http://www.yahoo.co.kr
– 테스트시에 -c 30 : “concurrency Level 30”이라는 것을 보실 수 있을 것입니다.

3 –

4 – RSH Key 복사 후 자동 접속 하기
——————————————————————————————-
#!/bin/sh
ssh-keygen -d

echo -n “IP : ”
read remoteip

scp -p /home/w3sli/.ssh/id_dsa.pub wlogic81@$remoteip:~/.ssh/authorized_keys2

#egrep -h “IPADDR” /etc/sysconfig/network-scripts/ifcfg-eth0 | awk -F= ‘{print $2}’ > ip
——————————————————————————————-

5 – 시스템 백업과 응급 복구

백업 종류
완전 백업(Full Backup)
증분 백업(Incremental Backup) – 부분 백업
차등 백업(Differential Backup) – 전체 백업후의 모든 것을 백업하는 것

tar 증분 백업(–listed-invremental (-g)옵션)
# mk

6 – 시스템 튜닝

sysctl 은 Kernel Parameter 값들을 조절하기 위한 Utility 이다
sysctl 이 조절할 수 있는 값들은 /proc/sys/* 아래에 있는 list들이다
sysctl 을 이용하여 값을 변경할 경우에 시스템이 crash 되어질 위험요소가 많이 있다.

/etc/sysctl.conf 파일 설정
커널차원에서 보안 및 취적화 관련 설정

 

출처 : http://knamhun.blogspot.kr/2008/03/linux-rhce-study.html

 

#!/usr/bin/perl
$IP=”000.000.000.000″; // 이곳엔 사용하고자 하는 아이피를 넣어주세요
$HttpdConfFile = “/etc/httpd/conf/virtualhost.conf”;
$SendmailCW = “/etc/mail/local-host-names”;
$virtual = “/etc/mail/virtusertable”;

print “도메인을 입력해주세요.
“;
print “예) abc.co.kr.

“;
$t1 = <STDIN>;
print “FTP ID를 입력해주세요

“;
$t2 = <STDIN>;
chop $t1;
chop $t2;
if(finger $t2 2>/dev/null){
printf(“이미 존재하는 계정.

“);
exit
}
if($t2 eq “”||$t1 eq “”){
printf(“입력값이 올바르지 않습니다.

“);
exit
}

system(“/usr/sbin/adduser $t2 -d /home/$t1”);
system(“chmod 711 /home/$t1”);
print “Setup Complete!

“;
open (HANDLE,”>>$HttpdConfFile”);
print HANDLE ”
<VirtualHost $IP>
ServerAdmin $t2@$t1
DocumentRoot /home/$t1/public_html
Alias /cgi-bin/ /home/$t1/cgi-bin/
ServerName www.$t1
ServerAlias $t1
TransferLog /log/httpd/$t1-access_log
</VirtualHost>
“;
close (HANDLE);
open (HANDLE,”>>$virtual”);
print HANDLE “webmaster@$t1 $t2
“;
close (HANDLE);
open (HANDLE,”>>$SendmailCW”);
print HANDLE “$t1
“;
close (HANDLE);
system(“cp -f $virtual $virtual.bak”);
system(“/usr/sbin/makemap hash $virtual < $virtual”);
print “FTP 비밀번호를 입력해 주세요.
: “;
system(“passwd $t2”);
system(“service httpd restart”);
print “webmaster Mail Setup Complete!

“;
print “Your E-mail Address : webmaster@$t1

 

얼마 전 네이버 실시간 검색어에 ‘새폴더를 계속 만들면’ 를 보다가 …

 

전부터 궁금 했던 의문. 하나의 폴더당 혹은 하나의 서버에 대체 얼마나 많은 파일들을 가지고 있을 수 있지?

 

알아보자 리눅스의 최대 파일 사이즈 및 최대 파일 시스템 크기

– 블록 사이즈 보기

Filesystem block Size 1kB (1024) 2kB (2048) 4kB (4096) 8kB (8192)
File Size Limit 16GB 256GB 2048GB 2048GB
Filesystem size Limit 2047GB 8192GB 16384GB 32768GB

Iptables에는 다양한 모듈이 존재하는데 그 중 DDoS 공격에 효과적으로 사용 가능한 모듈들 중  hashashlimit 과 connlimit에 대한 설명입니다.

대략적인 설명이며 나중에 추가 포스팅 진행해 보고자 한다.

 

  1. 1.     Hashlimit module

–       접속하는 모든 패킷의 Source IP를 hash Code로 기억하여 리스트 생성 =>

–       접속자 IP 매칭하여 접속률 제한

  1. 2.     Connlimit module

–       Connection에 대한 제한을 IP 혹은 IP 대역별로 제한할 수 있는 기능 탑재.

 

외부 => 내부

Hashlimit .

타운 내 비즈스프링과 같이 카운터가 많다거나 특정 아이피와 세션이 많아 범위 설정 어려움. 특정 source IP로 지정하지만, 클라우드 타운의 경우 VM의 사설 아이피가 소스 IP로 되어지는 경우가 있어 적정 limit count 수치를 유추하기 어려움.

-A http_filter -m recent –update –seconds 60 –name TOO_MANY_REQUESTS -j DROP

-A http_filter -m hashlimit –hashlimit 20/s –hashlimit-burst 40 –hashlimit-mode srcip –hashlimit-name HTTP_REQ_LIMIT -j ACCEPT

-A http_filter -m recent –set –name TOO_MANY_REQUESTS -j DROP

 

 

 

 

Connlimit

–       동시 접속 개수 제한이 가능 하지만, hashlimit의 경우와 같이 다양한 서비스 형태로 서비스가 이루어지기 떄문에 NAT iptables rule에 적용하기엔 적용 범위가 다소 넓어질 것으로 생각 됩니다.  Tapacross의 경우는 평일 평균 6000개의 세션 존재

–       NAT => LB 세션 10000개 이상

아이피당 최대 n개의 동시 연결 개수 허용. 포트 지정 가능

iptables -I FORWARD -p tcp –syn –dport 80 -m connlimit –connlimit-above 5 -j DROP

 

 

내부 => 외부 트래픽 발생 (취약점으로 인한 악성 프로세스 구동)

–       내부 트래픽을 NAT에서 감지 하기 어려운 부분들이 존재

–       Linux VM 다운로드와 업로드 속도를 제한

n  Tc 명령 사용해 각 device 별 속도 제한 설정

http://www.topwebhosts.org/tools/traffic-control.php

첫번째 참고
tomcat 튜닝 – outofmemory
http://www.javastudy.co.kr/javastudy/new_bbs/qna_view.jsp?bbs_name=lecbasicbbs&theid=364&pageNum=1

이것도 참고.
http://kr.sun.com/developers/tech_docs/wireless_web06/wireless02.html

* Sun Microsystyems의 자바 HotSpot VM은 힙을 세 개의 영역으로 나누고 있다.
힙의 세 영역은 다음과 같다:
1) Permanent space: JVM 클래스와 메소드 개체를 위해 쓰인다.
2) Old object space: 만들어진지 좀 된 개체들을 위해 쓰인다.
3) New(young) object space: 새로 생성된 개체들을 위해 쓰인다.

* Heap layout 할당에 영향을 주는 스위치들
명령행 스위치 설명
————-|——-
-Xms=[n]  최소 heap size
-Xmx=[n]  최대 heap size
-XX:PermSize=[n]  최소 perm size
-XX:MaxPermSize=[n]  최대 perm size
-XX:NewSize=[n]  최소 new size
-XX:MaxNewSize=[n]  최대 new size
-XX:SurvivorRatio=[n]  New/survivor 영역 비율
-XX:newratio=[n]  Old/new 영역 비율. HotSpot 클라이언트 VM은 8, HotSpot 서버 VM은 2.
-XX:TargetSurvivorRatio=[n]  GC동안 비울 생존자 수용 가능량 퍼센티지 (capacity percentage.) 초기값은 50%

* New Generation 메모리 할당 공식
Eden = NewSize – ((NewSize/(SurvivorRatio + 2)) * 2)
From space = (NewSize – Eden)/2
To space = (NewSize – Eden)/2
* Old Generation 메모리 할당 공식
Old = Xmx – MaxNewSize

* GC한 상태의 Heap메모리 정보출력
jdk1.4에서 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC

* 정적페이지가 많을 때
-Xms418m -Xmx418m
-XX:PermSize=1024m
-XX:MaxPermSize=1024m
-XX:NewSize=290m
-XX:MaxNewSize=290m
-XX:SurvivorRatio=3

* 동적인 페이지가 많을 때
-Xms1024m -Xmx1024m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:NewSize=800m
-XX:MaxNewSize=800m
-XX:SurvivorRatio=4

-Xms384m -Xmx384m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=3

출처 : http://gamadeus.tistory.com/145?srchid=BR1http%3A%2F%2Fgamadeus.tistory.com%2F145

두번째 참고
 이것은 동시접속 성능 개선을 위한 톰캣 튜닝 방법

è Tomcat설정 변경 : Server.xml

 

maxThreads=”1024″ minSpareThreads=”126″ maxSpareThreads=”512″

enableLookups=”false” redirectPort=”8888″ acceptCount=”100″

connectionTimeout=”5000″ disableUploadTimeout=”true” />

 

 

è WEB-INF\classes\SqlMapConfig.xml

 

lazyLoadingEnabled=”true” maxRequests=”2048″ maxSessions=”512″

maxTransactions=”1024″ useStatementNamespaces=”false” />

 

 

è JVM Heap Memory 설정 : Startup.bat

set JAVA_OPTS= -Xms512m -Xmx1024m -MaxPermSize=128m

 

 

è AdmPoolFactory.java

GenericObjectPool.Config getDefaultConfig(){

GenericObjectPool.Config config=new GenericObjectPool.Config();

config.maxIdle=32;

config.minIdle=8;

config.maxActive=128;

config.testOnBorrow=true;

return config;

}

  출처 : http://lkhstory.blogspot.com/2010/08/tomcat.html

세번째 위에것들 참고하여 본인이 작업한거.
(
작업결과 속도개선에는 위 방법이 별 효과가 없는 듯)

참고 : http://www.webpagetest.org (웹 페이지 속도테스트 사이트)

user 프로파일을 다음과 같이 변경 하였음.
이건 머 catalina.sh에 해도 되고. startup.sh에 해도 되고 본인이 하고 싶은곳에 환경설정 하면 되는 것임.
export JAVA_OPTS=”-Xms1024m -Xmx1024m -XX:MaxPermSize=128m”
뒤에 MaxPermSize 는 앞에 -XX:  이렇게 붙여줘야 됨.

본인은 apache mod_jk를 이용하여 AJP 커넥션을 사용함
– 톰캣 설정에서는 다음과 같이 minSpareThreads, maxSpareThreads, acceptCount 추가 하였음. maxThreads 는변경
<Connector port=”8110″
enableLookups=”false”
redirectPort=”8513″
debug=”0″
protocol=”AJP/1.3″
URIEncoding=”UTF-8″
maxThreads=”512″
minSpareThreads=”128″
maxSpareThreads=”256″
acceptCount=”100″
connectionTimeout=”600000″
                                disableUploadTimeout=”true” />

tomcat 관련 설정 내용 참고 : http://tomcat.apache.org/tomcat-4.1-doc/config/coyote.html

– 참고로 아파치의 workers.properties 설정 부분(이쪽은 머 기존 설정에서 건드린게 없습니다.)
worker.nipa_worker1.type=ajp13
worker.nipa_worker1.host=210.10.10.56
worker.nipa_worker1.port=8110
worker.nipa_worker1.lbfactor=1
worker.nipa_worker1.connect_timeout=5000
worker.nipa_worker1.prepost_timeout=5000
worker.nipa_worker1.socket_keepalive=True
worker.nipa_worker1.socket_timeout=10
worker.nipa_worker1.connection_pool_timeout=600

apache mod_jk 관련 설정 내용 참고 : http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html

본인의 설정이 전부 맞다고 생각하시면 안되고 저는 이렇게 했다는 것입니다.
참고만 하세요.
아직도 저는 고생중이랍니다. 앞으로도 쭈욱~~ 완벽하게 세팅하는 그날까지.
혹여나 이눔의 톰캣때문에 고생하시는 분들이 있으실까봐 부족하나마 남겨봅니다.

요래저래 찾는중에 위에 두 블로거님께 감사드립니다.

 

출처 : http://deve.tistory.com/category/apache-tomcat

SSD IMPACT 2012 .. 처음 가본 SSD 관련 세미나..

 

빅데이터 시대에 맞추어 HDD => SSD 넘어가야 한다라는 점을 중점을 두고 있으며,

SSD의 가격이 점차 떨어지고, 점차 SSD의 활용범위가 높아질 것이다 라는 것에 대해서는 나 또한 같은 생각이다.

현재의 하드웨어 성능들은 어느정도  한계에 부딪혀 있는게 사실인걸로 보인다.

CPU의 속도를 따라오지 못해 Core를 늘리는 형태로 계속 발전 되어가고 있으며, HDD 디스크 또한

 

헌데, 무언가 세미나 내내 지루했다.

왜 일까? 일단 내 관심분야와는 달랐으며, 늘 그렇듯 이런 세미나는 자기들 상품 소개하기 급급했다.

내가 필요로 하는.. 우리 회사에서 도입하려는 상품들 제품들하고는 전혀 거리가 멀기 때문에 귀에 들어오지 않았고

서로 경쟁업체를 디스 하는 등의 유치한 모습들도 많이 보였으니 말이다.

 

우리나라 기업이 해외 글로벌 기업보다 더 좋은 제품을 출시하고 양산해서 좋은 실적들을 내는 것은 너무나도 반가운 일인 것 같다. 조금 더 분발해서 하드웨어 시장에서도 좋은 모습 보여주길 바래본다.

 

 

1. 권한부여(GRANT)
관리자의 권한일 경우
mysql> grant all
-> on *
-> to 유저명 identified by ‘패스워드’
-> with grant option;

권한이 없는 일반 사용자의 경우
mysql> grant usage
-> on DB명.*
-> to 유저명 identified by ‘패스워드’
-> with grant option;

필요 권한만 설정할 경우
mysql> grant select, insert, update, delete, index, alter, create, drop(기타 필요권한 나열)
-> on DB명.*
-> to 유저명 identified by ‘패스워드’
-> with grant option;

2. 권한 취소(REVOKE)
권한들을 취소할 경우
mysql> revoke all privileges, grant
-> from 유저명;

권한 일부 취소를 원할 경우
mysql> revoke alter, create, drop(기타 취소권한 나열)
-> on DB명.*
-> from 유저명;

접근 거부
mysql> revoke all
-> on DB명.*
-> from 유저명;

3. 유저 삭제
mysql> use mysql; (DB선택을 미리해야 함)
mysql> delete from user where User=’유저명’;
mysql> flush privileges;

 

# 원격지에서 root로 접속하는 경우
grant all privileges on *.* to root identified by ‘암호’ with grant option;


# ‘사용자’가 ‘암호’으로 모든 컴퓨터에서 모든 디비와 테이블에 접속하도록 허용
grant all privileges on *.* to 사용자 identified by ‘암호’;
# ‘사용자’가 ‘암호’으로  localhost 에서 db1 디비의 table1에 접속하도록 허용
grant all privileges on root.db1 to 사용자@’localhost’ identified by ‘암호’;
# ‘사용자’가 ‘암호’으로 111.222.333.444 에서 db1 디비의 모든 테이블에 접속하도록 허용
grant all privileges on root.* to 사용자@’111.222.333.444′ identified by ‘암호’;
# ‘사용자’가 ‘암호’으로 111.222.333.0/24 에서 모든 디비와 테이블에 접속하도록 허용
grant all privileges on *.* to 사용자 @’111.222.333.%’ identified by ‘암호’;
# ‘사용자’가 ‘암호’ 권한만을 가지도록 하고 싶다면 아래와 같이

mysql> grant create, drop, alter, select, insert, delete, update on 테이타베이스명.* to 사용자@localhost identified by ‘암호’;

<권한 제거>
revoke all on 디비명.테이블명 from 사용자;

<권한 적용>
# 모든 명령 후에 항상 아래 명령을 실행해야 실제로 적용된다.
flush privileges;

my.cnf  파일의 [mysqld] 항목에 아래 내용을 입력 후, mysql 재시작을 해줍니다.

> 슬로우 쿼리로 분류할 시간, 로그파일 위치

 

MySQL 5.5 이상 버전

slow_query_log                  = 1    # 0 비활성화, 1은 활성화
slow_query_log_file             = mysql-slow.log
long_query_time                 = 3     # 3초 이상 지연 쿼리 발생시 로깅

 

MySQL 5.1.34 이상 버전

slow_query_log = 10

slow_query_log_file = /usr/local/mysql/data/mysql-slow-queries.log

 

MySQL 4.x 이상 버전

long_query_time = 10

log-slow-queries = /usr/local/mysql/data/mysql-slow-queries.log

 

MySQL 3.x 이하 버전

set-variable = long_query_time = 10
log-slow-queries = /usr/local/mysql/data/mysql-slow-queries.log

 

 

참고 URL : http://system.neulwon.com/xe/?mid=linux_mysql&page=4&document_srl=262