리눅스 시스템 보안, 로그 관리부터 시작하자
시스템 보안이라고 하면 복잡한 방화벽 설정이나 암호화 기술만 떠올리기 쉬워요.
시스템 보안이라고 하면 복잡한 방화벽 설정이나 암호화 기술만 떠올리기 쉬워요. 하지만 실제로는 누가 언제 무엇을 했는지 기록하는 것 이 보안의 기초입니다. 특히 해킹 사고가 발생했을 때, 로그 파일이 없다면 원인 추적 자체가 불가능해져요. 오늘은 리눅스 시스템 보안의 핵심인 로그 관리에 대해 알아보겠습니다.
이 글을 읽고 나면 리눅스 서버에서 어떤 로그 파일들이 어떤 정보를 기록하는지, 그리고 그 로그들을 어떻게 분석하는지 이해할 수 있을 거예요. 개발자든 시스템 관리자든, 서버 보안을 책임지는 모든 사람이 알아야 할 내용입니다.
📋 시스템 로그, 왜 이렇게 중요할까?
로그 파일은 컴퓨터 시스템의 모든 사용 내역을 기록하는 파일입니다. 마치 CCTV처럼, 누가 언제 어디서 무엇을 했는지 모두 남겨두는 거죠. 해킹 사고가 발생했을 때 이 로그를 분석하면 공격자의 흔적을 추적할 수 있어요.
하지만 여기서 주의할 점이 있습니다. 로그 파일 자체가 해커에 의해 삭제되면 추적이 불가능 해진다는 것이죠. 따라서 로그 파일을 보호하고, 정기적으로 백업하는 것도 보안의 중요한 부분입니다. 또한 로그가 너무 많아져서 용량 문제가 생기지 않도록 관리하는 것도 필요해요.
⚙️ 리눅스 로그 시스템의 핵심: syslogd와 klogd
리눅스에서 로그를 관리하는 데몬(백그라운드 프로세스)은 두 가지가 있어요.
첫 번째는 syslogd 입니다. 커널과 여러 시스템 프로그램에서 발생하는 에러, 경고, 일반 메시지들을 파일로 기록하는 역할을 해요. 두 번째는 klogd 로, 부팅과 관련된 메시지와 커널 관련 메시지를 약 8KB 크기의 버퍼에 기록합니다. 부팅 후 이 메시지를 보려면 dmesg 명령어를 사용하면 돼요.
이 두 데몬의 설정은 /etc/syslog.conf 파일에서 관리됩니다. 이 파일을 수정하면 어떤 로그를 어디에 저장할지, 어떤 심각도의 메시지를 기록할지 결정할 수 있어요.
🔧 /etc/syslog.conf 파일 이해하기
syslog.conf 파일은 두 개의 필드로 구성됩니다: 선택자 필드(selector field) 와 액션 필드(action field) 입니다.
선택자 필드에서는 메시지 종류(facility) 와 메시지 우선순위(priority) 를 지정해요. 예를 들어 auth는 로그인 같은 인증 프로그램 메시지를, cron은 정기 작업 메시지를, daemon은 데몬 프로그램 메시지를 의미합니다. mail.none처럼 .none을 붙이면 해당 종류를 제외하겠다는 뜻이에요.
우선순위는 낮은 것부터 높은 순서로 debug → info → notice → warning → err → crit → alert → emerg입니다. 설정한 우선순위보다 높거나 같은 메시지만 기록돼요.
액션 필드에서는 로그를 어디에 저장할지 결정합니다. 파일 경로를 지정하면 그 파일에 저장되고, @호스트명으로 지정하면 원격 시스템으로 보낼 수 있어요. *를 사용하면 현재 로그인한 모든 사용자에게 메시지를 전송합니다.
📂 리눅스 주요 로그 파일들
리눅스의 대부분 로그 파일은 /var/log 디렉토리에 저장됩니다. 이 디렉토리 안에는 여러 종류의 로그 파일들이 있는데, 각각 다른 정보를 기록해요.
1️⃣ /var/log/messages - 시스템의 중추
이 파일이 가장 중요해요. 접속 인증, 메일 관련 내용, 시스템 변경사항 등 시스템 전반에 관한 로그를 기록합니다. 해킹 사고가 발생했을 때 가장 먼저 분석해야 하는 파일 이에요.
타임스탬프, 호스트명, 데몬명, 메시지 내용 등이 기록되며, su 실패, 데몬 비활성화, 부팅 에러 등 다양한 정보를 포함합니다.
tail -f /var/log/messages
2️⃣ /var/log/secure - 보안의 최전선
모든 접속과 관련된 정보를 기록합니다. 언제 어디서 어떤 서비스를 사용했는지 모두 남겨져요. 보통 login, TCP 래퍼(tcp_wrappers), xinetd 관련 로그들이 남습니다.
이 파일을 분석하면 비정상적인 접속 시도나 권한 변경 기록을 찾을 수 있어요. 타임스탐프, 호스트명, 응용프로그램명과 프로세스 ID(PID), 메시지 내용이 기록됩니다.
3️⃣ /var/log/cron - 정기 작업의 기록
시스템의 정기적인 작업(cron job)에 대한 모든 실행 기록을 보관합니다. crond 데몬이 언제 어떤 작업을 실행했는지 확인할 수 있어요. 이를 통해 예약된 작업이 제대로 실행되었는지, 혹은 비정상 종료되었는지 추적할 수 있습니다.
4️⃣ /var/log/maillog - 메일 서비스 기록
sendmail이나 pop 같은 메일 서비스 실행 기록을 남깁니다. 메일을 주고받을 때 SMTP와 POP 관련 로그가 기록되어요. 메일 서버 문제를 진단할 때 이 파일을 확인하면 도움이 됩니다.
5️⃣ /var/log/boot.log - 부팅 기록
시스템이 부팅될 때 데몬들이 실행되거나 재시작되는 과정을 기록합니다. 부팅 시 발생한 에러나 조치 사항을 확인할 때 유용해요.
👥 사용자 접속 정보 추적하기
로그인 정보는 여러 파일에 기록되는데, 각각 다른 형식과 용도를 가지고 있어요.
wtmp - 전체 접속 히스토리
/var/log/wtmp 파일은 모든 사용자의 로그인-로그아웃 정보를 저장합니다. 바이너리 형식이므로 last 명령어로 확인해야 해요. 시스템 셧다운과 부팅 히스토리까지 포함되어 있어서, 해킹 피해 시스템 분석 시 매우 중요합니다.
last 명령어는 여러 옵션을 지원합니다. last [계정명]으로 특정 사용자의 로그만 볼 수 있고, last -d로 외부 접속과 리부트 정보만 볼 수 있어요.
utmp - 현재 로그인 사용자
/var/run/utmp 파일은 현재 시스템에 로그인한 사용자들의 상태를 기록합니다. 바이너리 형식이므로 who, w, finger 명령어로 확인합니다.
특히 w 명령어는 현재 로그인한 사용자의 스냅샷을 제공해줘요. 해킹 피해 시스템 분석 시 반드시 실행해봐야 하는 명령어입니다. 사용자 이름, 터미널 장치, 원격 호스트 이름, 로그인 시간 등을 확인할 수 있거든요.
lastlog - 최근 접속 정보
/var/log/lastlog 파일은 모든 계정의 최근 접속 정보를 저장합니다. 각 사용자의 마지막 로그인 시간, 터미널, IP 주소를 확인할 수 있어요. lastlog 명령어로 조회하며, 특정 계정만 볼 때는 lastlog -u 계정명을 사용합니다.
btmp - 실패한 로그인 시도
/var/log/btmp는 실패한 로그인 시도를 저장합니다. lastb 명령어로 확인하면 계정명, 접속 콘솔, IP, 시간 정보를 볼 수 있습니다.
🔍 기타 중요한 로그 파일들
xferlog - FTP 접속 기록
/var/log/xferlog
httpd 로그 - 웹 서버 기록
/var/log/httpd/access_log
/var/log/httpd/error_log
history - 사용자 명령어 기록
각 사용자의 홈 디렉토리에 있는 .bash_history 파일에는 그 계정에서 사용한 모든 명령어가 저장됩니다. history 명령어로 확인할 수 있어요. 이를 통해 사용자가 어떤 작업을 했는지 추적할 수 있습니다.
🔄 logrotate - 로그 파일 자동 관리
/var/log 디렉토리의 로그 파일들은 계속 커집니다. 매일 새로운 정보가 추가되기 때문이죠. 이를 방지하기 위해 logrotate 라는 도구를 사용해요.
logrotate는 로그 파일을 일정 크기나 일정 기간마다 자동으로 분할합니다. 예를 들어 messages 파일이 너무 커지면 messages.1, messages.2 같은 식으로 나누고, 오래된 파일은 압축하거나 삭제할 수 있어요.
설정은 /etc/logrotate.conf 파일에서 합니다.
weekly
rotate 4
compress
💡 실무 팁: 로그 분석의 실제 사례
상황: 서버에 비정상적인 접속이 의심될 때
먼저 w 명령어로 현재 로그인한 사용자를 확인하세요. 그 다음 접속 이력과 보안 로그를 함께 확인합니다.
w
last
tail -f /var/log/secure
lastb
상황: 웹 서버 접속 문제 진단
tail -f /var/log/httpd/error_log
tail -f /var/log/httpd/access_log
상황: 정기 작업이 제대로 실행되지 않을 때
tail -f /var/log/cron
🛡️ 로그 관리의 보안 주의사항
로그 파일은 보안의 증거이자 동시에 공격 대상이 될 수 있어요. 해커가 자신의 흔적을 지우기 위해 로그를 삭제하거나 변조할 수 있기 때문입니다.
따라서 로그 파일은 정기적으로 백업해야 하고, 가능하면 원격 서버로 전송해서 보관하는 것이 좋습니다. 또한 로그 파일의 접근 권한을 제한해서 일반 사용자가 삭제하지 못하도록 해야 해요.
보안을 위해 숨김 속성의 디렉토리를 따로 만들어서 로그를 보관하는 방법도 있습니다. 찾기 어려운 곳에 보관하면 공격자가 로그를 발견하고 삭제하기 어려워지거든요.
🎯 마치며
로그 파일은 단순한 기록이 아니라, 시스템 보안의 핵심입니다. 어떤 로그 파일이 어떤 정보를 기록하는지 이해하고, 이를 분석하는 능력이 있으면 서버의 문제를 빠르게 진단하고 보안 위협을 감지할 수 있어요.
처음에는 복잡해 보일 수 있지만, 실제로 서버를 운영하다 보면 자연스럽게 익숙해집니다. 오늘 배운 내용들을 바탕으로 자신의 서버 로그를 한 번 살펴보세요. 분명 새로운 인사이트를 얻을 수 있을 거예요!
#리눅스 #로그관리 #시스템보안 #syslog #서버관리 #logrotate #보안기초 #DevOps