리눅스 디렉토리구조

먼저 리눅스의 디렉토리 구조를 살펴보도록 하자.

리눅스의 디렉토리 구조는 전체적으로 역tree구조를 하고 하고 있으며, 명령어의 성격과 내용 및 사용권한등에 따라 구분되어 있다.

또한 리눅스의 디렉토리 구조는 FSSTND(Linux File System Standard)라는 파일시스템의 표준에 따르며 거의 모든 리눅스에서는 이 표준을 따라서 디렉토리를 구성하고 있다.


리눅스의 디렉토리 구조를 알아보는 가장 간단한 방법은 root디렉토리에서 아래와 같이 "ls -l"을 해보는 것이다.



[root@ciss9 /]# ls -l

total 136

drwxr-xr-x 2 root root 4096 Aug 12 05:44 bin

drwxr-xr-x 2 root root 4096 Aug 12 05:48 boot

drwxr-xr-x 6 root root 36864 Oct 10 04:02 dev

drwxr-xr-x 37 root root 4096 Oct 11 14:28 etc

drwxr-xr-x 14 root root 4096 Oct 1 11:41 home

drwxr-xr-x 4 root root 4096 Aug 12 05:42 lib

drwxr-xr-x 4 root root 4096 Aug 12 05:36 mnt

dr-xr-xr-x 89 root root 0 Sep 6 23:49 proc

drwxr-x--- 17 root root 4096 Oct 12 07:01 root

drwxr-xr-x 3 root root 4096 Aug 12 05:44 sbin

drwxrwxrwt 7 root root 4096 Oct 12 04:02 tmp

drwxr-xr-x 22 root root 4096 Aug 12 05:41 usr

drwxr-xr-x 20 root root 4096 Aug 12 05:44 var

[root@ciss9 /]





이들 디렉토리에 대해서 간단히 설명하면 다음과 같다.

/ : 최상의 디렉토리인 루트디렉토리.

/bin : 중요하고 꼭 필요한 명령어가 있는 디렉토리.

/boot : 커널(vmlinux등) 시스템 부팅에 관련된 파일을 저장하고 있는 디렉토리.

/dev : 시스템 디바이스(device)파일을 저장하고 있는 디렉토리.

/etc : 패스워드파일등 시스템의 전체 환경설정파일을 저장하고 있는 디렉토리.

/home : 사용자의 홈디렉토리, ID와 동일한 이름으로 디렉토리를 가짐.

/lib : 프로그램(C, C++등)에 필요한 각종 라이브러리를 저장.

/mnt : 플로피, CD-ROM등 마운트를 위한 디렉토리.

/proc : 실행중인 프로세스나 현재 시스템의 정보를 파일형태로 보여주는 가상디렉토리.

/root : root의 홈디렉토리.

/sbin : 시스템 관리자용 명령어를 저장하고 있는 디렉토리.

/tmp : 일시적인 저장을 위한 디렉토리.(정기적으로 삭제됨)

/usr : 각종 어플리케이션등이 설치되어 있는 디렉토리.

/usr/X11R6 : X 윈도우 시스템의 루트 디렉토리.

/usr/include : C 프로그램에 필요한 헤드파일(*.h) 디렉토리.

/usr/lib : /lib에 들어가지 않은 라이브러리 디렉토리.

/usr/man : 명령어들의 도움말을 주는 매뉴얼(manual)페이지 디렉토리.

/usr/sbin : /bin에 제외된 명령어와 네트웍관련 명령어가 들어있는 디렉토리.

/usr/src : 프로그램 소스(주로 커널소스)가 저장되는 디렉토리.

/usr/local : 아파치같은 추가 소프트웨어가 설치되는 장소.

/var : 시스템운용중에 생성되었다가 삭제되는 데이터를 저장하는 디렉토리.

/var/log : 각종 로그파일이 저장되는 디렉토리.

/var/spool/mail : 메일이 일시적으로 저장되는 디렉토리.

/var/spool/lpd : 프린트를 하기 위한 임시 디렉토리(스풀링 디렉토리).


이상으로 리눅스, 주로 레드헷 리눅스의 디렉토리 구조에 대하여 살펴보았다.
2005/07/01 15:03 2005/07/01 15:03
1. chmod
파일 또는 디렉토리의 접근 권한을 변경하는 명령이다.

1.1 chmod의 기본적인 사용법
chmod [-옵션] [모드] [파일명]

[옵션]
chmod 명령에는 몇가지 옵션이 존재하지만 -R 옵션 외에는 사용할 일이 없기 때문에 -R 옵션만 설명을 하겠다.
-R : 퍼미션 변경 대상이 디렉토리일 경우 그 하위 경로에 있는 모든 파일과 디렉토리의 퍼미션을 변경한다.

[모드(심볼릭)]
심볼릭 모드와 8진수 모드를 사용할 수 있는데 대부분의 사용자들은 심볼릭 모드 보다 8진수 모드를 선호한다. 그럼 심볼릭
모드부터 공부해 보도록 하자.
심볼릭 모드에서 "u = 소유자, g = 소유 그룹, o = other, a = all, r = 읽기, w = 쓰기, x = 실행"을 의미한다.
심볼릭 모드에서는 권한 추가에 대해서 '+' 를 사용하고 권한 박탈에 대해서는 '-' 를 사용한다. '=' 를 사용하면 현재 설정
된 권한은 제거되고 오직 '='로 설정한 권한만 부여한다.

▶ file1에 대해 소유 그룹에게 쓰기 권한을 추가할 때
[root@rootman root]# chmod g+w file1

▶ 소유자에게 file1에 대해 쓰기 권한을 주고 소유 그룹에게는 쓰기 권한을 박탈할 할 때
[root@rootman root]# chmod u+w,g-w file1
--> 위와 같이 동시에 여러 대상에 대해 설정할 때는 각 대상을 콤마(,)로 구분하면 된다. 절대 공백이 들어가서는 안된다.

[모드(8진수)]
8진수 모드에서 4 = 읽기, 2 = 쓰기, 1 = 실행을 의미한다. 8진수 모드는 소유자와 소유그룹, other에 대해서 8진수 3자리로
표현하는데 첫째 자리수가 소유자를 의미하고 둘째 자릿수가 소유 그룹, 셋째 자릿수가 other을 의미한다.
예를 들어 751 라는 퍼미션은 소유자에게 7, 소유 그룹에게 5, other에게 1 에 해당하는 퍼미션을 설정한 것이다.
퍼미션의 계산은 주어진 권한에 해당하는 8진수 값을 모두 더해서(+) 설정된다.

▶ 소유자에게 읽기, 쓰기, 실행 권한을 소유 그룹에게는 읽기, 실행 권한을 other에게는 실행 권한만을 설정한 8진수 모드
소유자 = 4(읽기) + 2(쓰기) + 1(실행) = 7
소유그룹 = 4(읽기) + 1(실행) = 5
other = 1(실행) = 1
--> 이걸 정리하면 751 이라는 8진수 모드로 표현할 수 있다. 물론 초보자를 위한 설명이니까 덧셈까지 하면서 설명을 했지만 몇번 사용하다 보면 금방 익힐 수 있을 것이다.

▶ file1에 대해 소유자에게 읽기, 쓰기 권한을 소유 그룹과 other에게는 읽기 권한을 갖도록 설정할 때
[root@rootman root]# chmod 644 file1

1.2 특별한 퍼미션 setuid, setgid, sticky bit
setuid, setgid
실행 퍼미션에는 setuid와 setgid라는 특별한 퍼미션이 있다. setuid는 심볼릭 모드로 's'로 표현되고 8진수 모드로는 4000
으로 표현된다. setuid 퍼미션이 설정되어 있는 실행 파일은 실행되는 동안에는 그 파일의 소유자 권한을 가지게 된다.
이러한 이유때문에 root 소유의 setuid 퍼미션이 포함되어 있는 파일은 아주 신중히 관리를 해야 된다. 저는 사용 안하는
setuid 실행 파일은 setuid 퍼미션을 제거해서 따로 보관하고 있습니다. setgid 퍼미션이 포함되어 있는 실행 파일은 실행되는 동안은 그 파일의 소유 그룹의 권한을 가지는 것 빼고는 setuid와 같다. setgid의 8진수 모드는 2000 이다.
setuid 퍼미션을 포함하고 있는 실행 파일을 ls -al 명령으로 확인해 보면 다음과 같이 소유자 실행퍼미션에 's'라고 되어
있는 것을 확인할 수 있다.
[root@rootman root]# ls -al /bin/su
-rwsr-xr-x 1 root root 14112 1월 16 2001 /bin/su

setgid가 포함되어 있는 실행 파일을 ls -al 명령으로 확인하면 소유 그룹의 실행 퍼미션에 's'가 설정되어 있는 것을 확인
할 수 있을 것이다.
[root@rootman root]# ls -al /usr/bin/man
-rwxr-sr-x 1 root root 14112 2월 5 2001 /usr/bin/man

▶ file1 이라는 실행 파일에 setuid 퍼미션을 설정할 때
[root@rootman root]# chmod 4755 file1

▶ file1 이라는 실행 파일에 setgid 퍼미션을 설정할 때
[root@rootman root]# chmod 2755 file1

sticky bit
sticky bit도 특별한 퍼미션이다. other의 쓰기 권한에 대한 특별한 퍼미션인데 /tmp 디렉토리와 /var/tmp 디렉토리에의
퍼미션이 stickbit가 포함되어 있다. sticky bit는 8진수 모드로는 1000으로 설정되고 심볼릭 모드로는 't' 또는 'T'
로 설정된다. 이 sticky bit가 포함되어 있는 디렉토리에 other에 쓰기 권한이 있을 경우 other에 해당하는 사용자들은
디렉토리 안에 파일을 만들 수는 있어도 디렉토리 삭제는 할 수 없다.
sticky bit가 포함되어 있는 대포적인 디렉토리가 /tmp 디렉토리인데 분명히 /tmp 디렉토리의 퍼미에는 other에게 쓰기 권한이 주어져 있다. 그렇기 때문에 /tmp 디렉토리에는 누구나 디렉토리와 파일을 만들 수 있다. 하지만 other에 해당하는 사용자는 쓰기 권한이 있음에도 불고 하고 /tmp 디렉토리를 지울수 없는 것이다. 그 이유는 /tmp 디렉토리에는 sticky bit가 설정되어 있기 때문이다. 당연히 소유자는 sticky bit가 설정되어 있는 디렉토리를 삭제할 수 있다.
디렉토리가 아닌 파일에 sticky bit가 설정되어 있을 때는 other 에게 쓰기 퍼미션이 있어도 파일을 수정할 순 있지만 그 파일을 삭제할 수는 없다. sticky bit의 이런 특징을 이용하면 공개 서버에서는 여러모로 요기나게 사용할 수 있을 것이다.
sticky bit를 적용할려면 당연히 쓰기 권한도 주어야 되다.

▶ sticky bit가 포함되어 있는 디렉토리의 ls -al 결과
[root@rootman root]# ls -ald /tmp
drwxrwxrwt 14 root root 4096 Aug 30 02:05 /tmp

▶ dir1 이라는 디렉토리에 sticky bit를 설정할 때
[root@rootman root]# chmod 1707 dir1 --> 또는 chmod 1777 dir1

