SSH와 SFTP는 모두 보안을 위해 사용하는 프로토콜이며, 일반적으로 같은 포트(22번)를 사용합니다.

그래서 종종 이런 질문이 나옵니다

"SFTP는 되게 하면서 SSH는 막을 수 있을까?"

이번 글에서는 이 질문에 대한 답을 기술적인 배경과 함께 정리하고,
실제로 SFTP만 허용하는 방법까지 친절하게 설명해드릴게요! 😊


🔍 SFTP와 SSH의 관계

  • SFTP는 SSH를 기반으로 동작하는 파일 전송 프로토콜입니다.
  • 즉, SFTP는 SSH의 한 기능이라고 보면 됩니다.
  • 두 프로토콜 모두 기본적으로 TCP 22번 포트를 사용합니다.

💡 그래서 기본 설정에서는 SFTP가 가능하면 SSH도 가능하다는 것이 원칙입니다.


🚫 포트나 방화벽으로 SFTP만 허용할 수 있을까?

❌ 불가능합니다.
포트 기반 차단은 SSH와 SFTP를 구분하지 못합니다. 둘 다 같은 포트를 사용하니까요.

✋ 포트를 막으면 SFTP와 SSH 모두 차단됩니다!


✅ SFTP만 허용하고 SSH는 차단하려면?


특정 사용자에게만 SFTP를 허용하고, 쉘 접속(SSH)은 막는 방법이 있습니다.
즉, SSH 자체는 열려 있지만, 접속 유저를 제한하는 방식입니다.


🔧 방법 1: sshd_config에서 사용자별 SFTP 전용 설정

/etc/ssh/sshd_config 파일에 아래처럼 추가합니다

Match User sftpuser
    ForceCommand internal-sftp
    ChrootDirectory /home/sftpuser
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no


✔️ sftpuser는 이제 SSH로 접속해도 쉘을 실행할 수 없고SFTP만 사용할 수 있게 됩니다.
🔐 보안도 강화되고, 불필요한 접근을 막을 수 있어요!


🛠️ 방법 2: SFTP 전용 셸 (rssh, scponly) 사용

전용 셸을 설정하면 해당 사용자는 SFTP/파일 전송만 가능하고 SSH 쉘 접근은 차단됩니다


usermod -s /usr/bin/rssh sftpuser


✔️ rssh는 SFTP, SCP 등만 허용하고 나머지는 차단해줍니다.
📦 다중 사용자 환경에서 특히 유용합니다.


🧾 요약 정리

목적🎯가능 여부방법 요약
SFTP는 되고 SSH는 안 되게✔️ 가능 (제한적)사용자 단위 제한 (sshd_config, rssh)
포트/방화벽으로 구분❌ 불가능SFTP도 SSH 포트를 사용함

🛡️ 주의할 점

  1. ChrootDirectory 경로는 root가 소유하고, 사용자에게 쓰기 권한이 없어야 합니다.
    → /home/sftpuser 디렉토리는 root:root이어야 정상 작동합니다.
  2. 설정 변경 후에는 SSH 서비스를 재시작해야 적용됩니다
  3. SSH가 아예 다 막히는 건 아니고, 다른 사용자들은 기존대로 SSH 접속이 가능합니다.
sudo systemctl restart sshd


✅ 디렉토리 구조 및 권한 설정 방법

예: 사용자 이름이 sftpuser이고, 홈 디렉토리가 /home/sftpuser인 경우


1️⃣ 상위 디렉토리 (/home/sftpuser)는 root가 소유해야 함

sudo chown root:root /home/sftpuser 
sudo chmod 755 /home/sftpuser

  • ✅ 소유자: root:root
  • ✅ 권한: rwxr-xr-x (755)
  • ❌ sftpuser에게는 여기에 직접 쓰기 권한이 있으면 안 됨

2️⃣ 실제 파일 업로드 디렉토리 만들기

root 소유 디렉토리 아래에 실제 업로드할 디렉토리를 따로 만듭니다.

sudo mkdir /home/sftpuser/upload 
sudo chown sftpuser:sftpuser /home/sftpuser/upload 
sudo chmod 755 /home/sftpuser/upload

  • ✅ 여기는 sftpuser가 소유하고 자유롭게 파일 업로드 가능
  • ❗ 이 경로를 접속 후 루트 디렉토리로 보여지게 하려면 internal-sftp가 자동으로 ChrootDirectory 하위 디렉토리로 진입합니다.


🧩 마무리

서버 보안을 유지하면서 파일 전송만 허용하고 싶을 때,
SSH를 제한하고 SFTP만 열어두는 방식은 매우 유용합니다.

✅ 특정 사용자만 SFTP 접근 가능
✅ 쉘 로그인 차단
✅ 불필요한 공격 노출 감소

꼭 필요한 사용자만 SFTP 접근하도록 설정해서
더 안전한 서버 운영을 해보세요! 🔐💪