어렵당

3. 리눅스/유닉스 로그파일 본문

학습/알기사 정보보안기사 정리

3. 리눅스/유닉스 로그파일

It는어려워 2024. 10. 3. 11:39

리눅스/유닉스 로그파일

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

utmp(or utmpx)

: 현재 로그인한 사용자의 상태정보를 담고있는 로그파일

 

(( 리눅스 ))

- 확인 명령어 : w,  who, finger

(w 명령어를 통해서 IDLE 유휴시간(명령없이 대기하고있는 시간)과 터미널 정보 그리고 어떤 명령을 실행했는지도 알수있기 때문에 주로 사용)

- 파일경로 : /var/run/utmp

 

(( 유닉스 ))

- 확인 명령어 : 리눅스와 동일

- 파일경로 : /var/adm/utmpx

 

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

wtmp(or wtmpx)

: 사용자의 성공한 로그인/로그아웃 정보, 시스템 Boot/Shutdown 정보에 대한 히스토리를 담고있는 로그파일

 

(( 리눅스 ))

- 확인 명령어 : last

- 파일경로 : /var/log/wtmp

 

(( 유닉스 ))

- 확인 명령어 : 리눅스와 동일

- 파일경로 : /var/adm/wtmpx

 

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

lastlog

: 가장 최근에(마지막으로) 성공한 로그인 기록을 담고있는 로그파일

 

(( 리눅스 ))

- 확인 명령어 : lastlog, finger 계정명

lastlog - u 계정명 (해당 계정의 정보만 확인 가능)

lastlog -t 일수 (해당 일수 이내에 접속한 기록 확인 가능)

finger 계정명 (해당 계정의 정보 확인 가능)

- 파일경로 : /var/log/lastlog

 

(( 유닉스 ))

- 확인 명령어 : finger 계정명 (유닉스는 finger만 지원)

- 파일경로 :  /var/adm/lastlog

 

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

btmp / loginlog

: 실패한 로그인 시도에 대한 기록을 담고있는 파일

 

(( 리눅스 ))

- 확인 명령어 : lastb

- 파일 경로 : /var/log/btmp

 

(( 유닉스 ))  ( 5회 이상 실패한 로그만 기록 )

- 확인 명령어 : 파일 직접 확인(vi, cat, tail, top, more 등)

- 파일 경로 : /var/adm/loginlog

 

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

sulog

: su(switch user) 명령을 사용한 결과를 저장한 파일

 

(( 리눅스 ))

- 확인 명령어 : X ( 리눅스는 별도의 로그파일이 없고 /var/log/secure 로그파일에서 확인 가능 )

- 파일경로 : /var/log/secure

 

(( 유닉스 ))

- 확인 명령어 : 파일 직접 확인(vi, cat, tail, top, more 등)

- 파일경로 : /var/adm/sulog

(로그내용중 +는 su성공, -는 su실패를 의미)

 

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

acct / pacct

: 시스템에 로그인한 모든 사용자가 로그아웃할때까지 입력한 명령어/터미널 종류/프로세스 시작 시간 등을 저장한 로그

: 로그가 워낙 많이 저장되기 때문에 기본적으로 비활성화되어있음

 

(( 리눅스 ))

- 확인 명령어 : lastcomm

- 활성화 명령 : accton /var/account/pacct

- 파일경로 : /var/account/pacct

 

(( 유닉스 ))

- 확인 명령어 : 리눅스와 동일

- 활성화 명령 : /usr/lib/acct/accton /var/adm/pacct

- 파일경로 : /var/adm/pacct

 

* 특정 명령어를 사용한 사용자 조회

'lastcomm 명령어' 또는 'lastcomm --command 명령어' 

 

* 특정 사용자가 실행한 명령어 조회

'lastcomm 사용자' 또는 'lastcomm --user 사용자'

 

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

history

: 계정별 실행한 명령어에 대한 기록을 저장한 파일

 

(( 리눅스 ))

- 확인 명령어 : history

- 파일경로 : /home/계정명/.bash_history ( 계정별 홈 디렉터리에 숨김파일로 존재)

 

(( 유닉스 ))

