대상 OS: Ubuntu Server 24.04 LTS

파일을 주고받아야 해서 SSH 계정을 열어줬는데, 어느 순간 그 계정이 ‘쉘까지 가능한 일반 계정’이 되는 경우가 많습니다.
SFTP만 필요했던 사용자가 scp로 이것저것 올리고, ssh로 접속해서 명령을 실행하기 시작하죠.
침해사고 관점에서는 “파일 업로드 가능 + 쉘 실행 가능” 조합이 웹쉘/크론/백도어로 이어지기 쉽습니다.
그래서 운영에서는 “파일 전송만” 되는 계정을 별도로 만들고, 나머지는 원천 차단하는 구성이 자주 쓰입니다.

이 글은 Ubuntu 24.04에서 OpenSSH의 `internal-sftp`와 `Match` 블록을 이용해 SFTP 전용 계정을 격리하고, chroot 권한/디렉터리 구조/검증까지 한 번에 정리합니다.

---

이 구성이 막아주는 것(위협 모델)

1) SFTP 계정으로의 SSH 쉘 로그인 차단

2) 터널링/포트포워딩 악용 차단(원격 프록시로 쓰는 것 방지)

3) 홈 디렉터리 밖으로의 탈출 방지(chroot)

4) 업로드 영역과 읽기 전용 영역 분리로 권한 사고 예방

주의: chroot는 “파일시스템 경계”를 만드는 기능이지, 커널/프로세스 격리까지 제공하는 컨테이너는 아닙니다. 그래도 파일 전송용 계정의 공격면을 크게 줄여줍니다.

---

구성 목표(정책)

1) `sftpusers` 그룹만 SFTP 허용

2) 해당 그룹은 쉘 접근 금지(`ForceCommand internal-sftp`)

3) chroot로 `/srv/sftp/%u` 아래만 보이게

4) 업로드는 `uploads/`에만 가능, 나머지는 읽기 전용(선택)

---

1) OpenSSH 서버 상태 확인(기본 점검)

1) sshd 동작 확인

sudo systemctl status ssh --no-pager

2) 현재 sshd 설정에 Include가 있는지 확인

sudo sshd -T | head -n 20

3) SFTP 서브시스템 설정 확인

sudo sshd -T | grep -i subsystem || true

Ubuntu 24.04는 대개 `/usr/lib/openssh/sftp-server` 또는 `internal-sftp`를 사용할 수 있습니다. 이 글은 `internal-sftp`를 사용합니다(외부 바이너리 경로 의존성이 줄어듭니다).

---

2) 그룹/계정 생성(전용 운영)

1) SFTP 전용 그룹 생성

sudo groupadd --system sftpusers

2) SFTP 전용 사용자 생성(쉘은 막고 홈은 지정)

sudo useradd -m -d /srv/sftp/client1 -s /usr/sbin/nologin -g sftpusers client1
sudo passwd client1

운영에서는 비밀번호 대신 키 인증을 권장하지만, 여기서는 흐름 이해를 위해 비밀번호를 예시로 넣었습니다(아래에서 키 인증으로 전환합니다).

---

3) chroot 디렉터리 구조 만들기(권한이 핵심)

chroot를 쓰려면 “chroot 루트 디렉터리”가 **root 소유**이고 **그룹/기타 쓰기 권한이 없어야** 합니다. 이 조건을 만족하지 못하면 sshd가 보안상 접속을 거부합니다.

1) 기본 디렉터리 생성

sudo install -d -m 0755 /srv/sftp
sudo install -d -m 0755 /srv/sftp/client1
sudo install -d -m 0755 /srv/sftp/client1/uploads

2) 소유권/권한 설정

- chroot 루트(`/srv/sftp/client1`)는 root:root, 0755
- 업로드 디렉터리(`/srv/sftp/client1/uploads`)는 사용자 소유, 0750 또는 0755

sudo chown root:root /srv/sftp/client1
sudo chmod 0755 /srv/sftp/client1

sudo chown client1:sftpusers /srv/sftp/client1/uploads
sudo chmod 0750 /srv/sftp/client1/uploads

3) (선택) 업로드 후 처리용 “수신함”만 쓰게 하고 싶다면

sudo chmod 0730 /srv/sftp/client1/uploads

이 경우 그룹 멤버 외에는 디렉터리 목록도 보기 어려워집니다.

---

4) sshd 설정: Match 블록으로 SFTP 전용 강제

Ubuntu에서는 설정을 `/etc/ssh/sshd_config.d/*.conf`로 분리하는 편이 안전합니다.

1) SFTP 전용 설정 파일 생성

sudo tee /etc/ssh/sshd_config.d/40-sftp-chroot.conf >/dev/null