본문 바로가기

StoreHouse/Server

RedHat 시스템보안관련

시스템보안관련 2003/11/20


10. 시스템
보안




더 강력한 패스워드 : Shadowpassword



PAM(Pluggable AuthenticationModules) - 장착식 인증모듈



Log 파일 찾아보기



SUID,SGID/파일속성



보안관련 정책




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


10.
시스템 보안
KLDP 링크 -> Security
HOWTO - 장범수/박민석/유성태


KLDP 링크 -> Shadow
Password HOWTO - 조용일




더 강력한 패스워드 : Shadow password



Shadow password system은 현재 거의
모든 UNIX/Linux에서 기본으로 장착하고 있는 패스워드 시스템이다. 레드헷
리눅스에서는 기본으로 패키지는 제공하지만 처음부터 사용되지는 않으므로
명령으로 가능하게 만들어 주어야 한다. 만일 레드헷 6를 사용하는 경우라면
설치할 때 쉐도우 패스워드와 MD5(해커스랩
링크) 모듈을 사용할 것인지에 대해서 물어보게 되는데 이 때 선택하면
된다.


쉐도우 패스워드는 기존의 login
password를 보완한 것으로, 기존의 시스템에서는 /etc/passwd라는
모든 사용자의 패스워드가 들어있는 파일이 모든 유저에게
읽기 가능하다는 단점이 있었다.


[bluesky@bluestar bluesky]# ls
-l /etc/passwd

-rw-r--r--
1 root root 930 Mar 4 02:40 /etc/passwd


물론 패스워드가 암호화되어 있긴 하지만
이 파일이 외부에 노출될 경우 패스워드 크랙툴(CrackJack/Ntucrack/John the
ripper 등등)을 사용하면 쉽게 루트의 패스워드까지 크랙할 수 있기 때문에
문제가 되었다.


이러한 단점을 보완하기 위해서 암호화된
패스워드를 저장하는 shadow라는 파일을 만들고
여기에 따로 사용자들의 패스워드를 저장하게 하고, 이 shadow 파일은 일반
사용자들은 읽지 못하며, root로 읽을 수 있게 한 것이다.

기존의 /etc/passwd파일에서 패스워드가
들어갈 자리는 'x'로 대치되므로 이 /etc/passwd 파일이 외부에 노출되더라도
문제가 없게 되는 것이다.


만일 패스워드 시스템을 쉐도우 패스워드
시스템으로 바꾸시려는 경우 pwconv 명령을 사용한다.
쉐도우 패스워드 시스템을 사용하지 않는 경우는 /etc/shadow 파일은 존재하지
않게 되며, /etc/passwd 파일에 사용자들의 암호화된 패스워드가 패스워드 필드에
존재하게 된다.


[bluesky@bluestar bluesky]# ls
-l /etc/shadow

ls: /etc/shadow:
No such file or directory

[bluesky@bluestar bluesky]# ls
-l /etc/passwd

-rw-r--r-- 1 root root 1036 Mar 5 02:36
/etc/passwd

[bluesky@bluestar bluesky]# cat
< /etc/passwd


root:$1$UTGjDy$ccol4tVwSzVdeTGWHg.9l/:0:0:root:/root:/bin/bash

bin:*:1:1:bin:/bin:

daemon:*:2:2:daemon:/sbin:

adm:*:3:4:adm:/var/adm:

....

....

bluesky:$1$MnPxS9$7ES4F1K/bNH0WZCC2vKUi0:501:501:박정근:/home/bluesky:/bin/bash

linuxer:!!:503:503::/home/linuxer:/bin/bash



[bluesky@bluestar bluesky]#


이제 쉐도우 패스워드 시스템으로 바꾸려면,

[bluesky@bluestar bluesky]# pwconv


이렇게 바꾸고 나면 아래와 같이 /etc/shadow
파일이 생기게 됩니다..기존의 /etc/passwd 파일의 패스워드 필드는 'x'로 대치되고
암호화된 패스워드는 /etc/shadow 파일에 있게 됩니다.

[bluesky@bluestar bluesky]# ls
-l /etc/shadow

-r-------- 1
root root 781 Mar 5 02:42 /etc/shadow

[bluesky@bluestar bluesky]# ls
-l /etc/passwd

-rw-r--r-- 1 root root 930 Mar 5 02:42
/etc/passwd

[bluesky@bluestar bluesky]#


[bluesky@bluestar bluesky]# cat
< /etc/passwd


root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:

daemon:x:2:2:daemon:/sbin:

adm:x:3:4:adm:/var/adm:

....

....

bluesky:x:501:501:박정근:/home/bluesky:/bin/bash

linuxer:x:503:503::/home/linuxer:/bin/bash






