시스템관리에 있어서 정기적으로 확인 및 점검해야 할 사항중에 가장 중요한 것이 있다. 시스템에 이상이 있거나 보안의 위험을 감지하기 위해서는 시스템에서 남겨지는 메시지를 확인해야 한다. 모든 시스템에는 작업이 있고 난 후에는 반드시 로그가 남겨지며, 관리자는 이를 정기적으로 점검을 해야한다. 시스템에 이상이 생겼을 때 혹은 보안이 뚫려서 해킹을 당했을 때 이에 대한 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