로그
로그란, 커널과 리눅스 시스템이 제공하는 여러 서비스 및 응용 프로그램이 발생시키는 "메시지"이다.
로그 파일을 통해 시스템과 서비스 상태 확인 및 추적이 가능하며, 또한 보안 침해 사고 발생 시 원인 규명 및 침입 경로 추적에 사용이 가능하다.
로그 파일의 위치는 /var/log이며, 아래와 같이 내부 파일들을 확인해보면 리눅스 자체에서 용량이 너무 커지지 않도록 자동으로 로그파일들을 여러 개로 쪼개놓은 것을 볼 수 있음!
참고로 서비스마다 log가 기록되는 위치가 다르며, 지금 사용하고 있는 나의 환경은 Rocky Linux이다.
관리자의 의무는 로그를 관리하는 것이다.
예를 들어, 파일명에 날짜 혹은 숫자가 붙은 파일들과 같은 오래된 로그 파일을 정리해야 한다.
또한 다음과 같이 로그 파일의 접근 권한도 적절히 관리하여 일반 유저가 실수 혹은 고의로 지우지 못하도록 하는 등, 로그의 신뢰성을 유지해야 한다.
기본 설정은 ownership=root/root 이고 permission=600이다.
주요 로그 파일
- /var/log/btmp : $ lastb 명령어 실행 결과와 동일한 것으로, 실패한 접속 기록이 저장된다.
- /var/log/wtmp : $ last 명령어 실행 결과와 동일한 것으로, 로그인 정보를 기록한다.
- $ lastlog : 사용자별로 각자 마지막으로 접근한 정보를 출력
- $ lastb : permission denied : /var/log/btmp 와 같이 실패한 로그인 정보를 보여준다.
- $ watch ls 를 하면 2초에 한 번씩 ls 커맨드가 돌고 있어서 2초마다 업데이트된다.
- $ watch lastb를 하면 실시간으로 로그를 관찰할 수 있는 셈
- httpd의 access.log 살펴본 예시
journalctl (systemd의 로그인 서비스)
참고로 확인해본 결과 rocky linux에서는 왜인지 /var/log/journal/ 디렉토리가 존재하지 않는 것 같다.
따라서 root로 mkdir로 해당 디렉토리를 직접 만들어준 뒤 재부팅하면 이곳에 계속 로그가 쌓이게 된다!
$ journalctl # 가능한 모든 로그를 출력
$ journalctl –b # 마지막 부팅 이후의 로그만 출력
$ journalctl --list-boots # 특정 부팅 선택하기
-3 5a035370cc264015a5afcad6e310769f Sun 2019-06-23 09:27:30 EDT—Sun 2019-06-23 11:26:45 EDT
-2 ff65fc7baac14b429a4f41828db669d4 Sun 2019-06-23 11:59:55 EDT—Sun 2019-06-23 12:29:46 EDT
-1 2d54fbdb9fc04087930fd7543f57e922 Sun 2019-06-23 20:29:15 EDT—Sun 2019-06-23 23:01:43 EDT
0 aa2a1cf3cc2143b2a0245403739a336e Mon 2019-06-24 09:23:50 EDT—Mon 2019-06-24 15:18:11 EDT
$ journalctl -b -1 # 직전 부팅 시 발생된 로그 출력
# 자연어 또는 timestamp로 로그 쿼리
$ journalctl --since "1 hour ago"
$ journalctl --since "2 days ago"
$ journalctl --since "2015-06-26 23:15:00" --until "2015-06-26 23:20:00"
# 서비스 이름으로 로그 쿼리
$ journalctl -u nginx.service -u mysql.service
# 실시간 로그 출력
$ journalctl -f