[bluesky@bluestar bluesky]# cat
< /etc/shadow


root:$1$UJGjDy$ccol4tVwSzVdeTGWHg.9l/:11020:0:99999:7:::

bin:*:11020:0:99999:7:::

daemon:*:11020:0:99999:7:::

adm:*:11020:0:99999:7:::

....

....

bluesky:$1$MnPxS9$7ES4F1K/bNH0WZCC2vKUi0:11020:0:99999:7:::

linuxer:!!:11020:0:99999:7:::



[bluesky@bluestar bluesky]#


다시 쉐도우 패스워드 시스템이 아닌 예전의
login 패스워드 시스템으로 돌아갈려면 pwunconv
명령을 사용하면 된다.


[bluesky@bluestar bluesky]# pwunconv

[bluesky@bluestar bluesky]# ls
-l /etc/shadow

ls: /etc/shadow:
No such file or directory

[bluesky@bluestar bluesky]# ls
-l /etc/passwd

-rw-r--r-- 1 root root 1036 Mar 5 04:38
/etc/passwd






PAM(Pluggable Authentication Modules) -
장착식 인증 모듈



- PAM(Pluggable Authentication Modules)
- 장착식 인증 모듈

레드헷 리눅스에는 PAM(Pluggable Authentication
Modules)이라는 패키지로 장착이 가능한 인증 모듈이 있다. 이 인증 모듈은
새로운 인증 기법이나 추가 기법을 사용하기 위해서 바이너리 파일을 다시 컴파일할
필요가 없이 설치만으로 간편하게 업그레이드가 가능하고 쉽게 바꿀 수 있다.


PAM은 캡슐화를 지원하여 인증법, 제한사항,
지역 인증법에 캡슐화를 사용할 수 있다. 이 캡슐화는 리눅스에서 좀 더 높은
보안과 관리를 위해서는 꼭 알아두어야 한다.

자세한 내용은 PAM 웹싸이트 http://www.kernel.org/pub/linux/libs/pam/index.html을
보기 바란다.




PAM으로는 아래와 같은 작업을 하게 된다.







패스워드에 비(非)
DES 암호화 방법을 쓴다. (패스워드를 부르트 포스공격을 써서 풀어내는
것이 어렵게 된다.) 부르트 포스 공격(brute force attack)이란 crack이나 John
the ripper 같은 크랙툴을 사용하여 가능성이 높은 패스워드를 무작위로 집어넣어서
알아내는 방법이다.



사용자들이 쓸 수 있는 (프로세스 수, 메모리의
양 등의) 자원을 제한하는 방법을 써서 서비스 거부식 공격(DoS : Denial of
Service)을 막을 수 있다.



패스워드를 쉐도우로 감추는 것을 쉽게 할
수 있도록 한다.



특정한 사용자가 특정한 시간에 특정한 장소에서만
로그인할 수 있도록 제한 조정하는 것이 가능하다.




시스템을 설치하고 조정하기 시작한 지
몇 시간 안으로, 공격 시도 시점에서 막을 수 있다. 예를 들면, .rhosts 파일을
시스템 전체용으로 사용자 홈 디렉토리에서 사용하는 것을 막기 위해서 다음을
/etc/pam.d/login에 PAM을 사용해서 넣을 수
있다.




#

# Disable rsh/rlogin/rexec for users

#

login auth required pam_rhosts_auth.so
no_rhosts










Log 파일 찾아보기



리눅스/유닉스
시스템에서는 기본적으로 모든 행동에는 자취가 남게 된다. 이 자취는
모든 것이 기록이 되어 로그파일로 남는것을 의미하는데, 로그파일이란 시스템의
작동중에 시스템을 감시하기 위해서 기록해 두는 파일들이다.

따라서 어떤 사용자가 어떤 행동을 취했는지
어디서 누가 시스템에 접근했는지, 누가 무슨 파일을 전송해 가져 갔는지를
알 수 있게 된다. 따라서 로그파일을 분석해보면 보안에 상당한 도움이 된다.




[로그파일 디렉토리 - /var/log]

리눅스에서 대부분의 로그파일은 /var/log에
저장된다. 가끔 소스파일이나 어떤 시스템에서는 /var/adm 디렉토리를 사용하는
경우도 있지만 대부분의 리눅스 시스템에서는 /var/adm 디렉토리는 사용되지
않는다.

예전에는 /var/adm 디렉토리를 대부분
사용했으나 최근에는 /var/log에는 로그파일을, /var/run에는 프로그램 실행기록
및 잠금파일들을 담고 있다.









로그파일의 위치, 이름