- 확인 명령어 : 리눅스와 동일

- 파일경로 : 리눅스와 동일

 

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

secure

: 사용자/그룹 생성 및 삭제, 로그인 등의 사용자 인증에 대한 정보를 기록하고 있는 로그파일

 

(( 리눅스 ))

- 확인 명령어 : 파일 직접 확인(vi, cat, tail, top, more 등)

- 파일경로 : /var/log/secure

 

유닉스는 없음

 

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

messages

: 리눅스 시스템의 가장 기본적인 시스템 로그파일시스템 운영에 대한 전반적인 메시지를 저장하고 있다

: 주로 시스템 데몬들의 실행상황과 내역, 사용자들의 접속정보, TCP Wrapper 접근제어 정보 등을 저장

: 무차별 모드(Promiscuous Mode) 설정 시 해당 로그도 저장

 

(( 리눅스 ))

- 확인 명령어 : 파일 직접 확인(vi, cat, tail, top, more 등)

- 파일경로 : /var/log/messages

 

유닉스는 없음

 

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

dmesg

: 리눅스가 부팅될 때 출력되는 모든 메시지를 기록. 부팅 시의 에러나 조치사항을 확인할때 필요

 

(( 리눅스 ))

- 확인 명령어 : 파일 직접 확인(vi, cat, tail, top, more 등)

- 파일경로 : /var/log/dmesg

 

유닉스는 없음

 

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

boot.log

: 리눅스가 부팅될 때 파일시스템에 대한 체크, 서비스 데몬들의 실행 상태 등을 기록하고 있는 로그파일로 성공/실패 여부를 확인할 수 있다

 

(( 리눅스 ))

- 확인 명령어 :파일 직접 확인(vi, cat, tail, top, more 등)

- 파일경로 : /var/log/boot.log

 

유닉스는 없음

 

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

xferlog

: 리눅스 시스템의 FTP 서비스 로그파일

: vsFTP, ProFTP 등 다양한 FTP 서버 프로그램에서 서비스 내역을 기록하고 있다

: FTP 접속 일시, 원격 호스트와 사용자 정보, 업로드/다운로드한 파일 등 다양한 정보를 상세하게 기록한다

 

(( 리눅스 ))

- 확인 명령어 : 파일 직접 확인(vi, cat, tail, top, more 등)

- 파일경로 : /var/log/xferlog

 

유닉스는 없음

 

* ftp에서 쓰는 명령어 : put(업로드), get(다운로드)

 

* xferlog 로그 형식 예시

: Fri Sep 13 09:20:30 2024 3 192.168.0.20 34200 /home/user/testfile.html b T i g testuser ftp 1 * i

: Fri Sep 13 09:20:30 2024 / 3 / 192.168.0.20 / 34200 /  /home/user/testfile.html / b / T / i / g / testuser / ftp / 0 / * / i

 

- 전송 날짜 및 시간 : Fri Sep 13 09:20:30 2024

- 전송 소요시간(초 단위) : 3초 

- 원격 호스트 주소(접속 사용자 IP) : 192.168.0.20

- 전송 파일 크기(byte 단위) : 34200byte

- 전송 파일명 : /home/user/testfile.html

- 전송 유형 : b

a : ascii(아스키/텍스트)

b : binary(바이너리)

 

- 액션 플래그 : T

_ : underbar(액션없음)(실무에선 이게 대부분)

C : compressed(파일이 압축됨)

U : uncompressed(압축된 파일이 해제됨)

T : archived(tar)(파일이 아카이브됨)(tar로 묶임)

 

- 전송 방향 : i (방향은 서버 기준)

i : incoming(서버로 파일 들어옴 = 업로드)

o : outgoing(서버에서 파일이 나감 = 다운로드)

d : delete(서버에 있는 파일 삭제)

 

- 접근 방식 : g

r : real(로컬 시스템 계정)

a : annoymous(익명 계정)(ID가 annoymous이고 비밀번호가 없는 계정)

g : gurest(게스트 계정)(FTP서버에서 FTP접속만을 위해서 만든 가상의 계정)

 

- 사용자명 : testuser

(?로 되어있으면 annoymous계정)