▶ sticky bit가 설정되어 있는 디렉토리를 other에 해당되는 사용자가 디렉토리 삭제 명령을 했을 때
[rootman@rootman /tmp]# rm -rf dir1
rm: cannot remove directory `dir1': Operation not permitted
[rootman@rootman /tmp]# ls -ald dir1
drwx---rwt 2 root root 4096 Aug 30 18:42 dir1

2. chattr, lsattr
루트도 지우지 못하는 파일을 설정할 수 있다는 말을 들어 본적이 있나요?
chattr을 이용하면 파일의 소유자라도 read-only로만 파일을 열수 있게 할수 있고 root도 chattr로 설정한 것을 해제하지
않으면 절대 chattr +i 로 설정한 파일을 지울 수 없다. 단, root만 사용 가능하다.
간혹 짖궂은 해커는 멍청한 관리자를 위해(?) 해킹한 시스템의 특정 파일에 chattr +i 를 설정해 놓고 chattr 명령을 모르는
관리자가 파일을 수정할려고 끙끙 대는 모습을 즐기기도 한다. 어떤 관리자는 시스템의 문제라고 생각하고 포멧을 하는 관리자를 본적도 있다. 저의 경우는 rootman의 텔넷 서버의 guest 계정에 chattr을 적용한 적이 있다. .bash_profile, .bashrc 같은 파일에 chattr +i 를 설정해서 default 설정을 변경하지 못하도록 하기 위해 사용했었다. 또 chattr에는 파일의 수정을 추가 모드로만 열 수 있도록 설정하는 옵션도 있다.
lsattr 이라는 명령으로 파일의 chattr 모드를 확인할 수 있다.

chattr [옵션] [+=-모드] [파일명]

모드를 추가 할때는 '+모드' , 모드를 제거할 때는 '-모드'를 사용하면 되고 '=모드'를 사용할 경우 현재의 모드는 제거되고
오직 '=모드'로 설정된 모드만 적용된다.

[옵션]
-R : 대상이 디렉토리일 경우 그 하위 경로에 있는 파일과 디렉토리까지 모드를 적용한다.
[모드]
i : 파일을 read-olny로만 열 수 있게 설정한다. 링크도 허용하지 않고 루트만이 이 모드를 제거할 수 있다.
a : 파일의 수정을 할 때 내용을 추가할 수만 있다. 단, vi편집기로는 내용을 추가 할 수 없다.

▶ file1에 i 모드를 추가할 때
[root@rootman /tmp]# chatr +i file1

▶ file2에 a 모드를 추가할 때
[root@rootman /tmp]# chattr +a file2

▶ 파일의 chattr 모드 확인
[root@rootman /tmp]# lsattr file1 file2
---i-------- file1
----a------- file2

▶ i 모드가 설정된 파일을 제거할려고 할 때 나타나는 메시지
[root@rootman /tmp]# rm -f file1
rm: cannot unlink `file1': 명령이 허용되지 않음

▶ a 모드가 설정된 file2 에 내용을 추가할 때
[root@rootman /tmp]# cat >> file2
a 모드가 설정되어 있는 파일.
내용을 추가합니다.
^D
--> a 모드가 설정된 파일은 내용 추가만 할 수 있는데 vi편집기에서는 추가되지 않았다. 위의 예제에는 >>(출력 리다이렉션)을 사용해 내용을 추가 하였다.

▶ i, 또는 a 모드가 설정된 파일에 모드를 제거할 때는 '-모드' 를 이용한다.
[root@rootman /tmp]# chattr -i file1
2005/07/01 15:02 2005/07/01 15:02
일반적으로 Linux Fail Over Cluster System 을 구축하기 위한 솔루션으로는 리눅스 라우팅 박스 아래에 서비스 서버들을 여러대 놓고, 리눅스 라우팅 박스의 Fail Over 를 구성하고, 서비스 서버들끼리 부하분산 Cluster 구성한다.
하지만, 이번 문서에서는 단지 두대의 리얼 서비스 리눅스 박스만으로 Fail Over Cluster 를 구성하기 위한 방법을 기술한다. 단 두대로 서비스 데몬까지 Fail Over Cluster 를 구성해주는 솔루션을 찾을 수 없어서 직접 작성한 스크립트를 추가하였다.

Linux Fail Over Cluster How To

1. 개요.
• 고가용성이란 하나의 노드에 문제가 생긴 경우 다른 노드에서 서비스나 기능을 대신 제공하는 것을 말한다. 공개소스로서 이러한 기능을 구현하고 있는 것이 High-Availability Linux Project 이다. Heartbeat 등의 프로그램을 이용하여, 서비스 서버에 장애가 발생하더라도 예비 서버를 이용하여 계속적인 서비스가 가능하도록 구성하는 것이다.

2. 환경
서버 2대 (Redhat Linux 9.0)
virtual ip  lvstest.com (210.xxx.xxx.225)
server 1  lvs1.lvstest.com (210.xxx.xxx.226)
server 2  lvs2.lvstest.com (210.xxx.xxx.227)

만약 랜카드가 두개씩 장착되어진 시스템이라면 크로스 케이블을 이용 eht1 번
카드로 클러스터링을 구성하도록 할 수 있다. 본 문서는 랜카드가 한 개씩 일 때를
기준으로 작성되었으나, 추가적으로 ▶ Private IP 라는 표시를 하여 두번째
랜카드를 클러스터링용도로 사용하는 방법에 대해서도 함께 기술한다. 만약
랜카드가 하나씩인 시스템에 설치시에는 ▶ Private IP 표시가 된 항목은
무시하도록 한다.

▶ Private IP
Server 1  lvs1.lvstest.com (PublicIP: 210.xxx.xxx.226 / PrivateIP: 192.168.0.226)
Server 2  lvs2.lvstest.com (PublicIP: 210.xxx.xxx.227 / PrivateIP: 192.168.0.227)

3. 설치 프로그램 (lvs1, lvs2 공통)
A. 설치되어 있어야 하는 프로그램들.
autoconf, automake, libtool, glib-devel, lynx
RHN, 혹은 Red carpet 을 통하여 RPM 설치를 한다.
Apache, MySQL, PHP 를 설치한다.

B. 설치할 프로그램들.
libnet, heartbeat
libnet 은 http://www.packetfactory.net/libnet 에서 구할 수 있다. 다운 받은 후 다음의 명령으로 기본 설치한다.

# gzip –cd libnet.tar.gz | tar xvf –
# cd Libnet-latest
# ./configure
# make && make install

heartbeat 은 http://www.linux-ha.org/download/ 에서 구할 수 있다.
다음의 명령으로 기본 설치한다.

# gzip –cd heartbeat-1.0.3.tar.gz | tar xvf –
# cd heartbeat-1.0.3
# ./ConfigureMe configure
# gmake && gmake install (gmake 를 권장한다.)

4. server, heartbeat 설정.
A. Server 설정
Lvs1, lvs2 공통으로 /etc/hosts 파일을 열어 다음 라인을 추가해 준다.

# vi /etc/hosts
210.xxx.xxx.226 lvs1.lvstest.com lvs1
210.xxx.xxx.227 lvs2.lvstest.com lvs2
:wq

▶ Private IP
# vi /etc/hosts
192.168.0.226 lvs1.lvstest.com lvs1
192.168.0.227 lvs2.lvstest.com lvs2

/etc/sysconfig/network 파일을 열어 다음과 같이 개별적으로 편집한다.

Lvs1  HOSTNAME=lvs1
Lvs2  HOSTNAME=lvs2

B. Heartbeat 설정
이하는 모두 공통 설정이다.
우선 각각의 서버에 /etc/rc.d/init.d/heartbeat 이라는 스크립트가 존재하는지를 확인한다. 또한 /etc/ha.d 디렉터리가 존재하는지도 확인한다.
다음으로 각각의 서버에 3개의 환경파일을 생성 및 편집한다. 파일은 다음과 같다.
/etc/ha.d/authkeys, /etc/ha.d/ha.cf, /etc/ha.d/haresources

# vi authkeys
auth1
1 crc
:wq

# vi ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 2  두 노드간에 얼마나 자주 heartbeat를 주고받을 것인가. 2초
deadtime 5  호스트가 죽었다고 판단하는 시간. 5초가 지나면 failover를 시작한다.
udpport 694  UDP heartbeat 패킷을 보낼 포트.
udp eth0  heartbeat를 보낼 인터페이스 (eth1 등의 추가적인 장치가 있다면 서비스에 영향을 주지 않도록 eth1 등의 디바이스를 사용한다.)
▶ Private IP
udp eth1
node lvs1
node lvs2
:wq

vi haresources
lvs1 210.xxx.xxx.225  가상 아이피를 적어준다. (두 서버 모두 동일하게 세팅한다.)
:wq

마지막으로 authkeys 파일의 퍼미션을 변경해준다.

# chmod 600 authkeys

부팅시 자동으로 실행될 수 있도록 각각의 서버에서 부트 스크립트 링크를 걸어준다.

# ln –s /etc/rc.d/init.d/heartbeat /etc/rc.d/rc0.d/K05heartbeat
# ln –s /etc/rc.d/init.d/heartbeat /etc/rc.d/rc3.d/S99heartbeat
# ln –s /etc/rc.d/init.d/heartbeat /etc/rc.d/rc5.d/S99heartbeat
# ln –s /etc/rc.d/init.d/heartbeat /etc/rc.d/rc6.d/K05heartbeat

5. Heartbeat 설정 확인
각각의 서버에서 /etc/rc.d/init.d/heartbeat start(enter)
lvs1 에서 ifconfig 명령어로 확인해 보았을 때 eth0:0 가 생성되고 210.xxx.xxx.225 의 가상 아이피가 할당된다. (LVS1, LVS2 순서대로 실행 추천)
lvs1 의 전원을 끄거나 /etc/rc.d/rc3.d/S99heartbeat stop(enter)를 해본다. 잠시후에 lvs2 에서 ifconfig 명령어로 확인해 보았을 때 eth0:0 가 새로 생성되면서 210.xxx.xxx.225 의 가상 아이피가 할당된다.
lvs1 의 전원을 킨다. 혹은 /etc/rc.d/rc3.d/S99heartbeat start(enter)를 한다. 잠시후 lvs2 의 eth0:0 가 없어지고 lvs1 에 eth0:0 가 생성되면서 210.xxx.xxx.225 의 아이피가 할당된다.

6. 서비스 데몬 모니터링
A. 서비스 데몬 체크를 위한 시스템 설정 (LVS1 에만 해당된다)
MySQL root 패스워드를 설정한다. (혹은 데몬 체크를 위한 DB 유저 / 패스워드를 생성한다.)

# /usr/local/mysql/bin/mysql mysql
mysql> update user set password = password(‘$NEWPASSWD’) where user = ‘root’;
mysql> flush privileges;

데몬 체크 스크립트에서 확인 할 수 있도록 아파치 웹 디렉터리에 다음과 같은 파일을 생성한다.