레드헷 리눅스 시스템에서는 기본적으로
모든 시스템 관련된 기본 로그파일이 저장되는 곳이 /var/log로
되어 있다. 웹서버나 기타 다른 서버들은 다른 곳에 로그파일이 위치할 수도
있다. 기본적으로 레드헷 패키지에서 설치되는 웹서버의 로그파일은 /var/log/httpd
디렉토리에 기록이 남게 되어 있다.


[/var/log, /var/log/httpd]






/var/log에는 많은 로그파일들이 존재하는데,
이 중에는 부팅메시지 관련 로그파일인 dmesg가 존재한다.




/var/log/dmesg



이 로그파일은 부팅 메시지로 부팅시에 어떤
형태의 하드웨어를 가지고 있고 어떻게 인식되었는지를 알 수 있는 로그파일이다.
일단 내용을 보면 아래와 같으며, 내용은 사용자에 따라 다르게 나올 것이다.


[bluesky@bluestar log]# cat
< dmesg

Linux version 2.2.9-19mdk (root@data.mandrakesoft.com)
(gcc version pgcc-2.91.66 19990314 (egcs-1.1.2 release)) #1 Wed May 19
19:53:00 GMT 1999

Detected 149692968 Hz processor.

Console: colour VGA+ 80x25

Calibrating delay loop... 149.09 BogoMIPS

Memory: 63236k/65536k available (956k
kernel code, 408k reserved, 888k data, 48k init)

VFS: Diskquotas version dquot_6.4.0
initialized

CPU: Intel Pentium Pro stepping 02

Checking 386/387 coupling... OK, FPU
using exception 16 error reporting.

Checking 'hlt' instruction... OK.

POSIX conformance testing by UNIFIX

mtrr: v1.34 (19990310) Richard Gooch
(rgooch@atnf.csiro.au)

PCI: PCI BIOS revision 2.10 entry at
0xfb2b0

PCI: Using configuration type 1

PCI: Probing PCI hardware

PCI: 00:00 [8086/1237]: Passive release
enable (00)

Linux NET4.0 for Linux 2.2

Based upon Swansea University Computer
Society NET3.039

NET4: Unix domain sockets 1.0 for Linux
NET4.0.

NET4: Linux TCP/IP 1.0 for NET4.0

IP Protocols: ICMP, UDP, TCP, IGMP

Initializing RT netlink socket

Starting kswapd v 1.5

Detected PS/2 Mouse Port.

Serial driver version 4.27 with MANY_PORTS
MULTIPORT SHARE_IRQ enabled

ttyS00 at 0x03f8 (irq = 4) is a 16550A

ttyS01 at 0x02f8 (irq = 3) is a 16550A

pty: 256 Unix98 ptys configured

apm: BIOS version 1.2 Flags 0x07 (Driver
version 1.9)

Real Time Clock Driver v1.09

PCSP 1.3 measurement: maximal samplerate
85227 Hz, 18356 Hz used

RAM disk driver initialized: 16 RAM
disks of 4096K size

Uniform Multi-Platform E-IDE driver
Revision: 6.19

PIIX3: IDE controller on PCI bus 00
dev 39

PIIX3: not 100% native mode: will probe
irqs later

ide0: BM-DMA at 0xf000-0xf007, BIOS
settings: hda:pio, hdb:pio

ide1: BM-DMA at 0xf008-0xf00f, BIOS
settings: hdc:pio, hdd:pio

hda: SAMSUNG WU32165A (2.1GB), ATA
DISK drive

hdb: SAMSUNG WN321620A (2.16 GB), ATA
DISK drive

hdc: GCD-R580B, ATAPI CDROM drive

ide0 at 0x1f0-0x1f7,0x3f6 on irq 14

ide1 at 0x170-0x177,0x376 on irq 15

hda: SAMSUNG WU32165A (2.1GB), 2060MB
w/109kB Cache, CHS=523/128/63

hdb: SAMSUNG WN321620A (2.16 GB), 2060MB
w/109kB Cache, CHS=523/128/63

hdc: ATAPI 8X CD-ROM drive, 256kB Cache

Uniform CDROM driver Revision: 2.55

Floppy drive(s): fd0 is 1.44M

FDC 0 is a post-1991 82077

md driver 0.36.6 MAX_MD_DEV=4, MAX_REAL=8

scsi : 0 hosts.

scsi : detected total.

Partition check:

hda: hda1

hdb: hdb1 hdb2 hdb3 < hdb5 >

VFS: Mounted root (ext2 filesystem)
readonly.

Freeing unused kernel memory: 48k freed

Adding Swap: 68540k swap-space (priority
-1)

[bluesky@bluestar log]#





접속기록







lastlog



lastlog는 가장 최근 텔넷을 이용해
접속한 흔적을 기록하고 있는 파일이며, lastlog
명령시 나오는 정보에 대한 내용을 담고 있다.


