21번 제어 연결은 세션 내내 유지되고, 데이터를 옮길 때마다 별도 데이터 연결이 새로 열린다.
이 데이터 연결을 누가 시작하느냐가 능동/수동 모드를 가른다.
FTP는 "전화로 주문하고 택배로 받는 시스템"에 비유할 수 있다. 21번은 주문 전화선(항상 연결), 데이터 채널은 물건이 오가는 택배 경로(필요할 때마다 새로 개설)다. 능동 모드는 택배 기사가 우리 집으로 직접 오고(서버→클라이언트), 수동 모드는 우리가 물류센터로 찾으러 간다(클라이언트→서버).
1. 클라이언트 → 서버:21 제어 연결, "PASV" (열어둘 포트 알려줘)2. 서버 → 클라이언트 "포트 50000을 열어뒀다"3. 클라이언트 → 서버:50000 클라이언트가 데이터 연결을 연다
⚠️ 함정: "능동 모드에서 서버의 데이터 포트는 20번"이라는 사실과, "능동 모드는 서버가 클라이언트로 거꾸로 접속한다"는 방향을 정확히 외워야 한다. 시험은 PORT/PASV 명령과 모드를 뒤바꾼 보기를 자주 낸다. PORT=능동, PASV=수동이다.
핵심 구분: 왜 수동 모드가 표준이 됐나? 능동 모드는 서버가 클라이언트로 거꾸로 연결을 열기 때문에, 클라이언트가 NAT 뒤나 방화벽 안에 있으면 그 연결이 차단된다. 오늘날 대부분의 클라이언트가 NAT/방화벽 뒤에 있으므로, 클라이언트가 직접 연결을 여는 수동 모드가 사실상 기본이다. "NAT 뒤 클라이언트 = 수동 모드 필요"가 정답 신호다.
FTP가 1971년(RFC 114) 설계됐을 때는 방화벽도 NAT도 없던 시대라, 서버가 클라이언트로 데이터를 보내는 능동 모드가 자연스러웠다. 그러나 1990년대 NAT와 방화벽이 보편화되며 능동 모드가 막히기 시작했고, RFC 1579(Firewall-Friendly FTP)가 수동 모드를 권장하면서 오늘날 표준이 됐다.
# 익명 접속 관련anonymous_enable=NO # 익명 로그인 허용 여부(보안상 보통 NO)anon_upload_enable=NO # 익명 사용자 업로드 허용# 로컬 사용자 관련local_enable=YES # 로컬 시스템 계정 로그인 허용write_enable=YES # 업로드·삭제 등 쓰기 명령 허용local_umask=022 # 업로드 파일의 기본 umask# 디렉터리 제한(보안 핵심)chroot_local_user=YES # 사용자를 홈 디렉터리에 가둠(상위 이동 차단)allow_writeable_chroot=YES # chroot 홈에 쓰기 권한 있을 때 허용# 접속 제어userlist_enable=YES # /etc/vsftpd/user_list로 접근 통제userlist_deny=YES # YES=목록의 사용자 거부, NO=목록만 허용# 수동 모드 포트 범위(방화벽 개방용)pasv_enable=YESpasv_min_port=40000pasv_max_port=40100
⚠️ 함정: userlist_deny의 의미가 반대로 헷갈리기 쉽다. userlist_deny=YES면 user_list에 적힌 사용자를 거부(블랙리스트), userlist_deny=NO면 목록의 사용자만 허용(화이트리스트)이다. 또 /etc/vsftpd/ftpusers는 항상 접속 금지 목록으로, root 등 시스템 계정이 기본 포함된다.
핵심 구분: chroot_local_user=YES는 사용자를 자기 홈에 가둬 상위 디렉터리로 못 나가게 하는 보안 핵심 설정이다. 이때 홈 디렉터리에 쓰기 권한이 있으면 vsftpd가 보안상 거부하므로 allow_writeable_chroot=YES를 함께 줘야 한다. "상위 이동 차단 = chroot"로 정리된다.
vsftpd가 수동 모드를 쓰면 데이터 포트가 임의 고포트라 방화벽이 막아버린다. 그래서 pasv_min_port~pasv_max_port로 범위를 좁혀 정하고, 그 범위만 방화벽에서 열어준다. 무작정 모든 고포트를 열면 보안이 무너지므로 "범위 지정 → 그 범위만 개방"이 정석이다.
핵심 구분: FTPS와 SFTP는 이름만 닮았을 뿐 완전히 다른 기술이다. FTPS = FTP에 TLS를 씌운 것(여전히 두 채널, 990 포트), SFTP = SSH 위에서 도는 파일 전송(22번 단일 채널, FTP와 무관)이다. "SFTP는 SSH의 일부, 포트 22"가 핵심 포인트다.
SFTP를 "Secure FTP" 또는 "FTPS와 같은 것"으로 설명하는 보기는 모두 틀렸다. SFTP는 SSH File Transfer Protocol이며 FTP 프로토콜을 전혀 쓰지 않는다. 포트도 990(FTPS)이 아니라 22(SSH)다. 이 둘을 섞은 보기가 함정이다.
SFTP가 실무에서 압도적으로 선호되는 이유는 "방화벽 구멍 하나(22번)면 끝"이기 때문이다. FTPS는 제어·데이터 두 채널에 수동 포트 범위까지 열어야 해 NAT 환경에서 골치가 아프다. 이미 SSH가 열려 있으면 추가 설정 없이 SFTP가 따라오므로, 오늘날 안전한 파일 전송의 기본 선택지가 되었다.