리눅스 서버 보안 점검 체크리스트, 7단계 순서대로 확인
- 서버 점검은 업데이트, 계정, SSH, 방화벽, 서비스, 로그, 백업의 7단계로 나눠 보면 빠뜨리기 어렵다.
- 각 단계는 현재 상태를 확인하는 명령과 바꿀 설정을 한 쌍으로 확인한다.
- 설정을 바꿀 때는 접속이 끊기지 않도록 기존 접속을 유지한 채 새 창으로 시험한다.
서버 보안은 한 가지 대단한 설정이 아니라 기본 항목을 빠짐없이 확인하는 일에 가깝습니다. 오래된 소프트웨어, 쓰지 않는 계정, 열려 있는 불필요한 포트처럼 평범한 구멍이 사고의 출발점이 되는 경우가 많기 때문입니다.
이 글은 소규모 홈페이지를 운영하는 초급 서버 관리자를 위해 점검을 7단계로 나눴습니다. 명령은 Ubuntu 문서를 확인한 범위에서 적었고, 각 단계의 자세한 설정은 별도 글로 연결합니다. 설정을 바꿀 때는 접속 창을 하나 더 열어 두고 진행해야 실수로 잠기는 사고를 막을 수 있습니다.
| 단계 | 확인할 것 | 확인 명령 예 |
|---|---|---|
| 1 업데이트 | 보안 패치 적용, 자동 업데이트 | sudo apt update, apt list —upgradable |
| 2 계정 | 불필요한 계정, sudo 권한, 비밀번호 | cat /etc/passwd, getent group sudo |
| 3 SSH | 키 인증, root 로그인, 비밀번호 로그인 | sudo sshd -T |
| 4 방화벽 | 열린 포트, 기본 정책 | sudo ufw status verbose, ss -tlnp |
| 5 서비스 | 쓰지 않는 서비스 중지 | systemctl list-units —type=service |
| 6 로그 | 이상 접속, 오류 | /var/log, journalctl |
| 7 백업 | 자동 백업, 복구 테스트 | 백업 폴더 날짜 확인 |
1단계 업데이트
Ubuntu 문서는 apt upgrade 전에 apt update로 패키지 목록을 먼저 갱신하라고 안내합니다.
sudo apt update
apt list --upgradable
sudo apt upgrade
Ubuntu Server는 unattended-upgrades 패키지가 기본 설치되어 보안 업데이트를 자동 적용하고 하루에 한 번 동작합니다. 설정은 /etc/apt/apt.conf.d/50unattended-upgrades와 /etc/apt/apt.conf.d/20auto-upgrades에서 하고, 실행 기록은 /var/log/unattended-upgrades/에 남습니다. 웹 서버·PHP·DB처럼 서비스 프로그램도 업데이트 대상입니다. PHP 버전은 별도 지원 기한이 있으니 PHP 지원 종료 글도 참고합니다.
2단계 계정
- 로그인 가능한 계정 목록에서 모르는 계정, 퇴사자 계정이 없는지 봅니다.
getent group sudo로 관리자 권한을 가진 계정을 확인하고 필요한 사람만 남깁니다.- 공용 계정 하나를 여러 사람이 쓰지 않도록 사람마다 계정을 만듭니다.
- 비밀번호 로그인을 쓰는 계정은 길고 겹치지 않는 값으로 정합니다.
내 사이트의 HTTPS·인증서·보안 헤더를 바로 확인할 수 있습니다.
무료 보안 검사 시작3단계 SSH
sudo sshd -T로 적용 중인 SSH 설정값을 볼 수 있습니다. root 직접 로그인 금지, 비밀번호 로그인 끄기, 키 인증 사용을 확인합니다. 설정 방법과 접속이 끊기지 않는 순서는 SSH 보안 설정 글에 정리했습니다. 설정 파일을 고친 뒤에는 sudo sshd -t로 문법을 검사하고 sudo systemctl restart ssh.service로 반영한다고 Ubuntu 문서가 안내합니다.
4단계 방화벽
열린 포트를 확인하고 필요한 것만 남깁니다.
sudo ufw status verbose
sudo ss -tlnp
ss -tlnp는 서버가 실제로 기다리는 포트와 프로그램을 보여 줍니다. 방화벽이 막고 있더라도 불필요한 프로그램이 포트를 열고 있다면 그 서비스부터 정리합니다. ufw는 Ubuntu에서 기본 꺼져 있으므로 켜는 순서가 중요합니다. 클라우드를 쓴다면 보안그룹과의 관계까지 서버 방화벽 설정 글에서 확인하세요.
5단계 서비스 최소화
실행 중인 서비스 목록을 보고 용도를 모르는 것, 쓰지 않는 것을 정리합니다.
systemctl list-units --type=service --state=running
테스트용으로 설치한 FTP, 데이터베이스 관리 웹 도구, 예전 프로그램이 남아 있는 경우가 흔합니다. 이유를 알 수 없는 서비스는 바로 지우지 말고 어디에 쓰이는지 먼저 확인한 뒤 중지합니다. 웹 서버와 PHP의 버전 노출, 오류 화면 노출 같은 설정은 서버 버전 정보 숨기기와 php.ini 보안 설정 글에서 다룹니다.
6단계 로그
웹 접근 로그와 SSH 로그인 기록에 낯선 패턴이 없는지 주기적으로 봅니다. 접근 로그의 위치와 집계 명령은 서버 접근 로그 확인 글에서 설명합니다. 로그가 무한히 커지지 않도록 회전 설정(logrotate)이 있는지도 함께 확인합니다.
7단계 백업
백업이 없으면 다른 모든 보안 설정이 뚫렸을 때 되돌릴 방법이 없습니다. Ubuntu 문서는 백업 계획에 무엇을, 얼마나 자주, 어디에 저장하고 어떻게 복구할지를 포함하라고 안내하고, 중요한 백업은 다른 장소에 두라고 권합니다. 서버 안에만 두지 말고 복구를 한 번 해 보는 것이 핵심이며, 방법은 서버 백업 글에 있습니다.
점검한 날짜, 바꾼 설정, 아직 못 한 항목을 짧게 적어 두면 다음 점검이 쉬워집니다. 특히 어떤 포트를 왜 열었는지는 시간이 지나면 잊기 쉽습니다.
이 글은 일반적인 기본 점검 항목이며 침해 여부를 확정하는 도구는 아닙니다. 파일 무결성 검사, 침입 탐지 도구, SELinux·AppArmor 설정은 직접 문서를 확인하지 못해 다루지 않았습니다.
웹사이트 기본 보안 검사HTTPS·리디렉션·인증서·보안 헤더·서버 정보 노출 10개 항목을 무료로 확인할 수 있습니다.
무료 보안 검사 시작자주 묻는 질문
점검은 얼마나 자주 해야 하나요?
새 서버를 만들었을 때 한 번 전체를 보고, 이후에는 월 단위로 업데이트와 로그, 열린 포트를 확인하는 방식이 무난합니다. 소프트웨어를 새로 설치하거나 사고가 의심될 때도 다시 봅니다.
자동 업데이트를 켜면 서비스가 멈추지 않을까요?
Ubuntu의 unattended-upgrades는 보안 업데이트를 기본적으로 자동 적용합니다. 다만 재부팅이 필요한 커널 업데이트 등은 동작 방식을 설정 파일에서 정할 수 있습니다. 운영 중인 서비스라면 먼저 테스트 서버에서 동작을 확인하는 것이 안전합니다.
점검 명령은 모든 배포판에서 같나요?
이 글의 명령은 Ubuntu 문서 기준입니다. CentOS, Rocky 같은 RHEL 계열은 패키지 관리자(dnf)와 방화벽 도구(firewalld)가 다르므로 해당 배포판 문서를 확인하세요.
점검만으로 해킹 여부를 알 수 있나요?
체크리스트는 약한 부분을 줄이는 예방 점검입니다. 이미 침해되었는지는 파일 변경 내역, 로그, 계정 변경을 함께 보아야 하며 그래도 확정하기 어려운 경우가 있습니다.
확인한 자료
- Ubuntu Server 문서 - Package management
- Ubuntu Server 문서 - Automatic updates
- Ubuntu Server 문서 - OpenSSH 서버
- Ubuntu Server 문서 - Firewall
- Ubuntu Server 문서 - Backups
기술 정보는 2026-10-24에 위 자료로 확인했습니다. 소프트웨어 버전·기본값·서비스 정책은 바뀔 수 있으므로 적용 전 각 문서의 최신 내용을 확인하세요. 이 글은 일반 정보이며 특정 서비스 가입을 권하지 않습니다.