[bluesky@bluestar log]# ls
-l lastlog*

-rw-r--r-- 1 root root 146584 Mar 5
01:35 lastlog

-rw-r--r-- 1 root root 147168 Apr 30
2000 lastlog.1

[bluesky@bluestar log]# lastlog

Username
Port From
Latest

root
:0
Sun May 14 00:24:46 2000

bin
**Never logged in**

daemon
**Never logged in**

adm
**Never logged in**

....

....

bluesky
ttyp2 192.168.1.10:0.0
Sun Mar 5 01:35:07 2000

[bluesky@bluestar log]#





secure



/etc/log/secure는
모든 접속과 관련하여 언제 어디서 어떤 서비스를 사용했는지를 기록하고 있는
파일이다. secure 파일의 일부를 보면 아래와 같다.


[bluesky@bluestar log]# cat
< secure


Mar 2 23:54:42 bluestar in.telnetd[9796]:
connect from 192.168.1.10

Mar 2 23:56:30 bluestar in.ftpd[9820]:
connect from 192.168.1.10

Mar 3 18:37:54 bluestar ipop3d[9881]:
connect from 192.168.1.10

....

....

[bluesky@bluestar log]#






위의 로그에서 첫번째 필드(Mar 2 23:54:42)는
해당 서비스가 호출된 시간이다. 3월 2일 23시 54분 42초.. 두번째는 서버이름이며,
세번째(in.telnetd[9796])는 해당 서비스를 하는 데몬이며 []안의 숫자는 해당
데몬의 PID이다.

그리고 마지막은 해당 서비스를 호출한
외부 호스트 주소이다.

그러므로 첫번째 라인은 "3월
2일 23시 54분 42초에 192.168.1.10에서 telnet으로 접속하였으며, 서비스를
제공하기 위해 9796의 PID로 in.telnetd 데몬이 실행되었다"는 뜻이다.







system log, logrotate





위에서 /etc/log 디렉토리내의 각종 시스템관련
로그파일을 보았는데 이러한 로그파일들은 기존의 파일에 계속적으로 덧붙여져
생성된다. 따라서 가만히 놔두면 파일의 용량은 계속적으로 증가를 하게 된다.

이렇게 로그파일이 계속 커지는 것을
방지하기 위해서 로그파일을 조각조각 나누게 되는데 각각의 로그파일 뒤의
숫자들이 이렇게 나뉘어 졌음을 의미한다. 이렇게 로그파일들을 조작조각 나누는
기능을 하는 것이 logrotate라는 유틸리티이다.







logrotate 패키지



logrotate는 로그파일을 알맞게 짤라서..새로
작성하도록 하는 유틸리티로 레드헷 리눅스에서는 기본 설치되며, 레드헷 리눅스
시스템에서는 일주일마다 한번씩 로그파일을 rotate 시켜준다. 이는 logrotate의
설정파일인 /etc/logrotate.conf를 변경함으로써
바꿀수 있다.

사실 이 설정파일은 logrotate라는
실행파일이 읽어들이게 되는데, 이 logrotate는
cron 데몬에 의해
하루에 한번씩 실행된다.

아래 /etc/logrotate.conf의 예제를 보이면서
하나씩 알아보자.


[bluesky@bluestar /etc]# cat
< logrotate.conf

# see "man logrotate" for details

# rotate log files weekly

# 아래에 특별히
명시하지 않은 로그파일에 대해서 일주일(weekly)마다 rotate한다.

weekly


# keep 4 weeks worth of backlogs

# 최대 4번까지
rotate를 허용한다. (logfile, logfile.1 ~ logfile.4까지의 로그파일이 생성된다.

rotate 4

# send errors to root

# 에러가 생기면
root 사용자로 메일을 보낸다.

errors root


# create new (empty) log files after
rotating old ones

# rotate한 후에
비어있는 로그파일을 생성.

create


# uncomment this if you want your log
files compressed

# 로그파일을
압축한다. 용량문제가 크게 되지 않는다면 압축하지 않는것이 좋다.

#compress


# RPM packages drop log rotation information
into this directory

# /etc/logrotate.d
디렉토리 안에 있는 설정파일들을 포함시킨다.

# 대부분 RPM
패키지로 설치되는 데몬들은 이렇게 이 디렉토리에 로그파일을 rotate 시킬
수 있도록 설정파일이 설치된다.

include /etc/logrotate.d


# no packages own lastlog or wtmp --
we'll rotate them here

# 아래있는 로그파일(wtmp,
lastlog)은 어떤 패키지에 의해서도 설정되지 않기 때문에 아래에서 따로 설정해
준다.

# 다른 로그파일들은
/etc/logrotate.d내의 파일들에서 모두 설정하고 있다.


