CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
리눅스마스터 1급 · 1급리눅스마스터 1급
  • Week 1
    • 1.운영체제와 리눅스: 커널이 하는 일
    • 2.자유 소프트웨어와 배포판: 라이선스가 만든 생태계
    • 3.설치와 부팅: 전원을 켜는 순간부터
    • 4.파일시스템 구조와 파일의 종류: 모든 것은 파일이다
    • 5.Week 1 종합 복습: 개념을 꿰뚫는 시간
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
    • 1.메일 서비스: MTA·MDA·MUA와 SMTP·POP3·IMAP의 삼각 구도
    • 2.파일 전송 서비스: FTP의 능동·수동 모드와 vsftpd
    • 3.원격 접속의 표준: SSH와 sshd_config, 키 인증, 포트 포워딩
    • 4.원격 GUI: VNC와 X 윈도 시스템의 클라이언트·서버 역전
    • 5.Week 10 종합 복습: 네트워크 서비스를 포트 한 장으로 꿰기
  • Week 11
  • Week 12
  • Week 13
  • Week 14
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 1급/Week 10/Day 2

기준: 리눅스마스터 1급 출제 기준·오류 제보

리눅스마스터 1급· AssociateWeek 10 · Day 2읽기 약 10분
핵심 정리
  • FTP는 제어(21번)와 데이터를 별도 연결로 처리하는 "두 채널 프로토콜"이다. 이 구조가 모든 함정의 뿌리다.
  • 데이터 연결의 방향이 능동/수동을 가른다 — 능동(PORT)은 서버가 20번에서 클라이언트로 거꾸로 접속, 수동(PASV)은 클라이언트가 서버 고포트로 접속.
  • NAT/방화벽 뒤 클라이언트는 수동 모드가 필요하다. 그래서 오늘날 수동이 사실상 표준이다.
  • vsftpd 보안 핵심: chroot_local_user=YES(홈에 가두기), userlist_deny(YES=거부·NO=허용만), /etc/vsftpd/ftpusers(항상 접속 금지 목록).
  • FTPS ≠ SFTP — FTPS는 FTP+TLS(두 채널, 990), SFTP는 SSH 기반 단일 채널 22번으로 FTP와 무관하다.

Day 2 - 파일 전송 서비스: FTP의 능동·수동 모드와 vsftpd

FTP의 두 연결 — 제어 채널과 데이터 채널

  • FTP는 다른 프로토콜과 달리 연결을 두 개 쓴다.
채널포트역할
제어 채널21로그인, 명령(LIST, RETR, STOR) 전달
데이터 채널20(능동) 또는 임의 고포트(수동)실제 파일·디렉터리 목록 전송
  • 21번 제어 연결은 세션 내내 유지되고, 데이터를 옮길 때마다 별도 데이터 연결이 새로 열린다.
  • 이 데이터 연결을 누가 시작하느냐가 능동/수동 모드를 가른다.

FTP는 "전화로 주문하고 택배로 받는 시스템"에 비유할 수 있다. 21번은 주문 전화선(항상 연결), 데이터 채널은 물건이 오가는 택배 경로(필요할 때마다 새로 개설)다. 능동 모드는 택배 기사가 우리 집으로 직접 오고(서버→클라이언트), 수동 모드는 우리가 물류센터로 찾으러 간다(클라이언트→서버).

능동 모드 vs 수동 모드 — 데이터 연결의 방향

  • 이 부분이 FTP 문제의 핵심이자 함정이다.
구분능동(Active) 모드수동(Passive) 모드
데이터 연결 시작서버가 클라이언트로 연결클라이언트가 서버로 연결
서버 데이터 포트20번 (고정)임의 고포트(1024 이상)
클라이언트 포트임의 고포트 (서버가 접속)임의 고포트 (클라이언트가 접속)
명령PORT (클라이언트가 자기 포트 알림)PASV (서버가 열어둘 포트 알림)
클라이언트 방화벽/NAT통과 어려움(서버가 거꾸로 접속)통과 쉬움(클라이언트가 능동 접속)

능동 모드 동작 순서

1. 클라이언트 → 서버:21  제어 연결, "PORT 1500" (내 데이터 포트는 1500)
2. 서버:20   → 클라이언트:1500  서버가 거꾸로 데이터 연결을 연다

수동 모드 동작 순서

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)가 수동 모드를 권장하면서 오늘날 표준이 됐다.

vsftpd 설치와 핵심 설정

  • 리눅스의 대표 FTP 서버는 vsftpd(Very Secure FTP Daemon)로, 이름 그대로 보안을 최우선으로 설계됐다.
# 설치 및 서비스 기동
dnf install vsftpd          # RHEL 계열 (apt install vsftpd : 데비안 계열)
systemctl enable --now vsftpd
ss -tlnp | grep :21         # 21번 LISTEN 확인

/etc/vsftpd/vsftpd.conf 주요 지시어

# 익명 접속 관련
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=YES
pasv_min_port=40000
pasv_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로 범위를 좁혀 정하고, 그 범위만 방화벽에서 열어준다. 무작정 모든 고포트를 열면 보안이 무너지므로 "범위 지정 → 그 범위만 개방"이 정석이다.

직접 쳐보기 — 접속과 전송 테스트

