개념 사전 · 프로그램

vsftpd

Very Secure FTP Daemon

는 Unix 계열 시스템에서 FTP·FTPS 서비스를 제공하는 서버 프로그램이다. 인증·사용자 목록··파일 권한·데이터 포트 설정을 조합하여 허용할 파일 전송을 구성한다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • FTP 명령과 파일·목록 데이터 연결을 처리한다.
  • 로컬 또는 구성된 계정 인증과 사용자 접근 제한을 적용한다.
  • 와 쓰기· 정책으로 파일 전송 범위를 통제한다.

02어떤 순서로 동작하나

  1. 접속·인증

    클라이언트 연결에 FTP 응답을 제공하고 익명·로컬 사용자 정책 및 조건을 적용한다.

  2. 사용자·경로 제한

    사용자 목록과 설정으로 접속 및 보이는 경로 범위를 정한다.

  3. 전송 연결 수립

    선택한 active·passive 모드와 포트 범위, FTPS 데이터 보호 조건으로 별도 연결을 만든다.

  4. 파일 연산

    등 서버 정책과 실제 파일 시스템· 권한의 교집합에서 읽기·쓰기를 수행하고 완료 응답을 반환한다.

03먼저 알아둘 용어와 구성요소

은 익명 접근과 관련된다.
인증·계정 조건 등을 모듈로 검사하는 의 인증 체계이다. 의 로컬 사용자 로그인은 배포판의 구성과 금지 사용자 정책 영향을 받을 수 있다.
에서 사용자 이름 목록과 userlist_enable·userlist_deny의 조합으로 로그인 허용·거부를 정하는 기능이다. 목록에 이름이 있다는 사실만으로 허용 여부를 단정하지 않는다.
는 가 보는 파일 경로의 루트를 제한하는 기능이다.
은 FTP 쓰기 명령을 허용하는 서비스 설정이며 실제 쓰기 권한을 새로 만들어 주지는 않는다. 계정의 디렉터리 탐색 권한, 대상 디렉터리 쓰기 권한, , 같은 정책도 충족해야 한다.
는 데이터 연결의 보호를 요청하는 방식이다.
LEARN THROUGH PRACTICE

FTP 로그인과 PORT·STOR·226 전송 완료를 나누어 읽기

제어 연결의 인증, 별도 데이터 연결, 전송 완료 응답과 파일 로그를 한 처리 흐름에 대입한다.

실습 구성과 전제

  • 로그인 패킷과 파일 업로드·xferlog 화면은 서로 다른 연결 사례다. 동일 세션의 처음부터 끝까지라고 묶지 않는다.
  • 평문 FTP의 구조를 해석하는 격리 실습이다. 실제 자격 정보는 전재하지 않고 업로드 파일도 무해한 테스트 자료로 한정한다.
  1. 제어 연결에서 인증 상태의 변화를 찾는다

    • 서버의 220 인사 뒤 USER에 대한 331은 추가 암호가 필요하다는 응답이고 PASS 뒤 230은 해당 로그인의 성공이다. 아직 파일 데이터가 전달된 것은 아니다.
    • 평문 FTP에서는 이 명령들이 패킷에 보일 수 있다. SFTP는 SSH 기반의 다른 프로토콜이며, FTPS는 FTP에 를 적용하므로 용어를 구분해야 한다.
    FTP 패킷 분석 (2)원본 크기로 보기 ↗
    • 캡처에 vsFTPd의 220 인사와 USER·PASS 명령 흐름이 보인다.
    • 응답은 USER 뒤 331, PASS 뒤 230으로 바뀌어 인증 단계의 진행을 보여 준다.
    확인 기준

    로그인 성공을 파일 읽기·쓰기 권한의 성공으로 확대하지 않는다. 자격 정보 값은 학습 본문에 복사하지 않는다.

  2. PORT 협상 뒤 별도 데이터 전송을 시작한다

    • 업로드 사진은 PORT 성공 응답 뒤 파일 전송 준비와 완료가 이어지는 active 방식 사례다. PORT는 서버가 접속할 클라이언트 데이터 수신 지점을 알린다.
    • 150은 전송을 시작할 준비를 나타내며 최종 성공이 아니다. 이때 제어 연결과 별도의 데이터 연결이 성립해야 실제 파일 내용이 이동한다.
    text
    C: 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이며 실제 사진의 할당 포트가 아니다.

    6/1 - 서버 로그 분석 + rocky 에서 dhcp · 실습·개념 참고 화면 6원본 크기로 보기 ↗
    • put 명령 뒤 200 PORT command successful과 PASV 사용을 고려하라는 안내가 보인다.
    • 150 Ok to send data 뒤 226 Transfer complete와 2156 bytes가 표시된다.
    확인 기준

    인증은 되는데 데이터 전송이 멈추면 데이터 연결 방향과 ·방화벽을 확인한다. PORT 성공만으로 데이터 연결까지 성공했다고 단정하지 않는다.

  3. 완료 응답과 전송 로그를 파일 내용에 연결한다

    • 업로드 화면과 xferlog에는 2156바이트라는 전송량을 대조할 수 있다. 같은 시각·방향·파일을 확인한 뒤 일치 여부를 읽는다.
    • 파일명에 보이는 이스케이프나 문자 표현만으로 곧바로 URL 인코딩이라고 단정하지 않는다. FTP 클라이언트와 로그 표현·문자 인코딩의 차이를 구분하고 필요하면 파일 해시도 확인한다.
    bash
    stat -c "%s %n" ./lab.txt
    sha256sum ./lab.txt

    허용된 양 끝 시스템에서 준비한 테스트 파일의 크기와 해시를 비교하는 조회 예시다.

    확인 기준

    226과 바이트 수 일치는 전송 완료의 근거다. 내용 무결성까지 요구한다면 서버에 저장된 크기·해시를 원본과 비교하며, 텍스트 전송 모드의 변환 가능성도 확인한다.

실습에서 확인한 동작 원리

  • FTP 인증, PORT/PASV 협상, 데이터 전송, 최종 완료 응답은 서로 다른 단계다.
  • 화면·응답 코드·전송 로그·파일 해시를 연결하면 전송 성공의 의미와 한계를 구체적으로 설명할 수 있다.
관련 개념·전체 실습 화면 이어서 읽기 →
동작·명령 참고 문서

04예제로 따라가기

  • FTP 전용 계정의 셸이 nologin일 때 실제 인증 허용은 구성과 사용자 목록에 영향을 받으므로 셸 이름 하나로 판단하지 않는다.
  • 로그인 디렉터리의 루트와 사용자가 쓰는 업로드 하위 디렉터리를 분리하면 경로 제한과 쓰기 권한을 구분해 설계할 수 있다.
  • passive 포트 범위를 서버에 지정해도 ·방화벽에 실제 전달 경로가 없으면 인증 뒤 파일 전송이 실패할 수 있다.

05혼동하기 쉬운 점과 확인 기준

  • 해결을 위해 검사를 일괄 제거하기보다 실제 인증 경로와 계정 정책을 이해해야 한다.
  • 커널을 공유하는 에 대한 완전한 가상화나 모든 공격을 막는 경계는 아니다.
  • FTPS에서는 제어 명령이 암호화되어 중간 장비가 PASV 내용을 읽어 동적으로 포트를 열어 주는 FTP helper에 의존하기 어려울 수 있다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.