FTP·FTPS: 두 연결의 원리와 vsftpd·IIS 권한 구조
제어 연결과 데이터 연결을 분리해 active·passive 동작을 추적하고, FTP 계정·파일 권한·TLS 정책이 연결되는 방식을 설명한다.
개념부터 찾아보기
정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.
이 노트에서 설명할 수 있게 되는 것
- 제어 연결의 성공과 데이터 전송의 성공을 구분한다.
- active·passive와 NAT·방화벽의 관계를 설명한다.
- 인증·인가·파일 권한·TLS가 모두 충족되는 서버 구성을 해석한다.
01FTP·FTPS·SFTP를 구분하기
- FTP·전송FTP는 파일 전송을 위한 프로토콜이며 명령·응답을 주고받는 제어 연결과 파일·디렉터리 목록을 보내는 데이터 연결을 분리한다.
- FTP일반 FTP는 자격증명과 데이터가 평문으로 전달될 수 있다.
- FTPS·FTPFTPS는 FTP 연결에 를 적용하는 방식이고, SFTP는 SSH의 전송 기능을 이용하는 별도 프로토콜이다.
- 이름이 비슷하다고 같은 서버 설정이나 포트 체계를 쓰지 않는다.
- 전송파일 전송 서비스의 성공은 접속 하나로 끝나지 않는다.
- 인증·데이터 연결서버 신원 확인, , 경로 접근 허가, 데이터 연결, 전송 완료가 차례로 연결된다.
- 데이터 연결디렉터리 목록도 데이터 연결로 전달되므로 로그인은 성공하지만 목록이나 다운로드가 멈추는 증상을 제어 연결 문제와 구분해야 한다.
| 기술 | 연결 구조 | 암호화 관계 |
|---|---|---|
| FTP | 제어 연결 + 별도 데이터 연결 | 기본 FTP는 평문 |
| FTPS | FTP의 제어·데이터 연결 구조 유지 | 적용 정책을 각각 확인 |
| SFTP | SSH 연결의 채널을 통한 파일 작업 | SSH 인증·암호화 사용 |
02제어 연결의 명령과 응답 상태
- FTP기본 FTP 서버 제어 포트는 21이다.
- 제어 연결클라이언트가 제어 연결을 만들면 서버는 준비 응답을 보내고 USER·PASS 등의 인증 교환이 이어질 수 있다.
- 220220은 서비스 준비, 331은 추가 비밀번호 요구, 230은 로그인 성공의 대표 응답이다.
- 전송·데이터 연결파일 전송 전에는 데이터 연결 방식을 정하고 LIST·RETR·STOR 같은 명령을 보낸다.
- 1xx 응답1xx 응답은 진행을 시작하는 예비 응답, 2xx는 완료, 3xx는 추가 정보 필요, 4xx는 일시적 실패, 5xx는 요청이나 정책 등으로 완료할 수 없는 실패를 나타내는 계열이다.
- 150·전송150은 전송을 시작하는 단계에서 볼 수 있고 226은 전송 후 완료 응답으로 쓰인다.
- 명령·응답 코드 대응서버가 보낸 응답 문구와 코드, 해당 명령을 함께 읽어야 어떤 단계에서 실패했는지 알 수 있다.
FTP 로그인과 PORT·STOR·226 전송 완료를 나누어 읽기
제어 연결의 인증, 별도 데이터 연결, 전송 완료 응답과 파일 로그를 한 처리 흐름에 대입한다.
실습 구성과 전제
- 로그인 패킷과 파일 업로드·xferlog 화면은 서로 다른 연결 사례다. 동일 세션의 처음부터 끝까지라고 묶지 않는다.
- 평문 FTP의 구조를 해석하는 격리 실습이다. 실제 자격 정보는 전재하지 않고 업로드 파일도 무해한 테스트 자료로 한정한다.
제어 연결에서 인증 상태의 변화를 찾는다
- 서버의 220 인사 뒤 USER에 대한 331은 추가 암호가 필요하다는 응답이고 PASS 뒤 230은 해당 로그인의 성공이다. 아직 파일 데이터가 전달된 것은 아니다.
- 평문 FTP에서는 이 명령들이 패킷에 보일 수 있다. SFTP는 SSH 기반의 다른 프로토콜이며, FTPS는 FTP에 를 적용하므로 용어를 구분해야 한다.
원본 크기로 보기 ↗- 캡처에 vsFTPd의 220 인사와 USER·PASS 명령 흐름이 보인다.
- 응답은 USER 뒤 331, PASS 뒤 230으로 바뀌어 인증 단계의 진행을 보여 준다.
확인 기준로그인 성공을 파일 읽기·쓰기 권한의 성공으로 확대하지 않는다. 자격 정보 값은 학습 본문에 복사하지 않는다.
PORT 협상 뒤 별도 데이터 전송을 시작한다
- 업로드 사진은 PORT 성공 응답 뒤 파일 전송 준비와 완료가 이어지는 방식 사례다. PORT는 서버가 접속할 클라이언트 데이터 수신 지점을 알린다.
- 150은 전송을 시작할 준비를 나타내며 최종 성공이 아니다. 이때 제어 연결과 별도의 데이터 연결이 성립해야 실제 파일 내용이 이동한다.
textC: PORT 192,0,2,50,195,80 S: 200 PORT command successful C: STOR lab.txt S: 150 Ok to send data ... 별도 데이터 연결로 파일 바이트 전송 ... S: 226 Transfer complete문서용 주소로 재구성한 대화다. 포트 값은 195×256+80=50000이며 실제 사진의 할당 포트가 아니다.
원본 크기로 보기 ↗- put 명령 뒤 200 PORT command successful과 PASV 사용을 고려하라는 안내가 보인다.
- 150 Ok to send data 뒤 226 Transfer complete와 2156 bytes가 표시된다.
확인 기준인증은 되는데 데이터 전송이 멈추면 데이터 연결 방향과 ·방화벽을 확인한다. PORT 성공만으로 데이터 연결까지 성공했다고 단정하지 않는다.
완료 응답과 전송 로그를 파일 내용에 연결한다
- 업로드 화면과 xferlog에는 2156바이트라는 전송량을 대조할 수 있다. 같은 시각·방향·파일을 확인한 뒤 일치 여부를 읽는다.
- 파일명에 보이는 이스케이프나 문자 표현만으로 곧바로 URL 인코딩이라고 단정하지 않는다. FTP 클라이언트와 로그 표현·문자 인코딩의 차이를 구분하고 필요하면 파일 해시도 확인한다.
bashstat -c "%s %n" ./lab.txt sha256sum ./lab.txt허용된 양 끝 시스템에서 준비한 테스트 파일의 크기와 해시를 비교하는 조회 예시다.
확인 기준226과 바이트 수 일치는 전송 완료의 근거다. 내용 무결성까지 요구한다면 서버에 저장된 크기·해시를 원본과 비교하며, 텍스트 전송 모드의 변환 가능성도 확인한다.
실습에서 확인한 동작 원리
- FTP 인증, PORT/ 협상, 데이터 전송, 최종 완료 응답은 서로 다른 단계다.
- 화면·응답 코드·전송 로그·파일 해시를 연결하면 전송 성공의 의미와 한계를 구체적으로 설명할 수 있다.
설정·출력 추가로 확인하기 40장
아래 화면을 펼쳐 위 실습의 설정값, 명령과 확인 기준을 비교해 보세요. 각 묶음은 별도 실습 기록입니다.
실습 화면 묶음 01 18장
원본 크기로 보기 ↗- 「ubuntu」 문맥에 삽입된 원본 명령·상태 출력이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「윈도우 ftp」 문맥에 삽입된 원본 설정·관리 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「윈도우 ftp」 문맥에 삽입된 원본 설정·관리 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「xferlog」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「xferlog」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「connect_from_port」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「connect_from_port」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「ftp」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「ftp」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「윈도우 ftp」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「윈도우 ftp」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「ubuntu」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「ubuntu」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「ubuntu」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「일반 사용자 ssh 접근 불가」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「umask」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「umask」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「xferlog」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 02 5장
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 03 1장
원본 크기로 보기 ↗- 수업 원본 자료 · FTP 제어·데이터 전송의 패킷 패턴.
실습 화면 묶음 04 6장
원본 크기로 보기 ↗- 수업 원본 자료 · 사용자 계정과 FTP 서버 설정·접속. 원문에서 「UBUNTU FTP」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 사용자 계정과 FTP 서버 설정·접속. 원문에서 「UBUNTU FTP」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 사용자 계정과 FTP 서버 설정·접속. 원문에서 「UBUNTU FTP」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 사용자 계정과 FTP 서버 설정·접속. 원문에서 「UBUNTU FTP」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 사용자 계정과 FTP 서버 설정·접속. 원문에서 「UBUNTU FTP」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 사용자 계정과 FTP 서버 설정·접속. 원문에서 「리눅스 시스템 계정 정보 확인」에 배치된 그림 또는 화면이다.
실습 화면 묶음 05 1장
원본 크기로 보기 ↗- 「TFTP 발표」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 06 3장
원본 크기로 보기 ↗- 수업 원본 자료 · FTP 허용 규칙·파일 쓰기 권한과 전송 결과.
원본 크기로 보기 ↗- 수업 원본 자료 · FTP 허용 규칙·파일 쓰기 권한과 전송 결과.
원본 크기로 보기 ↗- 수업 원본 자료 · FTP 허용 규칙·파일 쓰기 권한과 전송 결과.
실습 화면 묶음 07 2장
원본 크기로 보기 ↗- 「시나리오2. (ftp 포트 일부 host 에 permit)」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「시나리오2. (ftp 포트 일부 host 에 permit)」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 08 4장
원본 크기로 보기 ↗- 「ftp」 문맥에 삽입된 원본 명령·상태 출력이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「ftp」 문맥에 삽입된 원본 명령·상태 출력이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「ftp」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「ftp」 문맥에 삽입된 원본 실습·개념 참고 화면이다. FTP·FTPS 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
동작·명령 참고 문서
03Active mode에서는 서버가 데이터 연결을 시작한다
- mode mode에서 클라이언트는 데이터 연결을 받을 주소와 포트를 PORT 또는 EPRT로 전달한다.
- 서버의 역방향 연결서버가 그 지점으로 별도의 연결을 시작한다.
- FTP전통적인 FTP 동작에서 서버 데이터 포트 20이 사용되지만 모든 구현·구성에서 관측되는 출발지 포트를 무조건 20으로 고정해 해석하지는 않는다.
- 중요한 구분은 누가 새 데이터 연결을 시작하는가다.
- 클라이언트가 뒤에 있고 서버가 도달할 수 없는 주소를 광고하거나 클라이언트 측 방화벽이 새 연결을 거부하면 제어 연결이 살아 있어도 데이터 연결은 실패한다.
- 데이터 목적지 검증서버가 임의의 제삼자 주소로 연결하도록 허용하지 않도록 데이터 목적지 검증 정책도 필요하다.
- 를 사용할 때는 광고한 주소·포트와 실제 SYN의 방향을 함께 관찰한다.
04Passive mode의 포트 협상과 전송 순서
- mode mode에서는 서버가 데이터 수신 포트를 열고 클라이언트가 그 포트로 연결한다.
- ·227의 227 응답에는 주소와 두 포트 바이트가 들어가며 포트는 p1×256+p2로 계산한다.
- 예를 들어 (192,0,2,10,117,48)은 문서용 서버 주소의 포트 30000을 뜻한다.
- ·229의 229 응답은 보통 포트만 알려 주고 제어 연결의 서버 주소를 사용하므로 주소 계열과 처리를 단순하게 만들 수 있다.
- 제어 연결·인증전형적인 순서는 제어 연결과 인증 → / → 새 데이터 연결 → LIST 또는 파일 전송 명령 → 데이터 전송·연결 종료 → 제어 연결의 완료 응답이다.
- 제어 연결은 다음 명령을 위해 남아 있을 수 있다.
- 전송하나의 전송이 끝난 뒤에도 다른 전송에서 새로운 데이터 포트가 선택될 수 있으므로 한 번 열린 데이터 포트만 고정 관찰하지 않는다.
- 수동 모드 요청제어 연결과 인증이 끝난 클라이언트가 를 보낸다. 이 명령은 새 데이터 연결을 받을 서버 쪽 포트를 준비하도록 요청한다.
- 데이터 포트 통지서버가 포트를 열고 229 응답에 포트 번호를 보낸다. 예시의 (|||30000|)은 제어 연결 상대 서버의 30000번 포트다.
- 데이터 연결클라이언트가 안내받은 서버 포트로 새 연결을 연다. 이 연결과 제어 연결은 서로 다른 연결이다.
- 전송 명령과 데이터클라이언트가 제어 연결로 LIST를 보내면 서버가 150 등 예비 응답을 보내고 데이터 연결로 디렉터리 목록을 전송한다.
- 전송 완료데이터 전송을 마치고 해당 데이터 연결을 종료한 뒤 제어 연결의 226 응답으로 완료를 알린다. 제어 연결은 다음 명령을 위해 유지될 수 있다.
C → S: EPSV
S → C: 229 Entering Extended Passive Mode (|||30000|)
C → S: TCP 데이터 연결을 서버의 30000번 포트로 생성
C → S: LIST # 제어 연결의 명령
S → C: 150 ... # 제어 연결의 예비 응답
S → C: 디렉터리 목록 # 데이터 연결
S → C: 226 ... # 데이터 연결 종료 후 제어 연결의 완료 응답인증이 끝난 뒤의 목록 조회 학습 모식 예시. C는 클라이언트, S는 서버이며 비밀번호 교환은 생략했다.
05전송 표현과 재시작 위치가 파일 내용에 미치는 영향
- 표현 선택TYPE I의 image 전송은 바이트 보존이 필요한 파일에 사용한다. TYPE A는 텍스트 표현·줄바꿈 변환을 포함할 수 있어 로컬 파일 길이와 전송 바이트 수가 다를 수 있다.
- 재시작 기능RFC 3659의 REST STREAM 지원은 스트림의 바이트 위치를 이용해 전송을 이어갈 수 있게 한다. 서버 지원 여부와 모드·파일 구조를 확인하고 모든 FTP 서버에 무조건 있다고 가정하지 않는다.
- 오프셋 의미REST 400은 다음 전송에서 앞의 400옥텟을 건너뛸 위치를 요청한다. 문자 400개나 400번째 줄을 뜻하지 않으며 멀티바이트 텍스트의 문자 수로 계산하지 않는다.
- SIZE의 표현 의존SIZE가 보고하는 전송 크기도 선택한 TYPE의 영향을 받을 수 있다. 줄바꿈을 변환하는 전송에서는 로컬 저장 파일의 크기만으로 같은 재시작 지점을 정하면 틀릴 수 있다.
- 완료의 두 증거데이터 연결에서 바이트를 받은 사실과 제어 연결의 최종 완료 응답을 함께 읽는다. 150은 시작 단계이며 데이터가 멈췄다는 사실만으로 성공적인 완료를 판정하지 않는다.
0650000번 passive 포트에서 남은 600바이트 받기
- 파일 조건가상 바이너리 파일은 1000바이트이고 로컬에는 같은 파일의 처음 400바이트가 정확히 저장되어 있다고 가정한다. 원격 파일은 변경되지 않았고 REST STREAM을 지원한다.
- 포트 계산의 (192,0,2,20,195,80)은 서버 192.0.2.20과 포트 195×256+80=50000을 뜻한다. 뒤 두 값은 점으로 연결한 별도 IP 주소가 아니다.
- 새 연결과 위치클라이언트가 안내된 데이터 포트로 연결하고 REST 400을 수락받은 뒤 RETR을 요청한다. 해당 재시작 마커는 바로 이어지는 전송의 바이트 위치를 지정한다.
- 잔여 데이터앞 400바이트를 건너뛰면 1000−400=600바이트가 남는다. 클라이언트는 이를 기존의 검증한 접두 부분 뒤에 올바르게 이어 저장해야 한다.
- 완료와 검증600바이트 수신과 최종 226을 확인한 뒤 전체 길이·내용을 검증한다. 같은 길이의 다른 파일이었으면 숫자 계산이 맞아도 올바른 복원이 아니므로 파일 동일성 조건이 중요하다.
C: TYPE I
S: 200 Type set
C: PASV
S: 227 Entering Passive Mode (192,0,2,20,195,80)
[클라이언트가 TCP 50000 데이터 연결을 준비]
C: REST 400
S: 350 Restart position accepted
C: RETR sample.bin
S: 150 Opening data connection
[데이터 연결로 나머지 600바이트 수신]
S: 226 Transfer complete실행하지 않은 FTP 가상 대화. 문서용 주소와 단순화한 응답이며 파일 불변·바이너리·REST 지원 조건을 전제로 한다.
07부분 파일·완료 응답 유실·경로 거부 구분하기
- 변경된 원격 파일중단 후 원격 파일이 교체됐다면 과거 접두 부분과 새 파일의 뒷부분을 이어 잘못된 파일을 만들 수 있다. 재시작 전에 파일 버전·크기·시간 등 사용 가능한 동일성 근거를 확인한다.
- 데이터 오류425는 데이터 연결을 열지 못한 단계, 426은 전송 중 연결 문제 등으로 중단된 단계의 단서다. 제어 로그인 성공만 보고 데이터 포트··전송 경로를 제외하지 않는다.
- 완료 응답 유실전송 뒤 제어 연결이 끊겨 최종 226을 받지 못했다면 서버 쪽 결과가 불명확할 수 있다. 업로드를 반복하기 전에 원격 파일 상태를 조회해 덮어쓰기·중복 이름 생성을 구분한다.
- 파일 작업 거부550은 파일 없음뿐 아니라 접근 불가 등에도 쓰인다. 같은 코드를 항상 비밀번호 오류로 번역하지 않고 직전 명령·계정의 경로·서버 ·파일 권한을 연결한다.
- 해시 비교의 전제전후 해시 일치는 바이트 동일성 근거다. ASCII 변환을 의도한 전송에서는 바이트가 달라질 수 있으므로 과 검사 목표를 맞춘다.
08Passive 포트 범위와 NAT·방화벽
- 서버의 데이터 포트 범위를 제한하면 그 범위에 맞춰 경계 방화벽과 호스트 방화벽을 구성할 수 있다.
- LIST·전송제어 포트 21만 허용하면 로그인은 되지만 LIST와 전송이 실패할 수 있다.
- ·가 있는 서버의 광고 주소는 클라이언트가 실제 도달 가능한 주소와 일치해야 하며 주소·포트 변환과 데이터 포트 범위가 함께 맞아야 한다.
- FTPSFTPS에서는 제어 명령이 암호화되어 중간 장비가 내용을 읽어 동적으로 포트를 열어 주는 FTP helper에 의존하기 어려울 수 있다.
- 데이터 포트·방향 제한명시적으로 제한한 데이터 범위와 필요한 연결 방향을 설계하는 이유다.
- 전송아래 값은 제한된 실습 범위의 예시이며 동시 전송 수요와 실제 정책에 맞게 정한다.
- 인증포트를 넓게 여는 것만으로 인증·파일 권한 문제는 해결되지 않는다.
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30100데이터 포트 범위 예시. 제어 포트와 함께 필요한 클라이언트 범위·방향만 허용하는 정책에 연결한다.
09vsftpd의 인증·사용자 제한·PAM
- 는 설정 파일의 local_enable 등으로 로컬 계정 로그인을 허용하고 을 통해 계정 인증·접근 정책을 적용할 수 있다.
- 은 익명 접근과 관련된다.
- · 정책사용자 목록의 허용·거부 의미는 userlist_enable과 userlist_deny 조합에 따라 달라지며, 배포판의 정책과 금지 사용자 목록도 별도로 영향을 준다.
- 사용자 목록 정책하나의 파일에 사용자 이름을 넣었다고 전체 허용 상태가 결정되지 않는다.
- FTP·nologinFTP 전용 계정에 nologin 셸을 두면 일반 셸 로그인을 제한할 수 있지만, 의 pam_shells 같은 검사 때문에 FTP 인증도 거부될 수 있다.
- 인증 정책의 원인 분석해결을 위해 검사를 일괄 제거하기보다 실제 인증 경로와 계정 정책을 이해해야 한다.
- 전송서비스 계정, 가상 사용자, 허용 목록 등 채택한 방식을 문서화하고 일반 관리 계정과 전송 계정을 구분한다.
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
userlist_enable=YES
userlist_deny=NO로컬 전용 계정을 허용 목록으로 제한하는 설정 조각. 사용자 목록 경로··파일 권한·를 별도로 구성해야 하는 부분 예시다.
10chroot·디렉터리 권한·쓰기 허용의 교집합
- 경로 루트 제한는 가 보는 파일 경로의 루트를 제한하는 기능이다.
- 커널커널을 공유하는 에 대한 완전한 가상화나 모든 공격을 막는 경계는 아니다.
- 루트와 업로드 권한 분리서버가 쓰기 가능한 루트를 제한하는 경우, 루트 디렉터리는 관리 소유로 유지하고 그 아래 업로드 디렉터리만 전송 계정이 쓸 수 있도록 나눌 수 있다.
- ·FTP은 FTP 쓰기 명령을 허용하는 서비스 설정이며 실제 쓰기 권한을 새로 만들어 주지는 않는다.
- 계정의 디렉터리 탐색 권한, 대상 디렉터리 쓰기 권한, , 같은 정책도 충족해야 한다.
- 데이터 연결목록은 되지만 업로드가 거부된다면 데이터 연결이 정상이라는 사실을 활용해 쓰기 명령 허용과 파일 접근 경계를 조사한다.
/srv/ftp/study root:root 0755 # 제한 루트
/srv/ftp/study/upload study:study 0750 # 전송 계정의 업로드 위치소유권·권한을 설명하는 디렉터리 구조 예시이며 실행 명령이 아니다. 실제 사용자 격리 방식과 정책에 맞게 구성한다.
11FTPS는 제어와 데이터의 TLS를 각각 보호한다
- FTPS·제어 연결명시적 FTPS에서는 제어 연결에서 AUTH 로 사용을 협상하고 핸드셰이크를 진행한 뒤 인증 정보와 후속 명령을 보호할 수 있다.
- 데이터 연결·데이터 연결의 보호 수준도 와 PROT 명령 등으로 협상한다.
- ·데이터 연결는 데이터 연결의 보호를 요청하는 방식이다.
- 제어 연결·제어 연결만 로 보호하고 데이터는 평문으로 허용하는 정책은 파일 내용의 기밀성을 보장하지 못한다.
- 인증서클라이언트는 인증서의 신뢰 체인과 유효 기간, 접속 이름 일치를 검증한다. 인증서를 설치했다는 것과 클라이언트가 그 인증서를 신뢰하고 올바른 서버 이름을 확인했다는 것은 다른 상태다.
- 전송·서버 설정에서 로컬 로그인과 데이터 전송에 를 요구하는 조건을 각각 정하고, 사용하는 라이브러리와 서버 버전의 프로토콜 설정을 확인한다.
- 인증서·개인키 파일의 접근권한도 서비스 실행 계정에 맞춘다.
- 사용 협상명시적 FTPS 클라이언트가 FTP 제어 연결에서 AUTH 를 요청한다. 서버가 수락하면 제어 연결의 핸드셰이크로 넘어간다.
- 서버 인증과 보호된 명령클라이언트가 인증서의 신뢰·기간·서버 이름을 검증한다. 가 수립된 뒤 자격증명과 후속 제어 명령을 보호된 연결로 주고받는다.
- 데이터 보호 수준 협상 사용에 맞게 0과 등의 명령으로 데이터 연결의 보호를 협상한다. 제어 연결의 만으로 파일 데이터 보호가 자동 보장되지는 않는다.
- 개별 데이터 연결 보호전송용 데이터 연결에서도 협상된 보호 수준에 따라 를 사용하여 목록이나 파일 내용을 전달한다. 클라이언트와 서버의 요구 정책이 맞아야 전송이 성립한다.
12IIS FTP의 역할·사이트·인증·NTFS
- FTP에서는 기능 설치, FTP 서비스 상태, 개별 사이트의 바인딩·물리 경로가 서로 다른 구성 요소다.
- 가 Running이어도 해당 사이트는 중지되어 있거나 다른 주소에 바인딩되어 있을 수 있다.
- 인증물리 디렉터리가 존재하는 것만으로 사이트와 인증 설정이 생성되었다고 판단하지 않는다.
- 자동 설정의 선행 조건자동화에서도 디렉터리 존재 여부를 사이트 전체의 완료 조건으로 쓰지 않는다.
- IIS·FTPIIS FTP에서는 사용자가 누구인지 확인하는 인증, 허용 사용자와 읽기·쓰기를 정하는 FTP 규칙, 실제 파일·디렉터리의 NTFS 권한을 함께 충족해야 한다.
- 인증·Basic 인증을 사용할 때는 로 제어 연결을 보호하고 익명 접근을 필요한 범위로 제한한다.
- 정책의 controlChannelPolicy와 dataChannelPolicy를 각각 필수로 설정하는 구조를 이해하고, 전역 포트 범위가 다른 FTP 사이트에 미치는 영향도 고려한다.
Get-Service ftpsvc
Import-Module WebAdministration
Get-Website | Select-Object Name, State, PhysicalPath, Bindings설치된 IIS 환경에서 서비스와 사이트 상태를 별도로 조회하는 예시. 역할 설치·사이트 생성·시작 명령은 포함하지 않았다.
13정상 전송을 단계별로 검증하기
- 제어 연결·서버 바인딩 → 제어 연결 → 인증서 → → 경로 → 협상 → 데이터 연결 → 전송 완료 순서로 상태를 연결한다.
- 인증·데이터 연결530 같은 인증 거부, 425 같은 데이터 연결 실패, 550 같은 파일 작업 거부는 출발점이 다른 증상이며 실제 명령과 로그를 함께 읽는다.
- ·패킷 캡처 위치가 전후인지, 내부 내용을 볼 수 있는 위치인지도 해석에 영향을 준다.
- 바이너리읽기·쓰기·목록과 허용하지 않은 경로 접근을 각각 시험하고 바이너리 파일의 전후 해시를 비교하면 전송 내용의 일치를 확인할 수 있다.
- ASCII·전송ASCII 전송 모드는 줄 끝 표현을 변환할 수 있으므로 바이트가 그대로 유지되어야 하는 파일에는 이진 전송을 사용한다.
- 실행 명령은 서버를 실제 시작할 수 있으므로 단순 문법 검사 명령과 구분한다.
- 설정과 실제 전송의 대조서비스 상태, 적용 설정, 로그와 클라이언트 동작을 따로 확인한다.
이해했는지 확인하기
- 제어와 데이터 연결의 방향·포트·완료 응답을 구별한다.
- 로그인 성공과 경로 인가·파일 쓰기 권한을 별도로 설명한다.
- 제어·데이터 TLS 정책과 인증서 검증, 정상·거부 시험 결과를 연결한다.