# cd /usr/local/apache/htdocs
# vi apache_mysql_chk.html
$dbcheck=mysql_connect(“:/tmp/mysql.sock”,”root”,”$NEWPASSWD”);  MySQL 의 소켓 값(여기서는 /tmp/mysql.sock)은 netstat –an | grep LIST 하면 확인 할 수 있다. 아이디와 패스워드(여기서는 root) 위에서 설정한 아이디, 패스워드를 사용한다.
If($dbcheck) echo “GOOD”;
else echo “BAD”;
?>
:wq!

B. 서비스 데몬을 모니터링하기 위한 heartbeat 의 추가설정 및 스크립트 (LVS1 에만 해당된다)
/etc/ha.d/resource.d/daemon_chk 스크립트를 생성한다.

vi daemon_chk
#! /bin/sh
# scripted by brainjam at inet.co.kr

# 필요에 따라 SLEEP_TIME 과 LYNX_TIME_OUT 값을 변경해 줄 수 있다.

CHK_FILE=lvstest.com/apache_mysql_chk.html
SLEEP_TIME=2  서비스 데몬 체크 후 다음 체크까지의 초.
LYNX_TIME_OUT=5  서비스 데몬 체크시 응답 까지의 타임아웃 초.
ORIG_SYNTAX=” GOOD”
 터미널에서 다음 명령어를 실행해서 나오는 결과값을 입력. 앞쪽의 space 도 포함해서 입력해 준다. # lynx –dump lvstest.com/apache_mysql_chk.html 일반적으로 spacespacespaceGOOD (space 세개) 일 것 이다.

# 아래 스크립트는 변경하지 않도록 한다.

case $1 in

start)

LOOP_NUM=0
CHK_NUM=0
while [ $LOOP_NUM = 0 ]
do

CHK_NUM=$CHK_NUM
if [ $CHK_NUM = 5 ]
then
/etc/rc.d/init.d/heartbeat stop
exit 0
else
GET_SYNTAX=`lynx –dump –connect_timeout=$LYNX_TIME_OUT –nolog $CHK_FILE | grep GOOD 2>/dev/null`
if [ “$ORIG_SYNTAX” = “$GET_SYNTAX” ]
then
CHK_NUM=0
sleep $SLEEP_TIME
else
CHK_NUM=`expr $CHK_NUM + 1`
sleep $SLEEP_TIME
fi
fi

done
;;

stop)
DAEMON_CHK_PID=`ps aux | awk ‘/daemon_chk/ && !/awk/ {print $2}’ | head -1`
kill -9 $DAEMON_CHK_PID
;;

*)
echo “daemon_chk start or stop”
;;

esac
:wq!

# chmod +x daemon_chk  실행 퍼미션을 적용한다.

서비스에 필요한 스크립트를 /etc/ha.d/resource.d 에 소프트 링크를 건다.

# cd /etc/ha.d/resource.d
# ln –s /usr/local/apache/bin/apachectl ./apache
# ln –s /usr/local/mysql/share/mysql/mysql.server ./mysql

만약 /etc/rc.d 아래에 S99apache, S99mysql 등의 스크립트가 설정되어 있다면 모두 삭제한다. Fail Over 를 위해서 apache, mysql 등의 시작 종료를 heartbeat 가 관장하게 된다.

/etc/ha.d/haresources 를 수정한다.

LVS1 의 haresources 파일
# vi haresources
lvs1 IPaddr::210.xxx.xxx.225 apache mysql daemon_chk

LVS2 의 haresources 파일
# vi haresources
lvs1 IPaddr::210.xxx.xxx.225 apache mysql

7. High Availability Fail Over Clustering 설정 확인
각각의 서버에서 /etc/rc.d/init.d/heartbeat start(enter) 를 실행한다. (LVS1, LVS2 순서대로 실행 추천) LVS1 에 apache 와 mysql 이 실행되었는지 확인한다. (heartbeat 이 올라간 후 실행되기 때문에 5초 정도의 딜레이가 있을 수 있다.) LVS2 에서는 heartbeat 가 실행되더라도 apache 와 mysql 이 실행되지 않는다. 이는 추후에 LVS1 이 서비스 불능시 LVS2 가 Virtual IP (여기서는 210.xxx.xxx.225)를 가져오면서 자동 실행된다.
테스트를 위해서 apache 혹은 mysql 데몬을 종료시킨다. 위의 설정대로 하였다면 10초 뒤 LVS1 의 heartbeat 이 종료되면서 LVS2 가 Virtual IP 를 가져간다. 동시에 LVS2 에서 apache 와 mysql 이 서비스 됨을 확인 할 수 있을 것이다. (LVS1 은 자동으로 apache 와 mysql 데몬을 종료되었을 것이다.)
다시 LVS1 에서 heartbeat 를 실행시키면 다시 Virtual IP 를 LVS1 으로 가져오면서 LVS1 에서 서비스 되는 것을 확인 할 수 있다.
2005/07/01 15:01 2005/07/01 15:01
운용중인 리눅스시스템의 커널버전을 확인하고자 한다면 다음의 두가지 방법이 있습니다.



첫 번째는 uname이라는 명령어를 이용하는 방법으로 다음과 같이 확인합니다.

[root@hlxsvr /proc]# uname -a

Linux hlxsvr.2000.co.kr 2.2.14 #1 SMP 월 3월 6 11:13:37 KST 2000 i686 unknown

[root@hlxsvr /proc]#



둘째로는 /proc 디렉토리에서 version이라는 파일의 내용을 cat이란 명령으로 확인해 보는 것입니다.

[root@hlxsvr /]cd /proc

[root@hlxsvr /proc]# cat version

Linux version 2.2.14 (root@superuser.co.kr) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #1 SMP 월 3월 6 11:13:37 KST 2000

/proc이란 디렉토리는 실제로 존재하는 디렉토리가 아니라 가상의 디렉토리로서 현재 메모리에 올라와 있는 실행중인 모든 프로세스들의 정보를 보관하고 있는 디렉토리입니다.
2005/07/01 15:01 2005/07/01 15:01
시스템을 관리하다보면 보안이나 서버부하등 여러 가지 사유로 인하여 ping에 응답하지 못하게 설정할 필요를 느낄 때가 있습니다.

이때에는 다음과 같이 설정함으로서 ping에 응답하지 못하게 하거나 다시 응답하게할 수 있습니다.



첫째, ping에 응답하지 못하게 하려면 /proc/sys/net/ipv4/icmp_echo_ignore_all 파일값을 1로 설정합니다.

이렇게 설정하여두면 시스템은 현재 정상적으로 운용되고 있지만 ping테스트에 대한 응답은 전혀하지 않습니다.

둘째, 다시 ping에 응답하게 하려면 /proc/sys/net/ipv4/icmp_echo_ignore_all 파일값을 0으로 설정합니다.

이 파일의 값이 0으로 되어있다면 ping테스트에 응답을 하게됩니다.
2005/07/01 15:00 2005/07/01 15:00
시스템을 운영하는 관리자는 로그인하는 사용자들에게 알리고픈 공지사항등을 로그인할 당시에 보여주는 것이 가장 효과적입니다.

TELNET으로 remote로그인을 하는 사용자들에게 메시지를 보여주는 절차는 크게 두가지로 나누어 볼 수 있습니다.

첫째, 로그인전에 보여주는 메시지, 즉 ID와 패스워드의 입력을 요구하는 단계 다시말씀드려서 시스템의 정상사용자인증을 받지 못한 상태에 보여줄 메시지입니다.

이 메시지는 /etc/issue.net파일에 보관되어 있습니다.

이 메시지를 원하는 내용으로 변경하려면 이 파일의 내용을 수정하시면 됩니다.

참고로, 시스템에 부팅중에 실행이 되는 /etc/rc.d/rc.local파일에는 로그인시에 실행이될 /etc/issue.net파일에 대한 실행내용들이 포함되어 있습니다.

/etc/issue.net의 파일이름을 변경하고자 한다거나, 파일의 위치를 변경하고자 한다면 /etc/rc.d/rc.local파일을 편집하시면 됩니다.

참고로 /etc/rc.d/rc.local파일내용중 로그인전에 보여주는 메시지인 /etc/issue.net파일에 관련된 부분은 다음과 같습니다.

# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
if [ -x /usr/bin/linux_logo ];then
/usr/bin/linux_logo -c -n -f -o 2 > /etc/issue
echo "" >> /etc/issue
else
echo "Kernel $(uname -r) on $a $(uname -m)" > /etc/issue
fi
echo "$R" >> /etc/issue
echo "$R" > /etc/issue.net
echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue.net
fi

둘째, ID와 패스워드를 정상적으로 입력한 후 즉, 정상사용자로 인증된 후에 보여줄 메시지입니다.

즉, ID와 패스워드를 입력하고 시스템에 로그인한 바로다음에 보여줄 메시지를 말함인데 이 메시지는 /etc/motd에 보관되어있습니다.

따라서 정상사용자들에게 안내할 공지사항이나 필독사항등은 여기에 넣어두면 로그인에 성공한 사용자들은 모두 이 메시지를 보게되겠죠

시스템관리자의 측면에서의 이파일에 대한 일반적인 용도는 시스템점검일자등에 대한 공지등으로 이용됩니다.



다음의 예는 /etc/issue.net파일의 실제내용입니다.

[root@hlxsvr /]# cat /etc/issue.net

Welcome to My system

Please input our certification name



다음은 /etc/motd파일의 실제내용입니다.

[root@hlxsvr /]# cat /etc/motd

---------------------------------------

WELCOME TO OUR SYSTEM

system check : 2003. 10. 15

Admin email : email@xxx.com

TEL : xxx-xxx-xxxx

note : Please check your mail box

---------------------------------------

[root@hlxsvr /]#
2005/07/01 14:59 2005/07/01 14:59
관리자로서 시스템을 유지관리하다보면 여러사용자의 활동내역등을 확인해보아야할 때가 있습니다.

특히, 웹호스팅서버등과 같은 시스템에서는 가입자들이 시스템의 특정디바이스등을 사용할 때가 있으며, 특히 보안등을 위해서는 특정가입자가 생성한 파일들이 어떤 것이 있나를 확인해야하는 경우들이 있습니다.

이런 경우에 사용하는 간단한 명령어를 소개합니다.



[root@hlxsvr /]# find / -user "sspark" -print

/dev/pts/0

/proc/6894

/proc/6894/cpu

/proc/6894/maps

/proc/6894/statm

/proc/6894/stat

/proc/6894/cmdline

/proc/6894/environ

/proc/6894/fd

/proc/6894/fd/0

/proc/6894/fd/1

/proc/6894/fd/2

/proc/6894/fd/255

/proc/6894/exe

/proc/6894/root

/proc/6894/cwd

/proc/6894/mem

/proc/6894/status

find: /proc/6936/fd/4: No such file or directory

/home/sspark

/home/sspark/.Xdefaults

/home/sspark/.bashrc

/home/sspark/.cshrc

/home/sspark/.emacs

/home/sspark/.gtkrc

/home/sspark/.gvimrc

/home/sspark/.muttrc

/home/sspark/.profile

/home/sspark/.vimrc

/home/sspark/tmp

/home/sspark/.bash_history

/home/sspark/BACKUP

/home/sspark/BACKUP/0820

/home/sspark/BACKUP/0820/project2001.zip