- 서비스명 : ftp

- 인증방법 : 0

0 : 없음(보통 0)

1 : RFC 931인증

- 인증된 사용자 ID : *

- 완료 상태 : i

c : complete(전송 성공)

i : incomplete(전송 실패)

 

 

* ascii(아스키)와 binary(바이너리) 설명

ascii(아스키) : 개행처리 제어문자를 자동으로 변환해주는 모드

OS마다 텍스트 데이터의 개행처리 제어문자(행과 행을 구분할때 사용한는 문자)가 서로 다르다

리눅스/유닉스 개행처리 제어문자 : 0x0A (LF : Line Feed)를 사용 - 커서 위치를 다음으로 옮기겠다는 뜻(엔터 버튼)

윈도우 시스템 개행처리 제어문자 : 0x0D0A (CR : Carriage Return / LF : Line Feed)

이때 아스키로 전송하면 OS에 맞게 개행처리 제어문자를 변환

binary(바이너리)  : 원본 그대로 전달

 

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

cron

: 시스템 동작중인 cron 데몬이 수행한 정기적인 작업을 기록한 로그파일

: 스케쥴링 작업 로그

 

(( 리눅스 ))

- 확인 명령어 : 파일 직접 확인(vi, cat, tail, top, more 등)

- 파일경로 : /var/log/cron

 

유닉스는 없음

 

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

maillog

: 시스템에서 동작중인 메일서버(sendmail 등)의 메일 송수신 관련 작업을 기록한 로그파일

 

(( 리눅스 ))

- 확인 명령어 : 파일 직접 확인(vi, cat, tail, top, more 등)

- 파일경로 : /var/log/mailog

 

유닉스는 없음

 

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

syslog

: 유닉스 시스템 표준 인터페이스(API)를 통해 커널 및 응용 프로그램에 의해 발생되는 로그를 체계적으로 생성 및 관리

: 응용프로그램/커널 -> API -> syslogd(로그데몬) -> syslog.conf(설정파일) 참조 -> 로그 전송(콘솔/사용자/서버/파일)

 

- 확인 명령어 : 파일 직접 확인(vi, cat, tail, top, more 등)

- 파일경로 : /etc/syslog.conf

- syslog.confg 파일 포맷 : facility.priority;facility.priority;facility.priority;...           action

 

- facility : 로그 생성 서비스

(*, auth, authpriv, cron, daemon, kern, ipr, mail, news, uucp, user, syslog, local0~local7)

 

- priority : 로그 수준(level)

1. Emergency (emerg)

: 시스템이 전면 중단되는 패닉 상태, 전체 공지가 필요한 상황

2. alert (alert)

: 즉각적인 조치가 필요한 상황(시스템 데이터베이스 오류 등)

3. Critical (crit)

: 하드웨어 등의 심각한 오류가 발생한 상황

4. Error (err)

: 일반적인 에러/오류가 발생한 상황

5. Warning (warning)

: 경고 메시지

6. Notice (notice)

: 에러/오류는 아니지만 관리자의 조치가 필요한 상황

7. Information (info)

: 의미 있는 정보 관련 메시지

8. debug (debug)

: 디버깅용 메시지

+

none

: 어떤한 경우라도 로그를 남기지 않겠다는 의미

 

- action : 로그를 어디에 남길것인지 결정

1. 로그파일 : 파일명 경로 지정( ex : /var/log/secure )

2. 콘솔(보통 모니터 화면을 의미) : /dev/console

3. 원격 로그 서버 : @호스트 주소 ( ex : @192.168.0.20 )

4. user : 특정 사용자의 스크린으로 로그 전송( ex : root )

5. * : 현재 로그인된 모든 사용자의 스크린으로 전송

 

- syslog.confg 파일 포맷 예시

*.info;mail.none                 /dev/console

: 모든 서비스에 대한 info수준 이상의 로그를 /dev/console에 출력하되 mail서비스에 대해서는 기록하지 않는다는 의미

 

uucp,news.crit                   /var/log/secure

: uucp,news 서비스에 대한 crit수준 이상의 로그를 /var/log/secure에 기록하라는 의미

 

