Linux 시스템 보안 기초 · 12/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
SSH가 사용자를 인증하는 방법은 하나가 아닙니다. 어떤 방식을 쓰느냐가 서버의 보안 수준을 크게 좌우합니다. 이번 편은 세 가지 주요 방식을 비교하고, SOC 관점에서 각각의 로그 특성을 정리합니다.
| 방식 | 원리 | 보안성 | 무차별 대입 |
|---|---|---|---|
| Password | 비밀번호 입력 | 낮음 | 취약 |
| Public Key | 키쌍 검증 | 높음 | 사실상 불가 |
| Keyboard-Interactive | 서버 프롬프트 응답(OTP 등 MFA) | 방식에 따라 높음 | 방식 의존 |
권장 구성은 공개키 인증 + 비밀번호 인증 비활성화, 필요 시 keyboard-interactive로 MFA를 얹는 것입니다.
클라이언트 서버(sshd)
│ Password: 'secret' ───────────▶ shadow 해시 비교
│ (탈취·추측 위험)
│
│ PublicKey: 서명 ───────────────▶ authorized_keys의 공개키로 검증
│ (개인키는 절대 전송 안 됨) (네트워크로 비밀 안 흐름)
공개키 인증에서는 개인키가 네트워크로 전송되지 않습니다. 클라이언트가 개인키로 챌린지에 서명하고, 서버는 ~/.ssh/authorized_keys의 공개키로 서명을 검증합니다. 비밀이 흐르지 않으므로 도청·추측이 무의미합니다.
비밀번호 방식은 (암호화 채널이지만) 결국 '맞히면 통과'라 무차별 대입에 노출됩니다. 그래서 인터넷에 노출된 서버라면 비밀번호 인증을 끄는 것이 사실상 표준입니다.
# 서버에서 현재 허용된 인증 방식(유효 설정) 확인
sudo sshd -T | grep -E 'authenticationmethods|passwordauthentication|pubkeyauthentication'
# 클라이언트: 키쌍 생성(ed25519 권장)
ssh-keygen -t ed25519 -C 'alice@lab'
# 공개키를 서버에 등록
ssh-copy-id alice@server
실습 컨테이너에서 sshd -T로 확인한 유효 설정입니다. (실제 캡처)
$ sudo sshd -T | grep -E 'passwordauthentication|pubkeyauthentication'
pubkeyauthentication yes
passwordauthentication yes
여기서 passwordauthentication yes는 비밀번호 로그인이 허용됨을 의미합니다. 보안 강화를 위해서는 키 등록 후 passwordauthentication no로 전환하는 것이 권장됩니다(13편).
passwordauthentication yesauthorized_keys에 관리자가 모르는 공개키(15·34편 — 키 기반 지속성)로그 관점에서 공개키 로그인은 Accepted publickey ... key: SHA256:... 형태로 남아, 어떤 키로 로그인했는지 지문(fingerprint)으로 추적할 수 있습니다.
Accepted password vs Accepted publickeysshd -T)SIEM에서 Accepted password(비밀번호 성공)는 무차별 대입 성공 가능성 때문에 Accepted publickey보다 높은 관심 대상입니다. 공개키 로그인은 fingerprint를 IOC/자산 인벤토리로 관리해, '등록되지 않은 키로의 로그인'을 탐지할 수 있습니다. Wazuh는 두 방식을 구분해 파싱합니다.
[ ] sshd -T로 허용 인증 방식 확인
[ ] ed25519 키쌍 생성 실습
[ ] authorized_keys의 키 목록 점검
[ ] password 인증 비활성화 검토
다음 편에서는 13. SSH 보안 설정 를 다룹니다. 이 방식들을 강제하는 sshd_config의 핵심 보안 설정을 정리합니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.