/home/sspark/BACKUP/0820/Office.zip

/home/sspark/BACKUP/0820/Outlook Express.zip

/home/sspark/BACKUP/0827

/home/sspark/BACKUP/0827/sajik.com.tar.gz

/home/sspark/BACKUP/0827/project2001.zip

/home/sspark/BACKUP/0827/Office.zip

/home/sspark/BACKUP/0827/OutlookExpress.zip

/home/sspark/BACKUP/0918

/home/sspark/BACKUP/0918/project2001.zip

/home/sspark/BACKUP/0918/Outlook Express.zip

/home/sspark/BACKUP/0930

/home/sspark/BACKUP/0930/OutlookExpress.zip

/home/sspark/BACKUP/0930/project2001.zip

/home/sspark/BACKUP/0801

/home/sspark/BACKUP/0801/업무자료실.zip

/home/sspark/BACKUP/0801/project2001.zip

/home/sspark/BACKUP/SUPERUSER_BACKUP_DATA

/home/sspark/BACKUP/SUPERUSER_BACKUP_DATA/superuser_BBS.tar.gz

/home/sspark/BACKUP/SUPERUSER_BACKUP_DATA/superuser_BOARD.tar.gz

/home/sspark/BACKUP/SUPERUSER_BACKUP_DATA/superuser_PBS.tar.gz

/home/sspark/BACKUP/SUPERUSER_BACKUP_DATA/superuser_MEMBER.tar.gz

/home/sspark/BACKUP/SUPERUSER_BACKUP_DATA/superuser_PUBLIC.tar.gz

/home/sspark/BACKUP/SUPERUSER_BACKUP_DATA/superuser_PUBLIC_HTML.tar.gz

/home/sspark/BACKUP/1010

/home/sspark/BACKUP/1010/OutlookExpress.zip

/home/sspark/BACKUP/1010/project2001.zip

/home/sspark/BACKUP/apache.tar.gz

/home/sspark/BACKUP/aw.tar.gz

/home/sspark/BACKUP/etc.tar.gz

/home/sspark/BACKUP/hanlimmedia.co.kr.tar.gz

/home/sspark/BACKUP/imt-2000.co.kr.tar.gz

/home/sspark/BACKUP/nicekorea.co.kr.tar.gz

/home/sspark/BACKUP/owner.co.kr.tar.gz

/home/sspark/BACKUP/sajik.com.tar.gz

/home/sspark/BACKUP/var.tar.gz

/home/sspark/BACKUP/GUESTBOOK.sql

/home/sspark/BACKUP/customdb.sql

/home/sspark/BACKUP/mysql.sql

/home/sspark/BACKUP/niceboard.sql

/home/sspark/BACKUP/nicepds.sql

/home/sspark/qpopper3.0.2.tar.gz

/home/sspark/accesswatch-2.1.tar.gz

/home/sspark/bind-8.2.1-7.i386.rpm

/home/sspark/bind-devel-8.2.1-7.i386.rpm

/home/sspark/bind-utils-8.2.1-7.i386.rpm

/home/sspark/httpd.conf.20000822

/home/sspark/imsi

/home/sspark/www_log

/home/sspark/idled-1.16.tar.gz

/home/sspark/nc-1.10-4.i386.rpm

/home/sspark/shop.tar.gz

/home/sspark/mysql

/home/sspark/mysql/mysql-3.22.26a-pc-linux-gnu-i686.tar.gz

/home/sspark/mysql/MySQL-3.22.32-1.i386.rpm

/home/sspark/mysql/MySQL-client-3.22.32-1.i386.rpm

/home/sspark/mysql/MySQL-devel-3.22.32-1.i386.rpm

/home/sspark/crack5.0.tar.gz

/home/sspark/mailx-8.1.1-9.i386.rpm

/home/sspark/apache_1.3.12.tar.gz

/home/sspark/.viminfo

/home/sspark/nmap

/home/sspark/nmap/nmap-2.12.tgz

/home/sspark/tripwire

/home/sspark/tripwire/tripwire-1.30-1.tgz

/home/sspark/saint

/home/sspark/saint/saint-1.3.4.tar.gz

/home/sspark/php-4.0.1pl2.tar.gz

/home/sspark/php-3.0.16.tar.gz

/home/sspark/passwd

/home/sspark/cops

/home/sspark/cops/cops_104.tar.gz

/home/sspark/gd1_5.tar.gz

/home/sspark/test

/home/sspark/test2

/home/sspark/test3

/home/sspark/mysql-3.22.24.tar.gz

/home/sspark/freetype-1.2.tar.gz

/home/sspark/php-3.0.12.tar.gz

/home/sspark/elm-2.5.1-1.i386.rpm

/home/sspark/metamail-2.7-22.i386.rpm

/home/sspark/mailcap-2.0.3-1.noarch.rpm

/home/sspark/html.tar

/home/sspark/mrtg-2.9.0pre29.tar.gz

/home/sspark/zlib.tar.gz

/home/sspark/libpng-1.0.8.tar.gz

/home/sspark/mrtg.tar.gz

find: /mnt/cdrom: Input/output error

find: /mnt/floppy: Input/output error

[root@hlxsvr /]#
2005/07/01 14:59 2005/07/01 14:59
시스템관리에 있어서 정기적으로 확인 및 점검해야 할 사항중에 가장 중요한 것이 있다. 시스템에 이상이 있거나 보안의 위험을 감지하기 위해서는 시스템에서 남겨지는 메시지를 확인해야 한다. 모든 시스템에는 작업이 있고 난 후에는 반드시 로그가 남겨지며, 관리자는 이를 정기적으로 점검을 해야한다. 시스템에 이상이 생겼을 때 혹은 보안이 뚫려서 해킹을 당했을 때 이에 대한 1차적인 확인을 로그파일들에서 하게된다. 우리 인체에 비유하자면 사람의 몸에 이상이 생기기 전에 위험신호를 감지하기 위해 몸상태를 체크해 보내는 것과 비슷하다고 할 수 있다.


리눅스에서는 /var/log디렉토리에 시스템의 모든 로그를 기록 및 관리하고 있다. 시스템의 /etc/syslog.conf파일에는 거의 모든 시스템 로그파일들의 위치를 지정하고 있다. 여기서 리눅스의 모든 로그파일을 살펴보지는 못하지만 몇가지만 살펴보도록 하자.


다음은 /var/log의 디렉토리에 있는 로그파일과 로그디렉토리이다. 중요한 것 몇가지만 살펴보겠다.



[root@ciss9 log]# ls -l

total 4020

-rw-r--r-- 1 root root 12427 Sep 6 14:50 boot.log

-rw------- 1 root root 21890 Oct 12 13:20 cron

-rw-r--r-- 1 root root 6606 Sep 6 14:49 dmesg

drwxr-xr-x 2 root root 4096 Oct 10 04:02 httpd

-rw-r--r-- 1 root root 149796 Oct 14 01:55 lastlog

-rw------- 1 root root 5275 Oct 13 18:11 maillog

-rw------- 1 root root 408515 Oct 14 02:07 messages

-rw-r--r-- 1 root root 0 Oct 1 04:02 netconf.log

drwxrwxr-x 3 news news 4096 Oct 12 04:02 news

-rw------- 1 root root 0 Apr 6 1999 pacct

-rw------- 1 root root 0 Apr 6 1999 pacct

drwxr-xr-x 2 root root 4096 Oct 7 07:18 samba

-rw------- 1 root root 0 Apr 6 1999 savacct

-rw------- 1 root root 3314 Oct 14 01:55 secure

-rw-r--r-- 1 root root 616 Oct 13 18:11 sendmail.st

-rw------- 1 root root 0 Oct 10 04:02 spooler

drwxr-x--- 2 squid squid 4096 Apr 19 12:42 squid

-rw------- 1 root root 0 Apr 6 1999 usracct

drwxr-xr-x 2 uucp uucp 4096 Oct 10 04:02 uucp

-rw-rw-r-- 1 root utmp 38016 Oct 14 01:55 wtmp

-rw-rw-r-- 1 root utmp 76416 Sep 30 20:01 wtmp.1

-rw------- 1 root root 0 Oct 10 04:02 xferlog





● boot.log : 리눅스가 부팅이 될때 뿌려주는 모든 메시지를 기록하고 있다. 부팅시의 에러나 조치사항을 살펴보려면 이 파일을 참조해야 한다.


● cron : 시스템의 정기적인 작업에 대한 로그를 기록하고 있다.

/etc/밑에 있는 파일들중 cron.hourly, cron.daily, , cron.weekly cron.monthly 파일들은 각각 시간별, 일별, 주별, 월별로 정기적으로 운영체제에서 자동으로 작업해야할 것에 대한 작업을 저장하고 있으며 지정한 일시에 실행이 되며 이들 작업을 한 후에는 /var/log/cron파일에 기록을 남기게 된다.


● message : 운영체제에서 보내주는 실시간 로그를 관리하고 있으며 주로 콘솔로 이 메시지는 실시간으로 보여준다.


● secure : 시스템의 접속에 관한 로그파일로서 언제, 누가, 어디에서 어떻게 접속을 했는가에 대한 로그를 기록하고 있다. 시스템의 불법침입등이 있었다고 의심이 될 때는 반드시 이 로그파일을 확인해야 한다.


● xferlog : ftp로 로그인하는 사용자에 대한 로그를 기록하는 파일로서 /etc/ftpaccess에 그 설정파일을 가지면 ftp의 홈디렉토리는 /home/ftp이다.


이외에도 중요한 로그파일이 있는데 /var/spool에는 작업중에 일시적으로 저장되는 로그 및 작업들에 대한 기록이 남겨지는 곳으로 이중 메일에 관한 것만 살펴 보면 다음과 같다.


● /var/spool/mail


사용자들에 대한 메일을 보관하고 있는 디렉토리로서 메일을 한번이상 사용한 사용자는 사용자 계정 ID와 동일한 파일이 하나씩 존재한다. 메일을 읽은 후에 사용자의 메일디렉토리로 저장하거나 메일을 삭제했을 경우에는 이 파일에서 메일내용이 삭제된다.




이 디렉토리에 있는 파일을 보기위해 "elm -f ID"로 하면 사용자의 메일을 확인할 수 있다. 물론 이 작업은 root 권한만이 가능하며 시스템관리자라고 해서 사용자의 메일내용을 함부로 확인할 수 있는 권리는 없다.



[root@ciss9 mail]# ls -l

total 252

-rw-rw---- 1 news mail 236418 Oct 14 16:26 news

-rw------- 1 root root 6809 Oct 14 16:27 root

-rw-rw---- 1 shkim mail 514 Oct 7 22:13 shkim

-rw-rw---- 1 sspark mail 514 Oct 8 19:13 sspark
2005/07/01 14:59 2005/07/01 14:59
여기서 설명할 내용은 단순히 특정파일을 찾는 것이 아니라 시스템에 존재하는 특정파일을 모두 찾아서 그 파일을 "ls -l"한 것까지 모두 나열하고, 찾아진 개별파일들의 내용까지 동시에 보는 방법에 대한 것이다.

특정파일을 찾는 명령어는 find를 사용하면 된다.
윈도우95/98/NT등의 윈도우 운영체제의 시작메뉴에 보면 "찾기"라는 메뉴가 있다.

