Linux 시스템 보안 기초 · 04/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
리눅스에서 '누구인가'는 이름이 아니라 숫자(UID) 로 판단됩니다. root라는 이름이 특별한 게 아니라 UID 0 이 특별합니다. 이 사실을 모르면 'UID 0을 가진 두 번째 계정'이라는 전형적인 백도어를 놓칩니다.
관례적 UID 범위(배포판마다 세부 차이):
| 범위 | 용도 |
|---|---|
| 0 | root (슈퍼유저) |
| 1–999 | 시스템/서비스 계정 |
| 1000+ | 일반 사용자 |
UID 0이면 이름이 무엇이든 root 권한입니다. backup이라는 이름이어도 UID가 0이면 root입니다.
로그인 이름 (alice)
│ /etc/passwd 조회
▼
UID (1001) ── 커널은 이 숫자로만 권한 판단
│
├─ UID == 0 → 모든 권한 (root)
└─ UID != 0 → 권한 비트 검사 대상
로그인 시 시스템은 /etc/passwd에서 이름에 대응하는 UID/GID를 찾아 프로세스에 부여합니다. 이후 모든 접근 검사는 이 숫자로 이뤄집니다. 그래서 공격자가 지속성을 확보하는 고전적 방법이 /etc/passwd에 UID 0 계정을 추가하는 것입니다. 이름은 평범하게(systemd-helper 등) 위장하되 세 번째 필드(UID)를 0으로 만들면, 그 계정으로 로그인하는 순간 root가 됩니다.
# UID 0 계정을 모두 나열 (root 외에 나오면 즉시 조사)
awk -F: '$3==0 {print $1}' /etc/passwd
# 로그인 가능한 일반 사용자(UID>=1000) 목록
awk -F: '$3>=1000 && $3<65534 {print $1, $3, $7}' /etc/passwd
# UID/GID 중복 탐지 (중복은 회계 추적을 무너뜨림)
awk -F: '{print $3}' /etc/passwd | sort | uniq -d
실습 환경(test 계정 alice/bob 생성 후) 실제 실행 결과입니다. (실제 캡처)
$ awk -F: '$3==0 {print $1}' /etc/passwd
root
$ awk -F: '$3>=1000 && $3<65534 {print $1, $3, $7}' /etc/passwd
alice 1001 /bin/bash
bob 1002 /bin/bash
$3==0 결과가 root 하나뿐이면 정상입니다. 여기에 두 번째 줄이 나오면 그것이 곧 침해 지표입니다.
nologin 쉘.실무에서 UID 0 중복 점검은 가장 빠르고 비용이 낮은 침해 스크리닝 중 하나입니다.
awk -F: '$3==0'로 UID 0 계정 상시 점검(주기적 스크립트/크론)/etc/passwd 변경 감사: auditd -w /etc/passwd -p wa(44편)useradd 실행 로그(45편)SIEM에서 /etc/passwd 변경 이벤트와 UID 0 신규 등장을 Correlation Rule로 묶으면 '권한 상승 → 지속성' 단계를 조기에 잡을 수 있습니다. Wazuh는 rootcheck/SCA 모듈로 UID 0 중복·의심 계정을 정기 점검하며, 이 결과는 그대로 IOC(의심 계정명)로 활용됩니다.
[ ] UID 0 계정이 root 하나뿐인지 확인
[ ] UID>=1000 로그인 계정 목록 점검
[ ] UID/GID 중복 여부 확인
[ ] 시스템 계정의 쉘이 nologin인지 확인
다음 편에서는 05. root 계정의 위험성과 관리 를 다룹니다. 가장 강력하고 가장 위험한 계정, root의 사용 흔적을 SOC가 어떻게 보는지 다룹니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.