# 한달마다 rotate하며
최대 1회까지만 rotate한다.

/var/log/wtmp {

monthly

rotate 1

}


# 한달마다 rotate하며
최대 3회까지 rotate한다.

/var/log/lastlog {

monthly

rotate 3

}


# system-specific logs may be configured
here

----------------------------- 끝 --------------------




위에서 /etc/logrotate.d
디렉토리 안의 설정파일들을 포함시킨다(include /etc/logrotate.d)는 내용이
있는데../etc/logrotate.d에는 RPM 패키지로 설치된 각종 데몬들의 logrotate
관련 설정파일들이 들어 있다.

이 디렉토리의 내용은 다음과 같다.





위를 보면 RPM으로 설치된 각종 데몬들의
logrotate관련 설정들이 있는데, 해당 파일 내용을 보면 logrotate에 관련된
설정내용들이 있다.

먼저 syslog의 내용을 보면(messages,
secure, maillog, spooler의 네개의 로그파일에 대한 설정을 담고 있다),


[bluesky@bluestar logrotate.d]# cat
< syslog

/var/log/messages {

postrotate
<- rotate가 끝난후에 아래의 명령(/usr/bin/killall
-HUP syslogd)을 실행한다.


/usr/bin/killall -HUP syslogd

endscript
<- 그냥 스크립트의 마지막을 알려주는 역할만 한다.

}


/var/log/secure {

postrotate


/usr/bin/killall -HUP syslogd

endscript

}


/var/log/maillog {

postrotate


/usr/bin/killall -HUP syslogd

endscript

}


/var/log/spooler {

postrotate


/usr/bin/killall -HUP syslogd

endscript

}




이번에는 웹서버인 Apache에 대한 logrotate
관련 설정파일인 apache의 내용을 보면,


[bluesky@bluestar logrotate.d]# cat
< apache

/var/log/httpd/access_log {

rotate 4

mail www@linuxer.net
<- rotate의 한계가 넘어갈 경우, 즉 5번째 rotate가
일어나면 기존의 4번째는 지워지는데 이 파일을 여기서 정한 이메일 주소로
보내주게 된다.

errors www@linuxer.net

size=100k
<- 로그파일 크기가 100KB가 넘어가면 rotate한다.

postrotate


/usr/bin/killall -HUP httpd

endscript

}


/var/log/httpd/error_log {

mail www@linuxer.net

errors www@linuxer.net

size=100k

postrotate


/usr/bin/killall -HUP httpd

endscript

}




그 외의 다른 파일들을 열어보면 다양한
설정내용들을 볼 수 있는데, 설정옵션들을 정리해보면 아래와 같다.




daily

매일 rotate한다.




weekly

매주 rotate한다.




monthly

매달 rotate한다.




size < SIZE>

< SIZE>에
해당하는 용량이 넘으면 rotate한다. 사용가능 유니트로는 k,M 이 있다. 예를
들어, 'size 100k'는 100KB를, "size 2M"는 2MB를 의미한다.






[rotate 조건에 관련된 옵션]




mail <
email 주소>

"rotate <
number>" 옵션을 사용하여 정한 횟수를 넘어갈 경우 rotate되어 삭제될 로그파일을
뒤의 메일주소로 보내준다.




errors <
email 주소>

rotate 중에
에러가 발생하면 뒤의 메일주소로 메일을 보낸다.





[메일을 통한 보고관련 옵션]




rotate <
number>

rotate를 허용할
횟수를 의미한다. "rotate 4"는 rotate 조건에 맞는 경우 최대 4번 rotate한다는
뜻이다.




include <
file>

< file>에서
설정을 포함시킨다. 디렉토리를 지정하면 해당 디렉토리안에 있는 파일 전체를
설정파일에 포함시킨다.




create [mode
owner grp]

rotate한 후에
비어있는 로그파일을 생성한다. 만일 mode, owner, grp들을 설정해주면 해당
모드와 파일 소유자, 그룹을 설정하여 생성하게 된다. 웹서버등에서 종종 사용됨.




nocreate

위의 create
옵션의 효력을 상실하게 한다.




olddir <
directory>

rotate한 옛날
로그파일들을 < directory>로 옮겨준다.




noolddir

olddir 옵션의
효력을 상실하게 함.




compress

로그파일들을
압축한다.




nocompress

로그파일들을
압축하지 않는다.




prerotate
< 명령어 ..> endscript

rotate를 하기전에
< 명령어 ..>부분을 실행한다.




postrotate
< 명령어 ..> endscript

rotate를 하고난
후에 < 명령어 ..> 부분을 실행한다.





[rotate 관련 옵션]