특정 파일을 찾으려면 간단히 파일의 이름을 주고서 찾기버튼을 클릭하면되지만, 이 찾기의 고급옵션에 보면 특정파일의 사이즈나 날짜등의 옵션을 주어서 원하는 파일이나 디렉토리등을 찾을수가 있다.

이와 같은 기능은 아니지만, 리눅스나 유닉스등의 운영체제에서도 find명령어를 제대로 활용하면 이에 못지않은 효과를 얻을수 있다.



1. 특정파일을 모두 찾아서 각각 "ls -l"하여 정보확인하기

[root@kebia_1 /root]# find / -name .searchfile -exec ls -l {} \;
-rw------- 1 kimlee webadmin 15 Apr 27 02:51 /home/sspark/.searchfile
-rw------- 1 adm115 webadmin 15 Apr 27 02:41 /home/adm115/.searchfile
-rw------- 1 hyung webadmin 15 Apr 27 02:57 /home/hyung/.searchfile
-rw------- 1 imt2000 webadmin 27 Apr 27 03:04 /home/imt2000/.searchfile
-rw------- 1 manual webadmin 15 Apr 27 02:47 /home/manual/.searchfile
-rw------- 1 nice webadmin 15 Apr 27 02:45 /home/nice/.searchfile
-rw------- 1 owner webadmin 15 Apr 28 10:24 /home/owner/.searchfile
-rw------- 1 picasso webadmin 15 Apr 27 02:55 /home/picasso/.searchfile
-rw------- 1 power webadmin 15 Apr 27 02:56 /home/power/.searchfile
-rw------- 1 sajik webadmin 15 Apr 27 02:49 /home/sajik/.searchfile
-rw------- 1 six webadmin 15 Apr 27 02:59 /home/six/.searchfile
-rw------- 1 soho webadmin 15 Apr 27 02:54 /home/soho/.searchfile
-rw------- 1 sosmail webadmin 15 Apr 27 02:50 /home/sosmail/.searchfile
-rw------- 1 super webadmin 27 Apr 27 03:08 /home/super/.searchfile
-rw------- 1 webmaste webadmin 15 Apr 27 02:53 /home/webmaster/.searchfile
-rw------- 1 nofee nofee 15 May 18 13:42 /home/nofee/.searchfile




2. 특정파일을 모두 찾아서 각각 파일내용 확인하기

[root@kebia_1 /root]# find / -name .searchfile -exec cat {} \;
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
This file is empty. And, file name is searchfile
[root@kebia_1 /root]#
2005/07/01 14:58 2005/07/01 14:58
목적 : telnet으로 서버에 접속하여 일정시간 사용치않을때(idle time) 자동으로 로그아웃함.


해결방법 : idled란 데몬을 설치하여 데몬으로 실행시켜둔다.


1. 먼저 idled-1.16.tar.gz 소스를 구한다.

http://www.cs.hope.edu/~crider/idled/

2. 제작자 : Mike Crider crider@cs.hope.e여

3. ISP의 ftp사이트에서 소스를 구할 수 있음.

4. 소스를 구한 다음 /usr/local 디렉토리로 소스를 이동한다.

5. 먼저 압축과 tar를 해제한다.

#tar xvfz idled-1.16.tar.gz

또는

#gunzip idled-1.16.tar.gz

#tar xvfp idled-1.16.tar


6. 해당 디렉토리로 이동한다.

#cd idled-1.16

7. Makefile을 수정한다.(수정할 내용은 다음과 같다.)

- Compiler를 설정한다.(CC로 할 것인지,, gcc로 할 것인지)

- 설치하는 플레폼에 맞는 곳에서 주석을 제거한다.

(기본적으로 대부분 Solaris에 주석이 제거되어 있으므로

Solaris외의 다른 플레폼이라면 Solaris부분을 주석처리해야한다.)


현재 여기서는 Linux이므로 다음과 같이 한다.

CC = cc

RM = rm

INCLUDE =

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

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

# Linux

# Note: NOT all version of Linux have yyrestart(). Remove the

# -DHAVE_YYRESTART if you have problems.

# You should do a 'make clean' before 'make', so that parse.c

# and scan.c will be created on your system.

#DEFS += -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID

DEFS += -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART

SPECLIBS =

INSTTYPE = install1


DEST = /usr/local/bin <- 실행파일(idled)가 위치할 디렉토리

CFDEST = /usr/local/lib <- 환경파일(idled.cf)가 위치할 디렉토리

MDEST = /usr/local/man <- man파일 위치

LOGDEST = /var/log <- idled위 로그파일


OWNER = root

CFOWNER = root

MOWNER = root


GROUP = root

CFGROUP = root


MODE = 750

CFMODE = 664

MMODE = 644


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

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

8. make 로 컴파일한다.

[root@www idled-1.16]# make

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -c insque.c -o insque.o

yacc -d parse.y

mv y.tab.c parse.c

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -c list.c -o list.o

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -c parse.c -o parse.o

lex scan.l

mv lex.yy.c scan.c

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -c scan.c -o scan.o

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -c idled.c -o idled.o

