시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 11/50편 (전체 011/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
SSH 접근 제어는 "인증을 시도할 자격" 자체를 제한하는 설정입니다. 비밀번호가 맞더라도 허용 목록에 없으면 로그인할 수 없습니다.
접속 요청 (user, 출발지 IP)
↓
DenyUsers → AllowUsers → DenyGroups → AllowGroups (이 순서로 평가)
↓ 통과
Match 블록 조건(User/Group/Address) → 조건별 정책 적용
↓
인증 (publickey / password)
AllowUsers user@IP 형식을 쓰면 계정과 출발지를 함께 묶을 수 있습니다.
| 설정 | 예시 | 의미 |
|---|---|---|
AllowGroups | AllowGroups sshusers | 그룹 단위 허용(운영 권장) |
AllowUsers | AllowUsers admin1@192.168.56.0/24 | 계정 + 출발지 대역 |
DenyUsers | DenyUsers apache mysql | 명시적 거부 |
Match Address | Match Address 192.168.56.0/24 | 대역별 정책(예: 내부만 password 허용) |
AllowUsers와 AllowGroups를 함께 쓰면 둘 다 만족해야 접속됩니다. 운영에서는 하나만 선택해 혼란을 줄이는 것이 좋습니다.
# 1) SSH 허용 그룹 생성 및 관리자 추가
sudo groupadd sshusers
sudo usermod -aG sshusers admin1
# 2) drop-in으로 접근 제어 적용
sudo tee /etc/ssh/sshd_config.d/05-access.conf <<'EOF'
AllowGroups sshusers
Match Address 192.168.56.0/24
PasswordAuthentication no
EOF
sudo sshd -t && sudo systemctl reload sshd
# 3) 실효값 확인
sudo sshd -T | grep -i allowgroups
sudo sshd -T -C user=testuser,host=x,addr=192.168.56.50 | grep -E 'allowgroups|passwordauthentication'
$ sudo sshd -T | grep -i allowgroups
allowgroups sshusers
$ getent group sshusers
sshusers:x:1005:admin1
허용 그룹 구성원이 관리자 명단과 일치하고, 그룹 변경 이력이 변경관리 기록과 맞는 상태가 정상입니다.
$ getent group sshusers
sshusers:x:1005:admin1,apache,backup
apache와 용도 불명의 backup이 허용 그룹에 추가됨/etc/group도 감시해야 하는 이유입니다.허용 목록에 없는 계정의 접속은 인증 전에 거부됩니다(가상의 예시 로그).
Oct 1 06:02:11 rocky9-web01 sshd[6301]: User testuser from 192.168.56.50 not allowed because none of user's groups are listed in AllowGroups
Oct 1 06:02:11 rocky9-web01 sshd[6301]: Connection closed by invalid user testuser 192.168.56.50 port 51022 [preauth]
Oct 1 06:05:40 rocky9-web01 usermod[6355]: add 'apache' to group 'sshusers'
Oct 1 06:06:02 rocky9-web01 sshd[6370]: Accepted password for apache from 192.168.56.50 port 51088 ssh2
| 시각 | 이벤트 | 해석 |
|---|---|---|
| 06:02 | 허용 그룹 아님 → 거부 | 접근 제어 정상 동작 |
| 06:05 | apache를 허용 그룹에 추가 | 우회 준비(권한 있는 세션 필요) |
| 06:06 | apache 로그인 성공 | 같은 출발지 IP → 동일 행위자 가능성 높음 |
허용되지 않은 사용자는 sshd 로그에 invalid user로 표시되므로 존재하지 않는 계정 시도와 구분하려면 앞 줄의 not allowed because 메시지를 함께 봐야 합니다.
not allowed because 로그는 실존 계정을 아는 시도일 가능성이 있어 단순 무작위 대입보다 우선순위를 높입니다.usermod -aG, gpasswd -a)은 접근 제어 설정 변경과 동급으로 다룹니다.<group name="local,ssh_access,">
<rule id="100180" level="6">
<decoded_as>sshd</decoded_as>
<match>not allowed because</match>
<description>SSH 접근 제어 정책에 의한 거부</description>
</rule>
<rule id="100181" level="11">
<if_sid>5715</if_sid>
<user>^apache$|^nginx$|^www-data$|^mysql$|^postgres$</user>
<description>서비스 계정 SSH 로그인 성공</description>
</rule>
</group>
/etc/group 사본, sshd 설정 사본, secure/auth.log를 보존합니다.| 구분 | 핵심 내용 |
|---|---|
| 평가 순서 | DenyUsers → AllowUsers → DenyGroups → AllowGroups |
| 권장 방식 | AllowGroups 단일 사용 + 그룹 구성원 관리 |
| 우회 포인트 | 설정이 아니라 그룹 구성원 변경 |
| 거부 로그 | not allowed because ... listed in AllowUsers/AllowGroups |
| 면접 포인트 | "접근 제어 설정과 그룹 파일을 함께 감시" |
다음 편 012. Linux 서버 보안 — SSH 세션·인증 시도 제한 설정 에서는 무차별 대입과 방치된 세션을 줄이는 SSH 세션·인증 시도 제한 설정을 다룹니다.
이전 편: 010. Linux 서버 보안 — SSH 암호 알고리즘·KEX 설정 점검
📚 시리즈 전체 보기: 시스템 보안 · 취약점