Linux 시스템 보안 기초 · 05/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
root는 리눅스에서 모든 것을 할 수 있는 계정입니다. 그 말은 곧, 공격자가 가장 갖고 싶어 하는 것이 root라는 뜻입니다. 이번 편은 root의 위험을 줄이는 관리 원칙과, root 활동을 감시하는 SOC 관점을 정리합니다.
root(UID 0)는 권한 검사를 사실상 우회합니다. 파일 권한이 000이어도 읽고, 어떤 프로세스든 종료하고, 커널 모듈도 올립니다. 그래서 보안 원칙은 명확합니다.
나쁜 방식 좋은 방식
ssh root@server vs ssh alice@server
│ │ sudo <명령>
▼ ▼
'누가?' 알 수 없음 'alice가 sudo로' 로그에 남음
(책임 추적 불가) (책임 추적 가능)
직접 root로 로그인하면 이후 모든 행위가 root라는 하나의 신원으로 뭉뚱그려집니다. 여러 관리자가 root로 로그인하면 누가 무엇을 했는지 구분할 수 없습니다.
반면 sudo는 실행자의 실제 UID(auid)를 로그에 남깁니다. 그래서 감사 관점에서 sudo는 '권한 상승을 추적 가능하게 만드는' 장치입니다. SSH의 PermitRootLogin no 설정(13편)은 이 원칙을 강제하는 첫 단추입니다.
# root 직접 로그인 시도 흔적 (Ubuntu)
sudo grep -Ei 'root' /var/log/auth.log | grep -i 'session opened' | tail
# sudo 사용 이력
sudo grep -i 'sudo' /var/log/auth.log | grep -i 'COMMAND' | tail
# 현재 SSH의 root 로그인 정책 확인
sudo sshd -T | grep -i permitrootlogin
sshd -T(유효 설정 덤프)의 실제 실행 결과입니다. (실제 캡처 — 실습 컨테이너)
$ sudo sshd -T | grep -i permitrootlogin
permitrootlogin prohibit-password
그리고 sudo 사용 로그는 다음 형태로 남습니다. (예시 출력 — 표준 sudo 로그 형식)
Sep 25 14:03:11 host sudo: alice : TTY=pts/0 ; PWD=/home/alice ;
USER=root ; COMMAND=/usr/bin/cat /etc/shadow
alice가 sudo로 root 권한을 써서 /etc/shadow를 읽었다는 사실이 명확히 남습니다. 이것이 root 직접 로그인 대비 sudo의 결정적 장점입니다.
PermitRootLogin yes 설정 (특히 password 허용)공격자는 root를 얻은 뒤 로그를 지우거나 히스토리를 비우기도 합니다. 그래서 로그의 원격 전송/보존이 중요합니다.
auth.log(Ubuntu)·secure(RHEL)의 root 세션COMMAND= 필드의 위험 명령(bash, sh, cat /etc/shadow 등)sshd -T | grep permitrootlogin 이 yes면 즉시 시정SOC에서 root 활동은 고위험 이벤트로 별도 대시보드/알람을 둡니다. SIEM 상관분석 예시: 'SSH 로그인 성공 → 곧바로 sudo su → /etc/passwd 수정'이 짧은 시간에 이어지면 권한 상승·지속성 시나리오로 판단합니다(49·50편). Wazuh는 sudo 로그와 auditd를 결합해 '누가 언제 어떤 특권 명령을 실행했는가'를 타임라인으로 재구성할 수 있습니다.
[ ] PermitRootLogin 설정을 확인한다
[ ] root 직접 로그인 흔적을 점검한다
[ ] sudo COMMAND 로그에서 위험 명령을 찾는다
[ ] 로그 보존/원격 전송 여부를 확인한다
다음 편에서는 06. /etc/passwd 보안 분석 를 다룹니다. 이제 Part 2로 넘어가, 계정 정보가 실제로 저장되는 /etc/passwd를 보안 관점에서 해부합니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.