idled.c:37: warning: `ut_xtime' redefined

/usr/include/bits/utmp.h:76: warning: this is the location of the previous definition

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -c warn.c -o warn.o

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -c xlock_check.c -o xlock_check.o

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -c zap.c -o zap.o

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -c linetimelist.c -o linetimelist.o

cc -DSYSV -DUTMPPID -DUTMPHOST -DHAVE_SETSID -DHAVE_YYRESTART -DCONFIG=\"/usr/local/lib/idled.cf\" -DLOGFILE=\"/var/log/idled.log\" -o idled insque.o list.o parse.o scan.o idled.o warn.o xlock_check.o zap.o linetimelist.o

echo /usr/local/lib/idled.cf | sed 's/\//\\\//g' > .maketmp

echo /var/log/idled.log | sed 's/\//\\\//g' > .maketmp2

sed -e "s/CONFIGPATH/`cat .maketmp`/" -e "s/LOGFILEPATH/`cat .maketmp2`/" idled.cf.man.form > idled.cf.5

sed -e "s/CONFIGPATH/`cat .maketmp`/" -e "s/LOGFILEPATH/`cat .maketmp2`/" idled.man.form > idled.8

rm -f .maketmp .maketmp2


9. make install 로 설치한다.

[root@www idled-1.16]# make install

install -c -m 750 -o root -g root idled /usr/local/bin

install -c -m 664 -o root -g root idled.cf.template /usr/local/lib

install -c -m 644 -o root idled.cf.5 /usr/local/man/man5

install -c -m 644 -o root idled.8 /usr/local/man/man8


Be sure to edit/create the file /usr/local/lib/idled.cf based on

the needs for your system. The /usr/local/lib/idled.cf.template

file can serve as a guide, as well as the man pages.




10. 설치후 중요한 파일들의 위치는 다음과 같다.

- 실행파일 : /usr/local/bin/idled

- 환경파일 : /usr/local/lib/idled.cf

11. 처음엔 환경설정파일의 이름이 idled.cf.template이므로 다음과 같이 변경한다.

#mv idled.cf.template idled.cf

12. idled.cf파일을 vi로 열어서 적당한 설정값으로 설정한다.

idled.cf내의 timeout default 60 값을 조정한다.

여기서 입력한 단위는 분이며 60분후에 logout시키겠다는 의미이다.

13. 이제 /usr/local/bin/idled의 데몬을 띄운다.

[root@owner lib]# ps -ef | grep idled

root 5983 1 0 15:33 ? 00:00:00 /usr/local/bin/idled

14. idled 데몬이 정상적으로 작동하는지(logout)시키는 가를 확인한다.

[owner@owner owner]$


Tue Jul 4 15:56:20

This terminal has been idle 60 minutes. If it remains idle

for 5 more minutes it will be logged out by the system.


위의 메시지는 현재 시간을 알리고 60분간 아무런 작업을 하지않았음을 알리고

향후 5분간 idle time이 지속되면 system에 의해 logout된다는 메시지를 알리고 있다.

실제로 5분간 idle time이 지속될 때 해당 사용자는 logout이 된다.


15. idled의 주요구성파일 확인

DEST = /usr/local/bin/idled

CFDEST = /usr/local/lib/idled.cf

MDEST = /usr/local/man

LOGDEST = /var/log/idled.log
2005/07/01 14:57 2005/07/01 14:57

ncftp 사용법

FAQ 2005/07/01 14:56
1. NCFTP란

NcFTP는 NCEMRsoft사(ncftp.com)의 Mike Gleason이란 개발자가 만든 네트웍상에서의 파일전송 전용유틸리티라고 할 수 있다.

기존의 ftp 접속시에 불편했던 여러 가지 기능등을 몇가지 개선하여 배포되었다.

특히 한꺼번에 서브디렉토리까지 그대로 전송하는 기능과 visual한 인터페이스환경등은 기존의 ftp에서 특히 아쉬웠던 것으로 앞으로 네트웍상에서 ftp사용은 ncftp로 대체될 수도 있을 것이며, 차세대 ftp 유틸리티라고 할 수 있다.


이 유틸리티를 설명드리고자 하는 이유는 거의 대부분 유닉스나 리눅스등의 쉘상태에서 여러가지 작업을 하게되는데 특히 파일전송관련된 작업은 기존의 ftp명령보다는 ncftp가 편리하기 때문이다.

한가지 알아두셔야 하는것은 NCFTP는 PC등에서 서버로 전송하는 것은 불가능하며 인터넷에 연결되어 있는 서버에서 다른서버로 전송할때에만 사용할 수 있다.

PC에서 자기의 파일을 서버로 올리는 것은 ws_ftp나 cute_ftp등을 활용하시기 바란다.


2. NCFTP의 특징




FTP보다 사용자 인터페이스가 향상된 NCFTP의 특징은 한마디로 사용의 편리성과 훌륭한 인터페이스에 있다고 할 수 있다.

구체적인 특징은 다음과 같다.


한꺼번에 대량의 데이터전송시에 효과적이다.
서브디렉토리이하의 데이터를 한꺼번에 전송할 수 있다.
ftp명령어를 대부분 그대로 사용가능하다.
파일전송시에 각종 정보를 제공한다.
접속이 되지 않았을 때 자동으로 재접속할 수 있도록 해준다.
현재 위치하고 있는 리모트디렉토리의 경로를 표시해준다.
전송중 끊어진 파일의 이어받기 기능을 제공한다.
익명(Anonymous) 접속시 로그인절차를 자동으로 해준다.
현재 전송하고 있는 파일의 전송률을 막대그래프로 표시해 준다.
북마크기능이 있어 한번 접속한 곳을 다시 접속할때에는 간단히 이용할 수 있다.

3. NCFTP의 사용법




1. ncftp 접속모드로 들어가기 및 도움말 보기



ncftp> ?

Commands may be abbreviated. 'help showall' shows hidden and unsupported

commands. 'help ' gives a brief description of .

ascii bookmarks dir lls lrm pdir rename site

bgget cat get lmkdir lrmdir pls rhelp type

bgput cd help lookup ls put rm umask

bgstart chmod jobs lpage mkdir pwd rmdir version

bookmark debug lchmod lrename page quote show

ncftp>




ncftp를 사용하기 위해서는 ftp의 기본적인 사용법을 알고 계시면 더욱좋다.

만약 기본적인 ftp의 사용법에 대해서 확신이 서질 않는다면 앞장에 나오는 ftp의 사용법을 한번더 보시기 바란다.

그럼, 기본적인 ftp의 사용법에 대해서 알고계시다는 것을 전제로 하여 설명을 드리겠다.

먼저 ncftp로 다른 서버로 접속하는 방법은 다음과 같다.

먼저 다음의 예와 같이 쉘상에서 그냥 "ncftp"라고 하시면 아래와 같이 ncftp모드로 들어간다.



[myid@ns6 super]$ ncftp

NcFTP 3.0.0 beta 18 (February 19, 1999) by Mike Gleason.

ncftp>

ncftp>




보시는 바와 같이 ncftp라고 하시면 ncftp모드로 들어가게된다.

간단한 메시지를 보시면 ncftp의 현재 버전은 3.0.0이며 제작자가 Mike Gleason이라고 되어 있다.

ncftp에서 사용할 수 있는 명령어들을 보려면 "ncftp> ?" 또는 "ncftp? help"라고 하시면 아래와 같이 사용할 수 있는 명령어를 보실 수 있다.




ncftp> ? open

open: connects to a remote host.

Usage: open [-flags] [sitename]

Flags:

-a : Open anonymously.

-u XX : Login with username XX.

-p XX : Login with password XX.

-J XX : Login with account XX.

-P XX : Use port number X when opening.

Examples:

open sphygmomanometer.unl.edu

open -u mario bowser.nintendo.co.jp

ncftp>




위에서 보신 명령어들에 대한 사용법을 자세히 보시려면 간단히 "? 명령어"라고 하시면 보실 수 있다.

이들 명령어중 open이란 명령어에 대한 도움말을 보시려면 "? open"또는 "help open"이라고 하시면 다음과 같은 간단한 도움말을 보실 수 있다.

4. 익명(anonymous)접속하기




이제, 다른 서버로 접속을 해보도록 하겠다.

접속을 하기 위해서는 open이라는 ftp명령어를 사용한다.



ncftp> open mydomain.co.kr

Connecting to 211.112.112.112...

mydomain.co.kr FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.

Logging in...

Welcome to Kornet ftp hosting server

We are now here.



Guest login ok, access restrictions apply.

Logged in to mydomain.co.kr.

ncftp / >

ncftp / > dir

drwxr-xr-x 6 root root 4096 Oct 22 23:06 .

drwxr-xr-x 6 root root 4096 Oct 22 23:06 ..

d--x--x--x 2 root root 4096 Aug 11 20:37 bin

d--x--x--x 2 root root 4096 Aug 11 20:37 etc

drwxr-xr-x 2 root root 4096 Aug 11 20:37 lib

drwxr-sr-x 3 root ftp 4096 Oct 16 09:22 pub

-rw-r--r-- 1 root root 56 Aug 30 01:36 welcome.msg

ncftp / >




위의 예에서 보시는 바와 같이 "open IP-Address" 또는 "open 도메인"이라고 하시면 해당사이트로 anonymous접속을 자동으로 해준다.

기존의 ftp 에서는 anonymous접속을 위해서는 anonymous라는 ID와 패스워드로 자신의 email address를 입력해 줘야하지만 ncftp에서는 자동으로 익명접속(anonymous)을 해준다.

위의 예는 anonymous접속을 한 후에 dir이라는 명령어로 디렉토리의 내용을 본 것이다.

5. 자신의 홈디렉토리로 ncftp 접속하기

그렇다면 이번에는 익명접속이 아니라 정식사용자의 계정으로 접속을 해보도록 하겠다.

정식계정을 가진 사용자의 ID로 ncftp접속을 위해서는 "open -u 도메인"이라고 하시면 접속을 하실 수 있다.

접속을 하게 되면 자신의 홈디렉토리로 들어가게된다.

그런다음 원하는 파일과 디렉토리를 가져오기 하시면된다.




ncftp>

ncftp> open -u mydomain.co.kr

Username at mydomain.co.kr: sspark

Connecting to 211.112.112.112...

Password for user "sspark" at 211.112.112.112: *******


mydomain.co.kr FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.

Logging in...

User sspark logged in.

Logged in to mydomain.co.kr.

ncftp /home/sspark >

ncftp /home/sspark > dir

-rwx---r-x 1 504 sspark 513 Oct 29 23:42 index.html

-rw------- 1 504 sspark 7387 Dec 11 1998 install.pl

lrwxrwxrwx 1 0 root 8 Oct 13 00:19 linkfile -> linkfile

drwxr-xr-x 2 504 sspark 4096 Sep 14 17:34 logs

drwx--x--x 4 504 sspark 4096 Nov 1 21:53 public_html

ncftp /home/sspark >

ncftp /home/sspark >




앞절에서 보신 익명(anonymous)접속은 누구나 사용할 수 있는 ftp홈디렉토리(대부분 /home/ftp)로 접속을 하게되지만 아래와 같이 자신의 ID로 접속을 하면 ftp홈디렉토리가 아니라 자신의 홈디렉토리(대부분 /home/자신의ID)로 접속을 하게된다.


사용자의 계정으로 ncftp접속을 하려면 "open -u IP-Address" 또는 "open -u 도메인"이라고 하시면 된다.


위의 예와 같이 특정 사용자의 홈디렉토리로 접속을 하려면 -u 옵션(user)을 사용하시면된다.

현재 디렉토리를 표시해 주기 때문에 현재의 위치를 바로 알 수 있다는 것도 큰 장점이다.

6. 파일 전송 및 수신하기




이제 ncftp를 사용하는 근본적인 목적인 파일을 전송하고 수신하는 예를 들어보겠다.

파일을 전송하는 명령어는 일반 ftp와 같이 get 또는 put을 사용하시면 된다.

하지만 서브디렉토리까지 전송하거나 특정한 작업을 하기 위해서는 몇가지 옵션을 알아야만 한다.

아래의 몇가지 예를 보시기 바란다.




예1) 파일 하나만을 가져오기




ncftp ...ark/public_html/report > get *.html

browser.html: 5.71 kB 172.62 kB/s

day.html: 22.16 kB 435.59 kB/s

domain.html: 3.58 kB 218.96 kB/s

host.html: 5.74 kB 168.53 kB/s

hour.html: 8.10 kB 346.42 kB/s

index.html: 4.36 kB 192.74 kB/s

page.html: 10.48 kB 259.52 kB/s

reference.html: 5.71 kB 145.84 kB/s

ncftp ...ark/public_html/report >




예1과 같이 파일하나만을 가져오려면 "get 파일이름"이라고 하시면 된다.



ncftp /home/sspark > get index.html

index.html: 513.00 B 23.04 kB/s

ncftp /home/sspark >




예2) 여러개의 파일을 한꺼번에 가져오기


현재 디렉토리에 있는 여러개의 파일을 한번에 가져오려면 위와 같은 형식을 사용하시면 된다.

위와 같이 수신되고 있는 파일리스트를 모니터상에 보여주게 된다.




예3) (서브디렉토리를 포함한) 디렉토리전체를 한꺼번에 가져오기


이번에는 ncftp의 가장 강력한 기능인 전체 디렉토리를 한꺼번에 받아올 수 있는 것에 대해서 배워보도록 하겠다.

아마도 많은 분들이 ncftp를 이 기능 때문에 선호하는 것이 아닐까라고 생각한다.



ncftp /home/sspark > get -R *

.bashrc: 124.00 B 6.07 kB/s

.kderc: 966.00 B 43.10 kB/s

.screenrc: 3.42 kB 52.90 kB/s

중략

public_html (TAR): 1167360 bytes 716.21 kB/s

logs (TAR): 1648640 bytes 669.70 kB/s

aragornconv.pl: 1.66 kB 75.21 kB/s

install.pl: 7.21 kB 216.22 kB/s

wookiconv.pl: 2.14 kB 119.25 kB/s

index.html: 513.00 B 26.71 kB/s

.rhosts: 27.00 B 1.64 kB/s

get *: server said: Transfer complete.

ncftp /home/sspark >

7. 북마크(bookmark)기능 이용하여 간단히 접속하기




ncftp에는 또다른 특별한 기능이 있다.

우리가 흔히 웹브라우즈에서 사용하는 북마크기능을 ncftp에서도 사용할 수가 있다.

다음의 예를 보시기 바란다.



ncftp> open mydomain.co.kr

Connecting to 211.112.112.112...

mydomain.co.kr FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.

Logging in...

Welcome to Kornet ftp hosting server

We are now here.



Guest login ok, access restrictions apply.

Logged in to mydomain.co.kr.

ncftp / >

ncftp / > dir

drwxr-xr-x 6 root root 4096 Oct 22 23:06 .

drwxr-xr-x 6 root root 4096 Oct 22 23:06 ..

d--x--x--x 2 root root 4096 Aug 11 20:37 bin

d--x--x--x 2 root root 4096 Aug 11 20:37 etc

drwxr-xr-x 2 root root 4096 Aug 11 20:37 lib

drwxr-sr-x 3 root ftp 4096 Oct 16 09:22 pub

-rw-r--r-- 1 root root 56 Aug 30 01:36 welcome.msg

ncftp / > quit


You have not saved a bookmark for this site.

Would you like to save a bookmark to:

ftp://mydomain.co.kr


Save? (yes/no) yes

Enter a name for this bookmark, or hit enter for "super": super

Bookmark "super" saved.




위의 예에서는 mydomain.co.kr이란 서버로 접속을 한후에 "quit"이란 명령어로 빠져나오려 할 때 ncftp에서는 북마크가 되어있지 않으니 북마크를 하라는 메시지와 함께 "Save? (yes/no) yes"와 같이 저장할 의사를 묻고 있다.

"yes"를 입력하면 북마크로 사용할 이름을 입력받는다.

그냥 enter키를 치면 접속시에 사용했던 호스트네임으로 북마크를 해주며, 다른이름을 사용하려면 입력하는 그이름으로 북마크저장이 된다.


그럼, 이렇게 저장한 북마크를 어떻게 사용할까?

저장된 북마크로 다시 이 서버로 접속을 할 때에는 "open 북마크이름"으로만 하시면 북마크에 저장된 서버정보(IP-Address 또는 도메인)와 ID, 패스워드를 사용하여 자동접속을 해준다.



[myid@ns6 myid]$ ncftp

NcFTP 3.0.0 beta 18 (February 19, 1999) by Mike Gleason.

ncftp>

ncftp> open super

Connecting to 211.112.112.112...

mydomain.co.kr FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.

Logging in...

Welcome to Kornet ftp hosting server

We are now here.


Guest login ok, access restrictions apply.

Logged in to mydomain.co.kr.

ncftp / >





위의 예와같이 북마크를 사용하실때에는 간단히 북마크이름만 주시면 자동접속을 해준다.

네트웍상에서 많은 서버를 관리하거나 사용하실때에는 이와같이 ncftp 북마크를 사용하시면 매우 편리하다.

ncftp는 아직 일반에겐 많이 알려져있지는 않지만 서버관리자나 네트웍작업을 많이 하시는 분들에겐 꽤 유명한 유틸리티이다.
2005/07/01 14:56 2005/07/01 14:56

bzip2, bunzip2 사용하기

FAQ 2005/07/01 14:55
bzip2라는 유틸리티는 gzip보다 압축효율이 좋아서 차세대 압축유틸리티로 좋은 평을 받고 있는 유틸리티입니다.

사용하는 방법은 gzip과 거의 유사하며 압축된 후의 파일 끝에 .bz2라고 붙여줍니다.

예를 들어보겠습니다.



[sspark@nice dat]$ ls -l

total 40

-rw-rw-r-- 1 sspark sspark 40960 Jan 27 11:34 myhome.tar

[sspark@nice dat]$

[sspark@nice dat]$ bzip2 myhome.tar

[sspark@nice dat]$

[sspark@nice dat]$ ls -l

total 8

-rw-rw-r-- 1 sspark sspark 4389 Jan 27 11:34 myhome.tar.bz2




위의 예는 myhome.tar로 묶여진 파일을 bzip2로 압축을 한 것입니다.

압축후에는 파일 끝에 .bz2라는 것이 붙게됩니다.


다음은 bzip2로 압축된 것을 해제한 예입니다.




[sspark@nice dat]$ bunzip2 myhome.tar.bz2

[sspark@nice dat]$

[sspark@nice dat]$ ls -l

total 40

-rw-rw-r-- 1 sspark sspark 40960 Jan 27 11:34 myhome.tar
2005/07/01 14:55 2005/07/01 14:55
tar와 gzip을 한번에
tar와 gzip을 동시에 할 수 있는 방법이 있으며 이는 tar의 옵션으로 다음과 같이 사용하실 수 있습니다.

이런작업을 하시려면 원래 사용하시던 tar의 옵션에 z라는 옵션을 추가해서 사용하시면 됩니다.

즉, 다음과 같은 사용하시면 됩니다.




묶고 압축할 때 : $ tar cvfz 압축파일.tar.gz 압축대상파일 및 디렉토리

압축해제와 묶음풀 때 : $ tar xvfz 압축파일.tar.gz




[sspark@nice dat]$ ls -l

total 44

-rw-r--r-- 1 sspark sspark 5847 Jan 27 10:37 browser.html

-rw-r--r-- 1 sspark sspark 5879 Jan 27 10:37 host.html

-rw-r--r-- 1 sspark sspark 8295 Jan 27 10:37 hour.html

-rw-r--r-- 1 sspark sspark 858 Dec 7 04:02 log.range

-rw-r--r-- 1 sspark sspark 10733 Jan 27 10:37 page.html

[sspark@nice dat]$

[sspark@nice dat]$ tar cvfz myhome.tar.gz *

browser.html

host.html

hour.html

log.range

page.html

[sspark@nice dat]$

[sspark@nice dat]$ ls -l

total 52

-rw-r--r-- 1 sspark sspark 5847 Jan 27 10:37 browser.html

-rw-r--r-- 1 sspark sspark 5879 Jan 27 10:37 host.html

-rw-r--r-- 1 sspark sspark 8295 Jan 27 10:37 hour.html

-rw-r--r-- 1 sspark sspark 858 Dec 7 04:02 log.range

-rw-rw-r-- 1 sspark sspark 4212 Jan 27 11:21 myhome.tar.gz

-rw-r--r-- 1 sspark sspark 10733 Jan 27 10:37 page.html




tar로 파일을 묶을 때에는 cvf라는 옵션을 사용합니다.

이때 묶음과 동시에 gzip으로 압축을 하려면 z라는 옵션을 함께사용하여 cvfz라는 옵션을 사용하시면 묶음과 동시에 압축까지 해주게 됩니다.

옵션의 편리함 때문에 요즘에는 이런 방법을 많이 사용하고 있습니다.


이번에는 압축된 myhome.tar.gz파일을 한번에 풀고 해제해주는 예를 들었습니다.

tar로 풀어줄 때에는 xvf라는 옵션을 사용합니다.

풀어줌과 동시에 압축해제까지 하려면 이 옵션과 함께 z라는 옵션을 함께 사용하여 xvfz라는 옵션을 사용하시면 됩니다.


[sspark@nice dat]$

[sspark@nice dat]$ tar xvfz myhome.tar.gz

browser.html

host.html

hour.html

log.range

page.html
2005/07/01 14:55 2005/07/01 14:55
해킹당한 명령어들 rpm 명령으로 (강제) 재설치하기



해킹을 당하게 되면 주로 root가 시스템관리를 위해서 자주사용하는 아래와 같은 명령어들이 동일한 이름의 다른 명령어로 대체되는 경우가 허다하다.

"/usr/bin"
"/usr/bin/find"
"/usr/bin/last"
"/usr/bin/top"
"/usr/bin/uptime"
"/usr/bin/w"
"/usr/bin/who"

따라서 이런 경우에 이런 명령어들을 재설치해야하는데, 가장 쉬운 방법이 신뢰성있는 ftp등의 사이트에서 rpm 패키지소스를 다시 가져와서 재설치해야 할 것이다.

그런데, rpm -Uvh등으로 재설치를 하려면 패키지의존성 때문에 재설치가 불가한 경우가 많다.

물론, 의존성있는 모든 패키지들을 하나씩 찾아서 재설치해주면 되지만, 보통작업이 아니므로 여기서는 필요한 패키지만을 강제적으로 재설치하는 방법(옵션)을 알아보도록 하겠다.



아래의 예를 보자.

[root@kebia_1 sspark]# rpm -Uvh procps-2.0.7-3.i386.rpm
package procps-2.0.7-3 is already installed
[root@kebia_1 sspark]#

위의 예처럼, ps라는 명령어를 재설치하기 위해서 Uvh라는 옵션으로 재설치하려했더니 이미 설치되어 있다고 나왔다.

그래서 rpm -qa라는 명령어로 ps와 관련된 패키지를 찾아서 패키지를 삭제하려 하였다.

[root@kebia_1 sspark]#
[root@kebia_1 sspark]# rpm -qa | grep ps
pspell-0.11.2-1
tetex-dvips-1.0.7-7
ypserv-1.3.11-9
procps-2.0.7-3
psmisc-19-4
psgml-1.2.1-8
[root@kebia_1 sspark]#
[root@kebia_1 sspark]# rpm -e procps-2.0.7-3
error: removing these packages would break dependencies:
procps >= 2.0.6-5 is needed by initscripts-5.49-1
libproc.so.2.0.7 is needed by rusers-server-0.17-6
[root@kebia_1 sspark]#


그랬더니, 위와 같이 패키지 의존성에러가 발생한다.

물론, 이 패키지들을 모두 찾아서 재설치할 수도 있으나, 너무 번거로운 작업이다.



이런 경우에 다음의 예와 같이 --force라는 옵션으로 원하는 패키지를 강제적으로 재설치할 수 있다.

[root@kebia_2 /root]# rpm -Uvh --force procps-2.0.7-3.i386.rpm
procps ##################################################
[root@kebia_2 /root]#



참고로 해당 명령어와 관련된 패키지를 찾는 rpm명령어는 다음과 같습니다.

예를 들어 ps라는 명령어와 관련된 패키지를 찾으려면 다음과 같습니다.

[root@kebia_1 sspark]# rpm -qf /bin/ps
procps-2.0.7-3
[root@kebia_1 sspark]#

이를 점검했다면 이 패키지가 설치했던 파일들을 알아볼 필요가 있겠지요..

다음과 같은 옵션을 사용하면 간단히 볼 수 있죠..

[root@kebia_2 report]# rpm -ql procps-2.0.7-3
/bin/ps
/etc/X11/applnk/Utilities/top.desktop
/lib/libproc.so.2.0.7
/sbin/sysctl
/usr/bin/free
/usr/bin/oldps
/usr/bin/pgrep
/usr/bin/pkill
/usr/bin/skill
/usr/bin/snice
/usr/bin/tload
/usr/bin/top
/usr/bin/uptime
/usr/bin/vmstat
/usr/bin/w
/usr/bin/watch
/usr/share/doc/procps-2.0.7
/usr/share/doc/procps-2.0.7/BUGS
/usr/share/doc/procps-2.0.7/NEWS
/usr/share/doc/procps-2.0.7/TODO
/usr/share/man/man1/free.1.gz
/usr/share/man/man1/oldps.1.gz
/usr/share/man/man1/pgrep.1.gz
/usr/share/man/man1/pkill.1.gz
/usr/share/man/man1/ps.1.gz
/usr/share/man/man1/skill.1.gz
/usr/share/man/man1/snice.1.gz
/usr/share/man/man1/tload.1.gz
/usr/share/man/man1/top.1.gz
/usr/share/man/man1/uptime.1.gz
/usr/share/man/man1/w.1.gz
/usr/share/man/man1/watch.1.gz
/usr/share/man/man5/sysctl.conf.5.gz
/usr/share/man/man8/sysctl.8.gz
/usr/share/man/man8/vmstat.8.gz
[root@kebia_2 report]#
2005/07/01 14:54 2005/07/01 14:54
서버2에서 서버1의 데이터를 FTP로 가져와 백업하기

작업내용 : 서버2에서 매일(/etc/cron.daily/autoftp) 서버1로 ftp접속을 하여(/home/sspark/.autoftp.sh, /home/sspark/.ftpscript) 백업할 데이터들을 가져온후에 서버2에 날짜형식을 가진 디렉토리를 생성하여 저장하고, 서버1의 원본데이터는 삭제한다.

서버1에서는 매일매일 백업일 하기위해 /etc/cron.daily/NICE-daily-backup에서 /sbin/NICEBACKUP파일을 실행시켜 이 파일에 있는 내용대로 매일매일 백업이 되고 있다.





서버1에서 매일 백업되는 내용

다음과 같이 서버1의 /sbin/NICEBACKUP에는 백업해야할 내용에관한 명령어들이 들어있다.

[root@kebia_1 /root]# cat /sbin/NICEBACKUP
#!/bin/bash
#APACHE Server BACKUP
tar cvfpz /home/sspark/BACKUP/usr_local_apache.tar.gz /usr/local/apache
#Mysql DB Full BACKUP
tar cvfpz /home/sspark/BACKUP/usr_local_mysql.tar.gz /usr/local/mysql
#Filesystem BACKUP
tar cvfpz /home/sspark/BACKUP/etc.tar.gz /etc
tar cvfpz /home/sspark/BACKUP/var.tar.gz /var
tar cvfpz /home/sspark/BACKUP/home.tar.gz /home
#Mysql file BACKUP
/usr/local/mysql/bin/mysqldump -uroot -p11111 mysql > /home/sspark/BACKUP/mysql.sql
/usr/local/mysql/bin/mysqldump -uroot -p11111 kebia > /home/sspark/BACKUP/kebia.sql
chown -R sspark:sspark /home/sspark/BACKUP



아래와 같이 서버1에는 위의 백업을 매일 하기위해 /etc/cron.dailly에 NICE-daily-backup이란 파일이 존재한다.

[root@kebia_1 /root]# cat /etc/cron.daily/NICE-daily-backup
echo "NICE KOREA BACKUP"
echo `date`
/sbin/NICEBACKUP
echo "BACKUP is completed"
[root@kebia_1 /root]#



서버1에는 매일 아래 디렉토리에 다음과 같이 백업이 되고 있다.

[root@kebia_1 BACKUP]# pwd
/home/sspark/BACKUP
[root@kebia_1 BACKUP]# ll
-rw-r--r-- 1 sspark sspark 1514583 Apr 1 04:04 115.co.kr.tar.gz
-rw-r--r-- 1 sspark sspark 9263 Apr 1 04:05 chapter.co.kr.tar.gz
-rw-r--r-- 1 sspark sspark 12996153 Apr 1 04:05 e-gain.co.kr.tar.gz
-rw-r--r-- 1 sspark sspark 556780 Apr 1 04:04 etc.tar.gz
-rw-r--r-- 1 sspark sspark 2007684 Apr 1 04:04 imt-2000.co.kr.tar.gz
-rw-r--r-- 1 sspark sspark 11236021 Apr 1 04:04 nicekorea.co.kr.tar.gz
-rw-r--r-- 1 sspark sspark 32128 Apr 1 04:04 owner.co.kr.tar.gz
-rw-r--r-- 1 sspark sspark 2150591 Apr 1 04:04 picasso.co.kr.tar.gz
-rw-r--r-- 1 sspark sspark 3624831 Apr 1 04:04 sajik.com.tar.gz
-rw-r--r-- 1 sspark sspark 94379928 Apr 1 04:04 usr_local.tar.gz
-rw-r--r-- 1 sspark sspark 4471105 Apr 1 04:04 var.tar.gz
[root@kebia_1 BACKUP]#





서버2에는 서버1의 데이터를 매일 가져오기위해 /etc/cron.daily에서 매일실행하는 스크립트 autoftp가 아래와 같이 있다.

[root@kebia_2 /root]#
[root@kebia_2 /root]# cat /etc/cron.daily/autoftp
#!/bin/bash
/home/sspark/.autoftp.sh
[root@kebia_2 /root]#



서버2에 만들어져야할 파일2개

autoftp.sh : ftp실행파일

ftpscript : ftp명령어들



[root@kebia_2 sspark]# cat autoftp.sh
#!/bin/bash
ftp -n 211.220.193.181 < ./ftpscript
export backupdir=`date '+%y-%m-%d.%H-%M'`
mkdir /home/sspark/BACKUP/$backupdir
mv /home/sspark/tmp/* /home/sspark/BACKUP/$backupdir
[root@kebia_2 sspark]#



[root@kebia_2 sspark]# cat ftpscript
user sspark 11111
cd /home/sspark/BACKUP
lcd /home/sspark/tmp
bin
prompt
mget *.tar.gz
mdelete *.tar.gz
bye
[root@kebia_2 sspark]#



서버1에는 cron.daily에 /sbin/NICEBACKUP등으로 매일 또는 매주 또는 매월백업을 자동으로 되고 있어야한다.
서버1의 /home/sspark/BACKUP/200104010303 형식으로 디렉토리를 생성하게되어 저장된다.
그런후에는 서버1의 데이터를 삭제한다.



작업완료후에 서버2에는 서버1의 내용이 백업되어 있다.



[root@kebia_2 01-04-01.05-45]# pwd
/home/sspark/BACKUP/01-04-01.05-45
[root@kebia_2 01-04-01.05-45]# ll
-rw-r--r-- 1 root root 1514583 Apr 1 05:36 115.co.kr.tar.gz
-rw-r--r-- 1 root root 9263 Apr 1 05:36 chapter.co.kr.tar.gz
-rw-r--r-- 1 root root 12996153 Apr 1 05:37 e-gain.co.kr.tar.gz
-rw-r--r-- 1 root root 556780 Apr 1 05:37 etc.tar.gz
-rw-r--r-- 1 root root 2007684 Apr 1 05:37 imt-2000.co.kr.tar.gz
-rw-r--r-- 1 root root 11236021 Apr 1 05:38 nicekorea.co.kr.tar.gz
-rw-r--r-- 1 root root 32128 Apr 1 05:38 owner.co.kr.tar.gz
-rw-r--r-- 1 root root 2150591 Apr 1 05:38 picasso.co.kr.tar.gz
-rw-r--r-- 1 root root 3624831 Apr 1 05:38 sajik.com.tar.gz
-rw-r--r-- 1 root root 94379928 Apr 1 05:45 usr_local.tar.gz
-rw-r--r-- 1 root root 4471105 Apr 1 05:45 var.tar.gz
[root@kebia_2 01-04-01.05-45]#



서버2에서 ftp접속 및 작업이 끝난후 서버1의 내용(즉, 원본파일은 지워지게 된다.)

[root@kebia_1 BACKUP]# pwd
/home/sspark/BACKUP
[root@kebia_1 BACKUP]# ll
[root@kebia_1 BACKUP]#
2005/07/01 14:53 2005/07/01 14:53
시스템부팅(리스타트)시 quota체크및 quota구동시키기

다음은 부팅시 실행할 스크립트인 /etc/rc.d/rc.local 스크립트에 다음과 같은 설정을 해야한다.

아래의 설정은 시스템이 부팅하면서 quota가 설정된 파티션(파일시스템)을 자동으로 인식하고 quota를 가동시킨 것이다.

즉, quota 체크프로그램인 quotacheck를 실행시킨 것이며 quota가동 프로그림인 quotaon을 가동시키는 스크립트이다.

# quota를 체크한후에 quota를 구동합니다.

if [ -x /sbin/quotacheck ]; then

echo "Checking quotas. This may take some time..."

sbin/quotacheck -avug

echo " Done."

fi

if [ -x /sbin/quotaon ]; then

echo "Enabling disk quota .."

/sbin/quotaon -avug

echo " Done."

fi
2005/07/01 14:52 2005/07/01 14:52
NICE명령으로 실행되고 있는 프로세스 우선순위 변경하기



***************nice적용으로 프로그램실행하기***********



nice - run a program with modified scheduling priority



SYNOPSIS(개략,개요)

nice [OPTION]... [COMMAND [ARG]...]



DESCRIPTION

Run COMMAND with an adjusted scheduling priority. With no

COMMAND, print the current scheduling priority. ADJUST is

10 by default. Range goes from -20 (highest priority) to

19 (lowest).



-ADJUST

increment priority by ADJUST first



-n, --adjustment=ADJUST

same as -ADJUST



--help display this help and exit



실사용예



nice --adjustment=-20 /usr/local/aw/aw-parser.pl

nice --adjustment=-20 /usr/local/aw/aw-report.pl

nice -20 /usr/local/aw/aw-report.pl

nice --help
2005/07/01 14:52 2005/07/01 14:52
목적 : 그룹별로 계정을 생성하여 여러가지(특히 메일)을 사용케 하려면

해결 방법

(모든 작업은 root권한으로 한다.)

1. 먼저 useradd로 생성되는 디폴트사항을 확인한다.

[root@owner /root]# useradd -D

GROUP=100

HOME=/home

INACTIVE=-1

EXPIRE=

SHELL=/bin/bash

SKEL=/etc/skel

[root@owner /root]#

여기를 보면 HOME=/home 이라고 되어 있는 부분때문에

useradd로 계정을 생성하면 홈디렉토리가 /home아래에 만들어짐..

따라서 기본 홈디렉토리를 변경해주면 됨.


2. 먼저 사용할그룹의 디렉토리(예, groupone)를 만든다.

[root@owner /home]# mkdir /home/groupone


3. 기본 홈디렉토리를 변경한다. 다음과 같이

[root@owner /home]# useradd -D -b /home/groupone

[root@owner /home]#


4. 변경된 사항을 확인한다.

[root@owner /home]# useradd -D

GROUP=100

HOME=/home/groupone

INACTIVE=-1

EXPIRE=

SHELL=/bin/bash

SKEL=/etc/skel

[root@owner /home]#

여기서 변경된 부분은 HOME=/home/groupone 임.

이제부터 생성되는 모든 계정은 이 /home/groupone 밑에서 만들어짐.


5. 계정생성 테스트

[root@owner /home]# useradd newuser

[root@owner /home]#


6. 생성된 홈디렉토리 확인

[root@owner /home]# ls -l /home/groupone

total 4

drwx------ 2 newuser newuser 4096 Jul 3 16:43 newuser

[root@owner /home]#


7. 자동 생성된 /etc/passwd 확인

[root@owner /home]# cat /etc/passwd

newuser:!!:506:506::/home/groupone/newuser:/bin/bash

[root@owner /home]#
2005/07/01 14:51 2005/07/01 14:51
/etc/nologin은 모든사용자들에 대해 로그인을 못하도록 설정하는 것입니다.

그렇다면 특정사용자에 대한 일시적인 로그인을 막기위해서는 어떻게 설정해야 할까요?

예를들어 이렇게 가정해 볼 수 있습니다.

가장 현실적인 예로서 쉘서비스를 해야하는 웹호스팅서비스를 하고 있는 서버에서 어떤 가입자가 특정시점까지 일시적으로 이용중지를 신청했다고 할 때에 어떻게 설정해야하는가에 대한 예가 될 수 있습니다.

이런 경우에는 시스템에 설정되어 있는 일시정지를 신청했던 가입자의 모든 셋팅정보 및 가입자의 데이터는 그대로 둔채로 그 가입자의 로그인만을 제한해야할 것입니다.

자, 그럼 시스템에 어떤 설정을 해야할까요?

다음이 그 해답이 될 수 있습니다.

/etc/shadow 의 패스워드 필드에 "*"를 해둡니다.
만약, shadow패스워드를 사용하지 않는 시스템이라면(사실 요즘, 이런 시스템이 있을까요?) /etc/passwd파일의 패스워드 필드에 "*"를 해두면 됩니다.
웹호스팅서비스가입자라면 그 가입자의 홈페이지가 뜨지 않도록 아파치의 환경파일(httpd.conf)파일에 그 가입자의 가상호스트설정을 주석처리해야할 것입니다.
이때부터 이 가입자는 로그인을 하지 못하게 되며, 홈페이지가 뜨지 않게 되겠죠..
2005/07/01 14:51 2005/07/01 14:51
정기적인 시스템점검이나 일시적인 장애상황의 경우에 일시적으로 로그인을 허용하지 않으려고할 때에는 /etc/nologin이란 파일을 만들어두면 로그인한 즉시 이 파일의 내용을 보여준후에 로그인을 허용하지 않습니다.

다음의 예는 일시적으로 로그인을 허용하지 않으려는 시스템에서 만들어둔 /etc/nologin파일의 내용입니다.

# cat /etc/nologin
it is time to check for our system.
another user can't login
try again after 15 min.

참고로, 시스템을 원격지에서 관리할 경우에 이 파일을 만들어둔후에 삭제하지 않고 빠져나온다면, 관리자마저도 이 시스템에 로그인하지 못한다는 것을 염두에 두시기 바랍니다.

일시적인 시스템점검이 끝난후에는 반드시 /etc/nologin파일을 지우고 빠져나오길 바랍니다.
2005/07/01 14:50 2005/07/01 14:50