# FTP 클라이언트로 접속
ftp 192.168.1.10
# Name: ftpuser / Password: ****
ftp> passive          # 수동 모드로 전환
ftp> ls               # 데이터 채널로 목록 받기
ftp> get report.txt   # 다운로드
ftp> put backup.tar   # 업로드
ftp> bye
 
# 방화벽에 FTP·수동 포트 개방 (firewalld)
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=40000-40100/tcp
firewall-cmd --reload

보안 FTP — FTPS와 SFTP의 결정적 차이

  • 평문 FTP는 ID·비밀번호·파일이 모두 그대로 흐른다. 그래서 암호화 방식이 필요하다.
  • 이름이 비슷한 두 방식을 반드시 구분해야 한다.
구분FTPSSFTP
정체FTP + SSL/TLS 암호화SSH 기반 파일 전송
기반 프로토콜FTP 프로토콜 그대로 + TLSSSH 프로토콜의 일부
포트21(명시적 FTPS) 또는 990(암묵적)22 (SSH와 동일)
연결 구조제어+데이터 두 채널(복잡)단일 채널(SSH 위)
방화벽 친화성데이터 포트 때문에 까다로움22번 하나라 단순
서버vsftpd 등 FTP 서버sshd (별도 FTP 서버 불필요)

핵심 구분: 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가 따라오므로, 오늘날 안전한 파일 전송의 기본 선택지가 되었다.

시험 직전 체크리스트

  • 제어 21, 능동 데이터 20, 수동 데이터 고포트
  • 능동=서버가 클라이언트로 접속(PORT), 수동=클라이언트가 서버로 접속(PASV)
  • NAT 뒤 클라이언트 = 수동 모드 필요
  • vsftpd 설정은 /etc/vsftpd/vsftpd.conf, 금지 목록은 ftpusers
  • chroot_local_user=홈에 가두기, userlist_deny 의미 주의
  • FTPS=FTP+TLS(990), SFTP=SSH 기반(22)

📖 용어

  • 제어 채널 / 데이터 채널 : 로그인과 명령을 주고받는 21번 연결 / 실제 파일과 목록이 오가는 별도 연결.
  • 능동(Active) 모드 : 클라이언트가 PORT로 자기 포트를 알리면 서버가 20번에서 거꾸로 접속하는 방식.
  • 수동(Passive) 모드 : 서버가 PASV로 열어 둔 고포트를 알려 주고 클라이언트가 접속하는 방식.
  • PORT / PASV : 능동 모드를 여는 명령 / 수동 모드를 요청하는 명령. 모드와 짝지어 외운다.
  • vsftpd : "Very Secure FTP Daemon". 리눅스 대표 FTP 서버로 설정은 /etc/vsftpd/vsftpd.conf.
  • anonymous_enable : 익명 로그인 허용 여부. 보안상 보통 NO로 둔다.
  • chroot jail : 사용자를 자기 홈 아래에 가둬 상위 디렉터리로 못 나가게 하는 격리. chroot_local_user=YES.
  • allow_writeable_chroot : chroot한 홈에 쓰기 권한이 있을 때 vsftpd가 거부하지 않도록 허용하는 설정.
  • userlist_deny : YES면 user_list의 사용자를 거부(블랙리스트), NO면 그 목록만 허용(화이트리스트).
  • ftpusers : 항상 접속을 금지하는 목록. root 등 시스템 계정이 기본으로 들어 있다.
  • pasv_min_port / pasv_max_port : 수동 모드 데이터 포트 범위. 이 범위만 방화벽에서 열어 준다.
  • FTPS : 기존 FTP에 SSL/TLS를 씌운 것. 두 채널 구조를 유지하며 990(암묵적)·21(명시적)을 쓴다.
  • SFTP : SSH 위에서 도는 파일 전송. 22번 단일 채널이며 FTP 프로토콜을 전혀 쓰지 않는다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

FTP 능동(Active) 모드에서 데이터 연결이 맺어지는 방향으로 옳은 것은?

문제 2

NAT/방화벽 뒤에 있는 클라이언트가 FTP 서버에 접속할 때 일반적으로 권장되는 모드와 그 이유로 옳은 것은?

문제 3

vsftpd에서 로컬 사용자를 자신의 홈 디렉터리에 가두어 상위 디렉터리로 이동하지 못하게 하는 설정은?

문제 4

FTP에서 제어(명령) 채널이 사용하는 표준 포트는?

문제 5

SFTP에 대한 설명으로 옳은 것은?

문제 6

vsftpd에서 /etc/vsftpd/ftpusers 파일의 역할로 옳은 것은?

문제 7

FTPS와 SFTP의 차이로 옳은 것은?

이전메일 서비스: MTA·MDA·MUA와 SMTP·POP3·IMAP의 삼각 구도Week 10 · Day 1다음 원격 접속의 표준: SSH와 sshd_config, 키 인증, 포트 포워딩Week 10 · Day 3

참고 공식 자료

  • 리눅스마스터 1급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • FTP의 두 연결 — 제어 채널과 데이터 채널
  • 능동 모드 vs 수동 모드 — 데이터 연결의 방향
  • 능동 모드 동작 순서
  • 수동 모드 동작 순서
  • vsftpd 설치와 핵심 설정
  • etc/vsftpd/vsftpd.conf 주요 지시어
  • 직접 쳐보기 — 접속과 전송 테스트
  • 보안 FTP — FTPS와 SFTP의 결정적 차이
  • 시험 직전 체크리스트
  • 용어
  • 연습 문제