logrotate는
기본적으로 하루에 한번씩 cron 데몬에 의해서 실행된다. 하지만 하루가 지나기
전에 로그파일이 10MB에 거의 다다르는 경우에는 이 시간을 줄여줄 수가 있다.
처음 레드헷을 설치하면 logrotate는 /etc/cron.daily에
있게 되는데, 이 파일을 다른 곳에 옮겨놓던지 혹을 이 파일을 crontab에 다시
걸어서 몇시간 단위로 또 실행하도록 하는것도 괜찮다. 아니면 /etc/cron.hourly
디렉토리에 넣어두면 한시간 단위로 계속 실행되게 된다.





/var/log/cron



이 파일은 앞에서 배운 cron
스케쥴링 데몬의 로그 파일이다.

이 파일에는 cron 데몬이 실행했던 작업을
모두 기록해 두고 있다.





/var/log/maillog



sendmail이 설치되어 작동한다면 레드헷
리눅스는 /var/log/maillog라는 로그파일을 만들게
된다. 여기에는 sendmail이 메일관련 작업을 한 기록과 메일전송관련 패키지인
imap의 작동기록도 여기에 남게 된다. 일단 로그의 내용을 보면 아래와 같은
것들이 있다.




[bluesky@bluestar log]# cat
< maillog

May 14 04:25:09 bluestar sendmail[7233]:
EAA07233: from=root, size=966, class=0, pri=30966, nrcpts=1, msgid=<200005131922.EAA07233@bluestar.linuxnet.ac.kr>,
relay=root@localhost

May 14 04:25:09 bluestar sendmail[7233]:
EAA07233: to=root, ctladdr=root (0/0), delay=00:02:22, xdelay=00:00:00,
mailer=local, stat=Sent

Mar 2 12:00:00 bluestar sendmail[9620]:
MAA09620: from=root, size=112, class=0, pri=30112, nrcpts=1, msgid=<200003020300.MAA09620@bluestar.linuxnet.ac.kr>,
relay=root@localhost

Mar 2 12:00:01 bluestar sendmail[9625]:
MAA09620: to=bluesky, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01,
mailer=local, stat=Sent

Mar 2 13:21:00 bluestar sendmail[9694]:
NAA09694: to=root, delay=00:00:00, xdelay=00:00:00, mailer=local, stat=Sent

Mar 3 18:37:48 bluestar sendmail[9879]:
NOQUEUE: Null connection from darkstar.linuxnet.ac.kr [192.168.1.10]

Mar 3 18:37:54 bluestar ipop3d[9881]:
port 110 service init from 192.168.1.10

Mar 3 18:37:54 bluestar ipop3d[9881]:
No such file or directory while reading line user=??? host=UNKNOWN

[bluesky@bluestar log]#







/var/log/messages



이 파일은 여러모로 유용한 파일이다.
시스템에서 나오는 모든 메시지는 이 파일에 기록되어진다. 따라서 이 파일에는
접속에서부터 커널 메시지, 인증관련, 파일시스템 관련한 메시지등 별로 관련이
없는 모든 메시지가 기록되므로 정규식을 이용해서 적절한 메시지를 검색하거나
찾아볼 수 있다.


[bluesky@bluestar log]# cat
< messages | more

Mar 5 01:35:34 bluestar PAM_pwdb[10025]:
(su) session opened for user root by bluesky(uid=0)

Mar 5 01:35:41 bluestar PAM_pwdb[10025]:
(su) session closed for user root

....

....

Mar 5 12:40:29 bluestar ftpd[10143]:
ANONYMOUS FTP LOGIN FROM root @ bluestar.linuxnet.ac.kr [192.168.1.11],
ingots@nownuri.net

Mar 5 12:40:31 bluestar ftpd[10143]:
FTP session closed

....

....

Mar 7 05:08:32 bluestar in.rexecd[10270]:
connect from darkstar.linuxnet.ac.kr

Mar 7 05:08:32 bluestar in.rexecd[10270]:
login from darkstar.linuxnet.ac.kr as bluesky

Mar 7 05:08:44 bluestar in.rexecd[10285]:
connect from darkstar.linuxnet.ac.kr

Mar 7 05:08:44 bluestar in.rexecd[10285]:
login from darkstar.linuxnet.ac.kr as bluesky

Mar 7 05:08:54 bluestar in.rexecd[10293]:
connect from darkstar.linuxnet.ac.kr

Mar 7 05:08:54 bluestar in.rexecd[10293]:
login from darkstar.linuxnet.ac.kr as bluesky

....

....

위를 보면, 3월
5일 bluesky란 유저가 su 명령을 사용하여 root 유저가 되었으며 잠시후 su
session을 종료,

그 당에 ingots@nownuri.net이란
이메일 주소를 가진 유저가 anonymous FTP에 접속하였으며,

