글 수 367
서버 관리
1. 로그
-
로그의 종류
-
Solaris 2.X (11가지)
-
wtmpx/utmpx, wtmp/utmp, syslog, sulog, pacct, authlog, messages, loginlog, lastlog, access_log, error_log
-
-
HP-UX 9.X 이상 (9가지)
-
wtmp/utmp, btmp, syslog, sulog, pacct, messages, lastlog, access_log, error_log, shutdownlog
-
-
IBM AIX (9가지)
-
wtmp/utmp, syslog, sulog, pacct, messages, lastlog, access_log, error_log, failedlogin
-
-
Linux의 로그 (8가지)
-
wtmp/utmp, btmp, secure, pacct, messages, lastlog, access_log, error_log
-
-
Compaq Tru64 (9가지)
-
wtmp/utmp, syslog, pacct, messages, loginlog, lastlog, access_log, error_log, sialog
-
-
-
utmp는 현재 로그인해 있는 사용자에 대한 현재 상태의 정보가 저장되어 있다.
-
w와 who가 utmp를 참조한다.
-
w 명령
-
who 명령
-
wtmp는 지금까지 사용자들의 로그인, 로그아웃 히스토리를 모두 누적 정보가 저장된다.
-
wtmp는 /var/log/wtmp 형태로 binary로 저장된다.
-
시스템의 셧다운, 부팅 히스토리까지 포함한 중요한 로그.
-
wtmp는 last를 사용하여 확인할 수 있다.
-
재부팅된 시간을 알아보려면… (id부분이 reboot로 되어 있기 때문)
-
그 밖에 last의 인자를 id, 서비스명 등으로 줄 수 있다. (뒤의 -5 는 5개까지 보이라는 의미이다.)
-
리눅스 시스템에서는 실패한 로그인 시도에 대해서 btmp 파일에 로그를 남긴다.
-
로그인 실패에 대한 기록은 brute-force 공격과 같은 패스워드 시스템에 대한 공격에 대해 로그를 남길 수 있다.
-
/var/log/btmp로 저장되며, binary 형태의 파일이다.
-
일반적으로 이 파일은 생성되어 있지 않은 관계로 직접 생성 시켜주어야 한다.
-
System V 계열의 유닉스에서는 로그인 시도의 실패 기록을 loginlog에 기록한다.
-
이 파일도 생성해 주어야 한다.
-
-
lastb를 사용하여 확인 가능하다.
$ lastb
root pts/0 211.60.207.244 Sun May 13 00:47 - 00:47 (00:00) root pts/0 211.60.207.244 Sun May 13 00:47 - 00:47 (00:00) root pts/0 211.60.207.244 Sun May 13 00:47 - 00:47 (00:00)
1.4. lastlog
-
lastlog에는 모든 사용자의 사용자이름, 포트번호(터미널), 최근 접근 시간이 저장된다.
-
lastlog은 /var/log/lastlog 파일로 저장되며, 바이너리 파일로 되어 있다.
-
-
lastlog 명령어을 통해 정보를 확인할 수 있다.
$ lastlog Username Port From Latest root tty1 Fri May 11 00:50:03 +0900 2001 bin **Never logged in** daemon **Never logged in** . . overhead tty2 Fri May 11 03:08:30 +0900 2001
-
옵션으로 -t (시간), -f (파일), -u (username) 등을 사용할 수 있다.
1.5. message
-
리눅스 로그 파일에서 가장 중요한 부분으로서 로그인 기록부터 디바이스 정보,시스템 설정오류, 파일 시스템, 네트워크 세션 기록 등 많은 다양한 정보를 포함하고 있다.
-
또한 침입자의 공격 형태가 어느 정도 기록되어 진다.
-
/var/log/message에 저장된다.
May 14 20:07:28 localhost sshd[12943]: Did not receive identification string form 195.238.160.231. May 14 20:16:49 localhost sshd[861]: Received signal 15; terminating. May 15 03:16:54 localhost sshd[861]: Server listening on 0.0.0.0 prot 22 May 15 03:16:54 localhost sshd[861]: Gennerating 768 bit RSA key. May 15 03:16;55 localhost sshd[861]: RSA key generation complete. May 15 03:22:04 localhost xinetd[885]: START: telnet pid=1157 from=211.60.207.194 May 15 03:22:04 localhost sshd[1160]: Did not receive identification string form May 15 04:35:27 localhost xinetd[885]: START: telnet pid=2088 from=152.142.100.2 May 15 04:37:18 localhost xinetd[885]: START: telnet pid=2184 from=152.142.100.2 May 15 04:42:35 localhost xinetd[885]: START: telnet pid=2445 from=152.142.100.2 May 15 05:00:49 localhost xinetd[885]: START: telnet pid=2694 from=152.142.100.2 May 16 04:32:51 localhost proftpd[2763] localhost
-
messages 파일에는 데몬들의 정보들이나 시스템의 다양한 에러 등 방대한 양의 정보들을 기록하게 된다.
-
그러므로 특정 정보를 grep으로 필터링해서 얻는 것이 편할 수 있다.
-
-
?- MARK ?- 라는 표시는 일정 시간 간격으로 출력하는 로그이다.
-
시스템 모니터링 분야와 관련 유틸
-
sar, iostat, nmap, netcat, ntop 등은 별도로 설치를 해야 하는 모니터링 프로그램이다.
-
-
CPU : top, ps, uptime, vmstat, pstree, iostat, sar
-
메모리 : free, vmstat, sar
-
디스크 I/O : df, du, quota, iostat, sar
-
네트워크 : ping, netstat, traceroute, tcpdump, nmap, netcat, ntop
-
파일 : lsof
-
리눅스/솔라리스 시스템의 부팅후 경과된 시간을 초단위로 얻어옵니다.
-
부팅시간은 /proc/uptime의 값을 이용해서 계산합니다.
-
부팅경과 시간은 단순히 시스템의 부팅 시간을 얻어오는 것 외에도 프로세스의 CPU사용율 등을 계산하기 위한 용도로도 사용됩니다.
-
ps와 top을 이용하여 모니터링을 할 경우 먼저 살펴보아야 하는 것이 디스크 액세스나 페이징을 기다리고 있는 프로세스가 있는가이다.
-
top
-
S : 인터럽트가 허용되는 sleep 상태
-
D : 인터럽트가 불가능한 sleep 상태로 page fault 등을 의미하며 page fault 등을 통해 I/O중인 상태
-
W : 상주하는 페이지가 없다는 것을 의미하며 프로세스가 스왑아웃된 상태
-
-
프로세스의 메모리 구조는 텍스트, 데이터, 스택 등으로 이루어져 있다.
-
SIZE 는 코드, 데이터, 스택을 합친 크기를 보여준다.
-
가상 메모리는 커널에서 자동으로 조절하기 때문에 문제가 생길 일은 없으며 RSS를 통해서 실제 물리적 메모리에서 사용하는 메모리 양을 보여준다.
-
-
ps
-
/proc/PID/status
-
VmSize : 가상메모리를 포함한 전체 사용량
-
VmRSS : 물리적 메모리 사용량
-
-
시스템 성능에 대한 보다 자세한 정보 확인
-
프로세스, 메모리, 스왑, 입출력, 시스템 및 CPU 활동 상황에 대한 정보를 한줄로 출력한다.
-
vmstat에서 나오는 첫 줄은 부팅 이후의 각 통계치에 대한 평균값을 보여 준다.
-
r은 현재 실행중인 프로세스 수
-
b는 인터럽트가 불가능한 sleep 상태에 있는 프로세스로 I/O 처리를 하는 동안 블럭 처리된 프로세스
-
w는 강제로 스왑아웃된 프로세스 수
-
si, so는 스왑인, 스왑아웃 (스왑아웃필드(so)는 항상 0에 가까워야 한다.)
-
스왑아웃이 지속적으로 발생한다면 메모리가 부족한 것이다.
-
그러나 일정 간격을 두고 주기적으로 스왑아웃이 발생하는 것은 정상적인 일이다.
-
-
-
b의 수치가 높은 경우 I/O작업을 위해 CPU가 계속 대기 상태로 있는 경우이다.
-
이런 경우에는 디스크 I/O 문제를 확인해야 한다.
-
-
여유가 있는 메모리 :free+buffers+cached
-
LSOF는 'List Open File'의 약자로, 해당 System에서 구동되고 있는 프로세스들에 의해서 열려진 파일들을 확인 할 수 있는 툴이다.
-
시스템의 의심스러운 프로세스에 대한 확인이 용이하고, 설치가 비교적 쉬워 많이 이용되고 있다.
-
iostat
-
Tps : 해당 디바이스에 대한 초당 전송 숫자인데, 여기서는 디바이스에 대한 I/O 요청을 말한다
-
Blk_read/s : 해당 디바이스에서 초당 읽은 블럭 수
-
Blk_wrtn/s : 해당 디바이스에서 초당 기록한 블럭 수
-
Blk_read : 전체 읽은 총 블럭 수
-
Blk_wrtn : 전체 기록한 총 블럭 수
-
sar
-
모니터링 할 수 있는 것들
-
I/O 전송량, 페이징, 프로세스 생성 숫자, 블락 디바이스 활동, 인터럽트, 네트워크 통계, run 큐 및 시스템 부하 평균, 메모리와 스왑 공간 활용 통계, 메모리 통계, CPU 이용도, 특정 프로세스에 대한 CPU 이용도, <inode, 파일, 기타 커널 테이블에 대한 상태>, 시스템 스위칭 활동(context switch), 스와핑 통계, 특정 프로세스 통계, 특정 프로세스의 자식 프로세스 통계, TTY 디바이스 활동
-
-
-
메모리 규모에 맞게 최대 열 수 있는 파일 갯수 (file-max)와 아이노드 개수를 조정하는데 sar를 이용하여 실제 얼마나 파일 핸들을 사용했는지 최대 file-max와 실제 사용한 파일 핸들의 비율 등도 통계를 낼 수가 있다.
-
이러한 통계를 주기적으로 내어 적절하게 활용하기 바란다.
-
참고로 최대 파일 핸들의 경우 4M당 256개로 잡아주고 아이노드 개수는 이의 3-4배 정도로 설정을 한다.
-
file-max 는 /proc/sys/fs/file-max 를 이용하여 설정하며 /proc/sys/fs/file-nr 파일을 이용 현재 할당된 파일수를 확인할 수 있다.
-
-
2. 모니터링 프로그램
2.1. 부팅 후 경과 시간 및 프로세스 CPU 사용률 : uptime
2.2. 프로세스 모니터 : ps, top
2.3. 시스템 성능의 자세한 정보 : vmstat
2.4. 여유 메모리 확인 : free
2.5. 열린 파일 확인 : lsof
2.6. 상세 디스크 IO 확인 : iostat, sar
(다운로드 : ftp://metalab.unc.edu/pub/Linux/system/status/sysstat-4.0.1-1.i386.rpm)
-
1.1. utmp
$ w
01:57:03 up 3 days, 15:03, 2 users, load average: 0.02, 0.01, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT test pts/0 192.168.1.25 00:27 1:07 0.21s 0.21s -bash test pts/1 192.168.1.24 00:38 0.00s 0.29s 0.00s w
$ who
test pts/0 2008-10-31 00:27 (192.168.0.1) test pts/1 2008-10-31 00:38 (192.168.0.1)
1.2. wtmp
$ last | more 유저 터미널/서비스 IP 주소 로그인-로그아웃 시간 (기간) test pts/17 192.168.1.25 4월 3일 09:14 로그인되어 있습니다 test pts/14 192.168.1.21 4월 3일 09:07 - 09:39 (00:32) test pts/14 192.168.1.11 4월 2일 22:27 - 22:31 (00:04) test pts/13 192.168.1.11 4월 2일 22:24 - 09:34 (11:09) test pts/13 192.168.1.44 4월 1일 20:47 - 00:05 (03:18) test2 ftp 192.168.1.30 4월 1일 16:25 - 16:25 (00:00) test ftp 192.168.1.30 4월 1일 16:25 - 16:25 (00:00) test2 ftp 192.168.1.30 4월 1일 16:25 - 16:25 (00:00)
$ last reboot reboot system boot Thu Feb 2 21:52 reboot system boot Thu Sep 22 17:55 reboot system boot Wed Jul 13 13:11 reboot system boot Sat Jun 25 11:38 reboot system boot Sat Jun 25 10:21 reboot system boot Thu Dec 23 19:08 reboot system boot Sun Dec 5 22:06
$ last test2 -5