SSH와 SFTP 접속 포트 및 전용 디렉터리 분리하기

목차

하나의 sshd에서 관리용 SSH와 파일 전송용 SFTP 포트를 나누는 설정입니다. 예시는 SSH 21887, SFTP 31887이며 SFTP 사용자는 sftp 그룹에 속한다고 가정합니다. 포트 분리 자체가 암호화나 인증을 대신하지는 않습니다.

디렉터리 준비

ChrootDirectory와 그 상위 경로는 root 소유이며 다른 사용자에게 쓰기 권한이 없어야 합니다. 사용자가 파일을 올릴 곳은 그 아래에 별도로 만듭니다. 예시 계정 lieper와 sftp 그룹은 미리 생성합니다.

TERMINAL / CONFIG
sudo mkdir -p /stg/upload
sudo chown root:root /stg
sudo chmod 755 /stg
sudo chown lieper:sftp /stg/upload
sudo chmod 770 /stg/upload

sshd 설정

/etc/ssh/sshd_config에서 기존 Subsystem sftp 선언을 중복 없이 교체하고 전역 Port 선언은 Match 블록보다 앞에 둡니다. 기존 Include 파일에 같은 설정이 있는지도 확인합니다.

TERMINAL / CONFIG
Port 21887
Port 31887
Subsystem sftp internal-sftp

Match LocalPort 31887
    AllowGroups sftp
    ChrootDirectory /stg
    ForceCommand internal-sftp -d /upload
    AllowTcpForwarding no
    X11Forwarding no
    PermitTunnel no

이 설정은 31887 접속을 SFTP 전용으로 만듭니다. 21887에서의 SFTP까지 금지하는 설정은 아니며, 그 요구가 있으면 설정 파일과 서비스 인스턴스를 별도로 설계합니다. chroot 내부 경로 /upload는 실제 서버의 /stg/upload입니다.

연결을 유지한 채 검증

기존 관리 세션을 유지하고 구문과 Match 결과를 먼저 확인합니다. SELinux가 Enforcing이면 새 포트의 ssh_port_t 등록 상태를 확인하고 방화벽에도 허용할 출발지와 포트를 반영합니다.

TERMINAL / CONFIG
sudo sshd -t
sudo sshd -T -C user=lieper,host=server.example.com,addr=192.0.2.10,lport=31887
sudo systemctl reload sshd
ss -lnt | grep -E '21887|31887'
sftp -P 31887 lieper@server.example.com

다른 터미널에서 관리용 SSH, SFTP 업로드, 상위 경로 이동 제한을 확인한 뒤 기존 세션을 종료합니다. SFTP 전용 포트에 ssh로 접속했을 때 일반 셸이 열리지 않는지도 확인합니다.

리눅스 › 보안 설정
보안 설정 목록