darkstar 호스트에서
rexecd를 이용하여 bluesky란 유저가 로그인 하였음을 보여주고 있다.







/var/log/netconf



linuxconf의
모듈중의 하나인 netconf를 사용하는 경우에
작업내용이 이 파일에 기록이 된다. 따라서 netconf를 이용해서 설정을 바꾼
경우에는 어떻게 설정이 바뀌었는지, 혹은 어떤 설정이 어느 파일에 기록되었는지
이 파일에 모두 나타나게 된다.




- netconf를 이용한
시간이 일단 기록되고, 그 다음에 여러가지 변경을 한 후에, 런레벨 5의 network
부분의 실행스크립트를 재시작 하였다는 기록이다.





/var/log/xferlog



이 파일은 FTP 접속관련 로그기록을
담고 있는 파일이다. 외부에서 파일을 다운로드하거나 혹은 업로드 한 경우,
누가 어떤 파일을 올리고 받아갔는지에 대한 자세한 내역을 알 수 있는 파일이다.


[bluesky@bluestar log]# cat
< xferlog

Thu Mar 2 23:56:53 2000 1 darkstar.linuxnet.ac.kr
146584 /home/bluesky/lastlog b _ o r bluesky ftp 0 * c

Tue May 9 04:27:01 2000 1 bluestar.linuxnet.ac.kr
23855 /home/ftp/incoming/mbox1 b _ i a [none_given] ftp 1 root c

Sat Apr 29 20:54:07 2000 3 darkstar.linuxnet.ac.kr
6018 /home/bluesky/xlock-exploit b _ i r bluesky ftp 0 * c

...

...


위의 /var/log/xferlog
파일에서 각 라인의 필드구성은 아래와 같다.

current tr-time rhost size name
tr-type sp-flag direction access-mode username service auth-method auth-uid




current

current-time,
현재시간을 의미한다.




tr-time

transfer-time,
전송하는데 소요된 시간을 초로 기록함.




rhost

remote-host,
접속한 원격호스트




size

filesize, 전송된
파일의 크기




name

filename, 전송된
파일의 이름




tr-type

transfer-type,
"a"는 아스키모드 "b"는 바이너리모드를 나타낸다.




sp-flag

special-action-flag,
"C"는 compress된 파일, "U"는 uncompress된 파일, "T"는 tar 파일, "_"는 아무
동작이 없음.




direction

"o"는 밖으로
나가는 파일, "i"는 안으로 들어온 파일




access-mode

"a"는 anonymous,
"g"는 guest, "r"은 실제 서버에 있는 유저가 접근한 것.




username

사용한 유저명




service

사용한 서비스명으로,
대부분 ftp를 사용하게 된다.




auth-method

"0"은 인증을
사용안한 것이고, "1"은 RFC931 인증을 하였다는 것을 보여준다.




auth-uid

위의 auth-method에
의해서 되돌려받은 User ID(유저명)






[xferlog의 각 필드의 의미]



이제 위의 각 필드의 의미들을 보면 위의
xferlog 파일의 내용을 분석할 수 있을 것이다.

첫째줄만 보면,

"Thu Mar 2 23:56:53
2000"이 current로서 2000년 3월 2일 목요일 23시 56분 53초를 가리킴.

"1"은
tr-time으로 전송소요시간이 1초임.

"darkstar.linuxnet.ac.kr"이
rhost로서 접속한 원격호스트를 가리킴.

"146584"는
파일 size이다.

"/home/bluesky/lastlog"는
파일이름이다.

"b"는
tr-type으로 바이너리(binary)를 가리킴.

"_"는
sp-flag로 아무 동작도 하지 않음.

"o"는
direction 으로 밖으로 나감을 가리킴.

"r"은
access-mode로써 실제 서버에 있는 유저가 접근했음을 가리킨다.

"bluesky"는
username으로 사용한 유저명을 가리킴.

"ftp"는
서비스명이다.

"0"은
auth-method로 인증을 안했음을 가리킴.

"*"는
인증한 유저명이 시스템에서 가능하지 않음을 가리킨다.







syslog 데몬 이용하기



위에서 많은 시스템 로그파일들이
있음을 보았는데, 설정파일에 따라서 이러한 로그파일들을 작성하도록 해주는
데몬이 syslog 데몬이다.


syslog데몬의 설정파일은 /etc/syslog.conf이다.
syslog 데몬이 메시지를 어떻게 처리할 것인지를 이 설정파일에서 설정해 준다.
즉, 이 설정파일에서 설정해준 내용대로 해당 메시지를 처리하여 로그파일로
저장하게 된다.

/etc/syslog.conf 파일의 내용을 보면
아래와 같다.


[bluesky@bluestar /etc]# cat
< syslog.conf

# Log all kernel messages to the console.

