cat 으로 읽을 수 있다.
/var
: 가변 데이터 저장소/var/log
: 로그 위치, 파일 유형(텍스트, 바이너리(설치파일) 형태)/var/mailog
: 시스템 상태 알림 로그/var/log/secure
: 인증 시스템 로그(PAM 등)/var/log/boot.log
: 시스템 부팅 로그/var/log/cron
: 작업 스케쥴링 로그/var/log/httpd
: 아파치 웹 서버 로그/var/log/samba
: 삼바 서버 로그/var/log/maillog
: 메일 서버 로그 (Sendmail, Postfix 등)/var/log/xferlog
: FTP 서버 로그 (VSFTP, Proftp 등)💡 리눅스 로그는 분산 저장되어 있거나 중복 저장이 되어 있기 때문에 완벽하게 삭제가 어렵다.
✅ 바이너리 로그 명령어 반드시 숙지!!
명령어를 이용해서 읽어야 한다.
사용자의 현재 로그인 정보 기록
# 현재 시스템에 로그인한 모든 사용자 정보(사용자 이름, 로그인 시간, 로그인한 터미널 등)
$ who
webserver :0 2024-01-04 17:24 (:0)
webserver pts/0 2024-01-04 17:25 (:0)
# who의 정보 +@ 시스템 로드 정보, 시스템 가동시간
$ w
21:41:56 up 4:18, 2 users, load average: 0.25, 0.11, 0.10
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
webserve :0 17:24 ?xdm? 6:49 0.32s gdm-session-worker [pam/gdm-password]
webserve pts/0 17:25 4.00s 4.81s 9.35s /usr/libexec/gnome-terminal-server
# user --- 실행안됨
# 특정 사용자의 정보
$ finger 사용자명
# 사용자 로그인 정보 확인(사용자 이름, 터미널, 시간과 날짜, 세션 지속시간)
$ last
webserve pts/0 :0 Thu Jan 4 17:25 still logged in
webserve :0 :0 Thu Jan 4 17:24 still logged in
(unknown :0 :0 Thu Jan 4 17:23 - 17:24 (00:01)
reboot system boot 3.10.0-123.el7.x Thu Jan 4 17:23 - 21:16 (03:53)
webserve pts/0 :0 Thu Jan 4 15:37 - crash (01:45)
webserve pts/0 :0 Thu Jan 4 13:07 - 15:37 (02:29)
webserve :0 :0 Thu Jan 4 13:07 - crash (04:15)
(unknown :0 :0 Thu Jan 4 13:06 - 13:07 (00:00)
reboot system boot 3.10.0-123.el7.x Thu Jan 4 13:06 - 21:16 (08:10)
reboot system boot 3.10.0-123.el7.x Thu Jan 4 12:29 - 13:06 (00:37)
# 특정 사용자의 마지막 로그인 정보 확인
$ last 사용자이름
wtmp begins Thu Jan 4 12:29:15 2024
# 시스템이 재부팅한 날짜 확인
$ last reboot
reboot system boot 3.10.0-123.el7.x Thu Jan 4 17:23 - 21:26 (04:03)
reboot system boot 3.10.0-123.el7.x Thu Jan 4 13:06 - 21:26 (08:20)
reboot system boot 3.10.0-123.el7.x Thu Jan 4 12:29 - 13:06 (00:37)
wtmp begins Thu Jan 4 12:29:15 2024
# 마지막으로 재부팅된 시간 확인 -1 옵션은 last 명령어가 표시할 라인 수
$ last -1 reboot
reboot system boot 3.10.0-123.el7.x Thu Jan 4 17:23 - 21:28 (04:05)
# 로그인/로그아웃 활동 이력 파일을 검색하여 해당 파일이 생성된 이후로 로그인한 모든 사용자의 목록 표시
# /var/log/wtmp 파일은 로테이션 파일이기 때문에 오래된 항목은 파일명 뒤에 .1처럼 숫자가 붙는다.
# last와 last -f /var/log/wtmp 명령어의 결과가 동일한 이유는 last가 /var/log/wtmp 파일을 검색하여 내용을 보여주기 때문에
$ last -f /var/log/wtmp.1
# 가장 최근에 로그인한 두 명의 사용자 정보 표시
$ last 2
wtmp begins Thu Jan 4 12:29:15 2024
사용자의 로그인 실패 기록
$ lastb
btmp begins Thu Jan 4 17:23:09 2024
시스템 계정의 마지막 가장 최근 로그인 정보
$ lastlog
사용자이름 포트 어디서 최근정보
root pts/0 목 1월 4 17:26:54 +0900 2024
bin **한번도 로그인한 적이 없습니다**
daemon **한번도 로그인한 적이 없습니다**
adm **한번도 로그인한 적이 없습니다**
lp **한번도 로그인한 적이 없습니다**
sync **한번도 로그인한 적이 없습니다**
shutdown **한번도 로그인한 적이 없습니다**
halt **한번도 로그인한 적이 없습니다**
mail **한번도 로그인한 적이 없습니다**
operator **한번도 로그인한 적이 없습니다**
games **한번도 로그인한 적이 없습니다**
ftp **한번도 로그인한 적이 없습니다**
nobody **한번도 로그인한 적이 없습니다**
dbus **한번도 로그인한 적이 없습니다**
polkitd **한번도 로그인한 적이 없습니다**
usbmuxd **한번도 로그인한 적이 없습니다**
ntp **한번도 로그인한 적이 없습니다**
saslauth **한번도 로그인한 적이 없습니다**
libstoragemgmt **한번도 로그인한 적이 없습니다**
avahi **한번도 로그인한 적이 없습니다**
avahi-autoipd **한번도 로그인한 적이 없습니다**
rpc **한번도 로그인한 적이 없습니다**
rtkit **한번도 로그인한 적이 없습니다**
chrony **한번도 로그인한 적이 없습니다**
radvd **한번도 로그인한 적이 없습니다**
colord **한번도 로그인한 적이 없습니다**
apache **한번도 로그인한 적이 없습니다**
rpcuser **한번도 로그인한 적이 없습니다**
nfsnobody **한번도 로그인한 적이 없습니다**
unbound **한번도 로그인한 적이 없습니다**
qemu **한번도 로그인한 적이 없습니다**
abrt **한번도 로그인한 적이 없습니다**
pulse **한번도 로그인한 적이 없습니다**
gdm :0 목 1월 4 17:23:12 +0900 2024
gnome-initial-setup **한번도 로그인한 적이 없습니다**
pcp **한번도 로그인한 적이 없습니다**
postfix **한번도 로그인한 적이 없습니다**
sshd **한번도 로그인한 적이 없습니다**
oprofile **한번도 로그인한 적이 없습니다**
tcpdump **한번도 로그인한 적이 없습니다**
webserver :0 목 1월 4 17:24:40 +0900 2024
$ acctcom
$ lastcomm
💡 이 모든 로그들은 리눅스 로그 관리 패키지
syslog
나rsyslog
에 의해 저장되고 관리된다.
syslog
를 확장시킨 버전이 rsyslog
/etc/syslog.conf
/etc/rsyslog.conf
$ ls /etc/syslog.*
규칙을 만들 때 고려해야하는 부분 - 어떤 문제가 생겼을 때 로그를 남길 것인가?
$ cat /var/log/secure
# 형식
[facility].[proiority] [action]
*
: 모든 facility를 의미*
: 현재 로그인되어 있는 모든 사용자의 화면으로 전달 만약 kern.err
일 때 소프트웨어적인 이슈 뿐만 아니라 하드웨어 적인 부분도 기록한다. 왜? 일종의 계층이기 때문에 err
만 포함하지 않고 err
이후의 문제까지 모두 기록한다. `err, crit, alert, emerg 까지
💡 데몬이란? 백그라운드에서 돌아가는 프로세스
# rsyslog 설치 확인
$ dpkg -l *rsyslog*
# nano 편집기로 rsyslog 설정 파일 열기
$ nano /etc/rsyslog.conf
# 원격으로 오는 로그를 /var/log/192.168.10.0/client.log 에 기록
template remote-incoming-logs, "/var/log/192.168.10.0/client.log
*.*?remote-incoming-logs
# rsyslog.conf 에서 마지막 10줄 출력
$ tail /etc/rsyslog.conf
$ ufw allow 514/tcp
# rsyslog 재시작
$ systemctl restart rsyslog
# rsyslog 상태확인
$ systemctl status rsyslog
# rsyslog 자동실행 설정
$ systemctl enable rsyslog
$ nano /etc/rsyslog.conf
*.*@@192.168.10.10:514 # tcp 방식 전송하는 경우
*.*@192.168.10.10:514 # udp 방식 전송하는 경우
# rsyslog 재시작
$ systemctl restart rsyslog
# rsyslog 상태확인
$ systemctl status rsyslog
# rsyslog 자동실행 설정
$ systemctl enable rsyslog
$ gedit /etc/rsyslog.conf
*.*@@192.168.10.10:514 # tcp 방식 전송하는 경우
*.*@192.168.10.10:514 # udp 방식 전송하는 경우
# rsyslog 재시작
$ systemctl restart rsyslog
# rsyslog 상태확인
$ systemctl status rsyslog
# rsyslog 자동실행 설정
$ systemctl enable rsyslog
$ netstat -natip | grep rsyslog
$ lsof -i tcp:514
# 로그가 저장된 디렉토리로 이동
$ cd /var/log/192.168.10.0
# client.log에 저장된 기록 중 호스트명이 ZeekIDS인 것만 보기
$ cat client.log | gerp ZeekIDS
# client.log에 저장된 기록 중 호스트명이 WebServer 인 것만 보기
$ cat client.log | gerp WebServer
# /etc/rsyslog.conf
daemon,mail.*;\
news.=crit;news.=err;news.=notice;\
*.=debug;*.=info;\
*.=notice;*.=warn /var/log/boot.log
# rsyslog 재시작
$ systemctl restart rsyslog
# rsyslog 상태확인
$ systemctl status rsyslog
$ cat /var/log/boot.log