* 로그 수준 지정 시 해당 수준 이상의 상황이 발생했을때의 로그가 남게된다

(ex : alert 지정 시 alert와 emergency 로그가 남게됨)

 

* syslog는 UDP/514 를 사용하나 UDP는 스니핑의 위험이 있기 때문에서 RFC 3195에서는 TCP/514와 payload를 보호할 수 있는 BEEP 프로토콜을  이용하도록 권고하고 있다

 

* 최근 리눅스는 rsyslog를 사용 ( 설정파일 : /etc/rsyslog.conf )

 

* 설정 변경 시 syslogd(rsyslogd) 데몬을 재시작해주어야 한다. ( 명령 : service syslogd restart )

 

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

rotate

: 로그 파일 순환 관리

: 로그파일을 그대로 쌓아두면 크기가 커져 관리하기가 어려워지며 시스템 장애가 발생할수있기 때문에 사용

 

데몬위치 : /usr/sbin/logrotate

 

데몬 설정파일 : /etc/logrotate.conf

 daily, monthly, weekly

: 일 단위, 월 단위, 주 단위 로그파일 순환

rotate n

: 순환 로그파일의 개수를 n개로 설정해서 보관( ex : weekly rotate 4 -> 4주 로그 보관 )

create [퍼미션] [소유자] [소유그룹]

: 순환 시 새롭게 로그파일을 생성(권한 지정가능)

dateext

: 로그파일의 확장자로 날짜를 붙여서 식별하기 편하게 보관( ex : logfile-20240412)

compress, nocompress

: 로그파일을 압축 또는 압축 없이 보관

size n

: 크기 기준으로 로그파일 순환

include : /etc/logrotate.d

: 해당 디렉토리에 있는 개별 프로세스/데몬 설정파일을 포함

 

logrotate할 프로세스의 개별 설정 디렉터리 : /etc/logrotate.d

ex : httpd, syslog, tomcat.. 등등

ex : /etc/logrotate.d/httpd 파일을 보면 아래와 같이 되어있다

/var/log/httpd/*log{

: 해당 디렉터리에 있는 모든 로그에 적용

missingok

: 로그파일이 없어도 오류를 발생시키지 않는다

delaycompress

: 첫번째 로그파일을 만들때는 압축하지 않고 다음 파일부터 압축시킨다

notifempty

: not if empty의 의미로 로그파일이 비어있는 경우 순환하지 않음(if empty의 반대)

dateext

: 로그파일의 확장자로 날짜를 붙여서 저장한다

sharedscripts

: 로그파일이 여러개 있어도 스크립트를 공유하여 prerotate, postrotate 스크립트를 한번만 실행 ( 재실행 같은 명령를 주로 사용하는데 로그 파일별로 재실행시킬 필요가 없기때문에 한번만 실행시킬려고 넣는 옵션)

postrotate

       /bin/kill -HUP 'cat /var/run/httpd/httpd.pid 2>/dev/null' 2>/dev/null || true

endscript 

: 로테이션 이후 실행할 명령/스크립트 파일을 postrotate 와 endscript 사이에 넣어서 실행시킬수 있다

: 서버를 재기동하지 않고 설정파일을 다시 읽게끔 하는 방법으로 SIGHUP 시그널이 있음

: 오류는 버리고 /var/run/httpd/httpd.pid 을 읽어서 얻은 PID값으로 SIGHUP 시그널을 보낸다(재기동 없이 적용되게끔 한다)(만약 PID 프로세스가 없어서 시그널 전송을 실패해도 수행 결과가 참이되도록 한다)

}

 

상황 파일(logrotate를 수행한 작업내역) : /var/lib/logrotate.status

 

cron(일단위)(cron데몬에 의한 스케쥴러 파일) : /etc/cron.daily/logrotate

 

'학습 > 알기사 정보보안기사 정리' 카테고리의 다른 글

6. 애플리케이션 보안  (0) 2024.10.13
5. 네트워크 보안  (1) 2024.10.05
2. 리눅스/유닉스 기본  (0) 2024.10.04
4. 시스템 보안  (1) 2024.10.04
1. 윈도우 보안  (0) 2024.10.03