# Logging much else clutters up the
screen.

# crit 이상레벨의
커널관련 에러를 콘솔 디바이스로 보냅니다.

kern.crit
/dev/console


# Log anything (except mail) of level
info or higher.

# Don't log private authentication
messages!

# 메일관련과
개인 인증관련을 제외한 info 레벨 이상의 경우 기록

*.info;mail.none;authpriv.none
/var/log/messages


# The authpriv file has restricted access.

# 제한적인 접속에
대해서 모두 기록한다. 이는 모든 인증이 필요한 경우이다.

authpriv.*
/var/log/secure


# Log all the mail messages in one place.

# 메일관련 모든
메시지를 기록함.

mail.*
/var/log/maillog


# Everybody gets emergency messages,
plus log them on another

# machine.

# emergency 메시지에
대해서 모든 사용자에게 알려준다.

*.emerg *


# Save mail and news errors of level
err and higher in a

# special file.

# uucp와 news의
경우 crit 레벨 이상의 에러를 기록한다.

uucp,news.crit /var/log/spooler






syslog.conf 파일의
형식



facility.level action


facility는
메시지를 보내는 프로그램의 유형으로, 다음과 같은 몇가지 종류가 있다. 예를
들면, sendmail은 mail 유형에 속하며 여러개의 facility를 열거하기 위해서는
콤마(,)를 사용한다.




facility

메시지를
발생시키는 프로그램 유형




cron

cron, at과 같은
프로그램이 발생한 메시지




auth

login과 같이
인증프로그램 유형이 발생한 메시지




authprive

개인인증을 요하는
프로그램 유형이 발생한 메시지(대부분의 보안이 필요한 접속관련임.)




daemon

telnetd, ftpd
등과 같이 데몬이 발생한 메시지




kern

커널이 발생한
메시지




lpr

프린터 유형의
프로그램이 발생한 메시지




mail

메일 시스템이
발생한 메시지




mark

syslogd에 의해
만들어지는 날짜유형




news

유즈넷 뉴스
프로그램 유형이 발생한 메시지




syslog

syslog 프로그램
유형이 발생한 메시지




user

사용자 프로세스




uucp

UUCP 시스템이
발생한 메시지




local0-local7

여분으로 남겨둔
유형






[프로그램 유형에 따른 메시지 발생
유형]



level은
위험의 정도를 가리키며, 설정된 위험의 정도보다 높아야 메시지를 내보낸다.
레벨의 유형은 아래와 같다. 위에 있는 순으로 아래로 오름차순으로 정리되어
있다. 즉, debug는 가장 기본적인 레벨로서 제일 자세하게 메시지를 출력하고,
emerg는 가장 높은 레벨로서 시스템에 아주 치명적인 레벨로서 웬만하면 발생되지
않는 경우이다.




level

레벨의 의미




debug

프로그램을 디버깅할
때 발생하는 메시지




info

통계, 기본정보
메시지




notice

특별한 주의를
기하나 에러는 아닌 메시지




warning

주의를 요하는
경고 메시지




err

에러가 발생하는
경우의 메시지




crit

크게 급하지는
않지만 시스템에 문제가 생기는 단계의 메시지




alert

즉각적인 조정을
해주어야 하는 상황




emerg

모든 사용자들에게
전달되어야 할 위험한 상황






[레벨의 의미]



위에서 해당 레벨을 넘어가야 메시지를
내보낸다고 했는데, 즉, err로 레벨을 맞추어 놓은 경우는 err, crit, alert,
emerg에 해당하는 레벨이 발생하면 메시지를 내보낸다는 말이다. 그러나 해당
레벨을 정할 때 해당레벨만 맞추게 될 때는 "="를
레벨 앞에 같이 사용하게 된다. 따라서 "facility.=crit"라고 하면 해당 facility에
대해서 crit 레벨만 기록되고, 이 이상인 alert, emerg는 기록되지 않게 된다.

또한 부정의 의미로서 "!"(bang
혹은 exclamation mark라고 부름.)를 사용할 수 있다. 이는 해당 레벨을 포함한
상위레벨은 제외한 나머지가 된다. 예를 들어 "facility.!notice"라고 하면
notice 레벨과 그 상위레벨을 제외한 나머지이므로, debug, info만 해당된다.


그리고 레벨중에는 별로 쓰이지는 않지만
"none"이라는 것이 있는데 이것은 메시지를 보내지
말라는 뜻이다.

지금까지 facility와 level에 대해서
알아보았는데, 이 둘은 하나로 결합되는 것인데, 세미콜론(;)으로 구분하여
여러개를 사용할 수도 있다.


facility1.level1;facility2.level2;...



출처: http://www.sysmng.com/linux/linuxstudy/linux10.html#10.3