클릭하여 터미널 활성화

Ubuntu FTP 서버 구축 | vsftpd 설치부터 WinSCP 접속까지

// WSL2 · Ubuntu · FTP · vsftpd
처음 보는 사람도 이해할 수 있게 — 개념부터 접속 확인까지 한 번에

왜 WSL2에서 구축하냐면

Linux 서버 실습하려고 VM 켜는 게 너무 무거웠다.

"그냥 Windows에서 바로 되면 안 돼?"

WSL2면 가능하다. Ubuntu 올리고 vsftpd 설치하면 VM 없이도 FTP 서버가 돌아간다. WinSCP로 같은 PC에서 바로 접속 확인까지 된다. 그래서 이렇게 했다.

Ubuntu vs Rocky Linux 차이점
패키지 관리자: Rocky dnf → Ubuntu apt
설치 명령어: dnf install vsftpdapt install vsftpd
방화벽: Rocky firewalld → Ubuntu ufw (WSL2에서는 둘 다 기본 비활성화)
나머지 vsftpd 설정, WinSCP 접속 방법은 동일!

이게 전부다. 추가로 구성한 것들:

vsftpd 설치 (apt)
Ubuntu 패키지 관리자로 한 번에 설치
vsftpd.conf 설정
로컬 계정 허용, 업로드 허용, 패시브 모드, chroot
FTP 접속용 계정 생성 (adduser)
root 대신 별도 ftpuser 계정으로 접속
WinSCP로 접속 확인
같은 PC의 Windows에서 localhost로 바로 접속

기술 스택

OS
Windows + WSL2
Ubuntu 20.04 / 22.04
FTP SERVER
vsftpd
Very Secure FTP Daemon
PACKAGE
apt
Ubuntu 패키지 관리자
CLIENT
WinSCP
Windows FTP/SFTP 클라이언트

Ubuntu 쓴 이유는 단순하다. WSL2 기본 배포판이고, apt 패키지 관리가 편하고, vsftpd 설치가 한 줄이다.

구조

CONFIG FILES
/etc/vsftpd.conf            ← FTP 서버 메인 설정
/home/ftpuser/              ← FTP 접속 시 루트 디렉터리
Windows WinSCP
    localhost : 22           ← 같은 PC에서 접속
    172.x.x.x : 21          ← WSL2 IP로 접속 (FTP)

설정 파일 1개짜리 구성이다. 단순한 게 최고다.

FTP란? vsftpd란?

개념 정리
FTP     File Transfer Protocol  — 파일 주고받는 통신 규약, 포트 21
vsftpd   Very Secure FTP Daemon  — 리눅스 대표 FTP 서버 프로그램
WinSCP   Windows SCP/FTP 클라이언트 — GUI로 파일 전송
💡
실습 환경
OS: Windows 10/11 + WSL2 Ubuntu
FTP 서버: vsftpd  /  기본 포트: 21
접속 확인: Windows WinSCP

WSL2 IP 확인하는 방법

WinSCP 접속 시 필요한 IP를 먼저 확인한다. WSL2는 재시작마다 IP가 바뀌므로 작업 전에 꼭 확인한다.

Ubuntu (WSL2)
user@DESKTOP:~$ hostname -I
172.x.x.x  ← 이 IP를 WinSCP에서 사용
💡
같은 PC라면 localhost로 접속 가능
같은 Windows에서 WinSCP로 접속할 때는 IP 대신 localhost를 써도 된다. IP가 바뀌어도 영향 없어서 편리하다.

vsftpd 설치하는 방법

Ubuntu는 apt로 설치한다. 먼저 패키지 목록을 업데이트하고 설치한다.

💡
apt update는 왜 먼저 해야 하나?
apt update는 설치 가능한 패키지 목록만 갱신하는 명령어다. 이걸 먼저 해야 최신 버전의 vsftpd를 설치할 수 있다. 실제 설치나 업그레이드는 안 된다.
Ubuntu (WSL2)
# 패키지 목록 업데이트
user@DESKTOP:~$ sudo apt update
... (업데이트 진행)
Reading package lists... Done
# vsftpd 설치
user@DESKTOP:~$ sudo apt install -y vsftpd
... (설치 진행)
Processing triggers for man-db ... Done
apt update 실행 & apt install -y vsftpd 설치 완료

vsftpd.conf 설정하는 방법

vsftpd 설정 파일을 수정한다. 수정 전 백업을 먼저 해두는 게 좋다.

⚠️
Ubuntu와 Rocky Linux 경로 차이
Rocky Linux: /etc/vsftpd/vsftpd.conf
Ubuntu: /etc/vsftpd.conf폴더 없이 바로 있음!
Ubuntu (WSL2)
# 수정 전 백업
user@DESKTOP:~$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
user@DESKTOP:~$ sudo vi /etc/vsftpd.conf

아래 항목을 찾아서 수정하거나 추가한다. #으로 주석 처리된 항목은 #을 제거해서 활성화한다.

/etc/vsftpd.conf — 수정 내용
# 익명 접속 비활성화
anonymous_enable=NO
# 로컬 계정 접속 허용 (#제거)
local_enable=YES
# 파일 업로드 허용 (#제거)
write_enable=YES
# 홈 디렉터리 이탈 방지 (#제거)
chroot_local_user=YES
# chroot 사용 시 쓰기 허용 (새로 추가)
allow_writeable_chroot=YES
# 패시브 모드 설정 (새로 추가)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30100
pasv_address=172.x.x.x ← 본인 WSL2 IP로 변경!
⚠️
삽질 포인트
chroot_local_user=YES로 설정했는데 allow_writeable_chroot=YES를 빠뜨리면 "500 OOPS: vsftpd: refusing to run with writable root" 오류가 난다. 반드시 같이 추가할 것.
💡
각 설정 항목 쉽게 이해하기
local_enable=YES — Ubuntu 계정으로 FTP 로그인 허용
write_enable=YES — 업로드 허용. NO면 다운로드만 됨
chroot_local_user=YES — 사용자가 홈 디렉터리 밖으로 못 나가게 가둠
pasv_address — WSL2 IP 지정. 없으면 패시브 모드 파일 전송 안 됨
vi /etc/vsftpd.conf 실행

vsftpd.conf 설정 완료 화면

vsftpd 서비스 시작하는 방법

Ubuntu (WSL2)
# 서비스 시작
user@DESKTOP:~$ sudo systemctl start vsftpd
# 부팅 시 자동 시작 등록
user@DESKTOP:~$ sudo systemctl enable vsftpd
# 상태 확인
user@DESKTOP:~$ sudo systemctl status vsftpd
● vsftpd.service - vsftpd FTP server
   Active: active (running) ← 이렇게 나오면 성공!
systemctl start + enable + status vsftpd

FTP 접속용 계정 만드는 방법

root 계정은 기본적으로 FTP 접속이 막혀 있다. 별도 계정을 만들어서 접속한다.

Ubuntu (WSL2)
# 새 사용자 생성
user@DESKTOP:~$ sudo adduser ftpuser
Adding user 'ftpuser' ...
New password: [비밀번호 입력]
Retype new password: [비밀번호 재입력]
passwd: password updated successfully
💡
Ubuntu는 adduser, Rocky는 useradd
Ubuntu adduser는 홈 디렉터리 생성까지 자동으로 해준다. Rocky의 useradd와 결과는 동일하다.
adduser ftpuser 사용자 생성

WinSCP로 접속하는 방법

Windows에서 WinSCP를 열고 아래 정보를 입력해서 접속한다.
WinSCP는 winscp.net 에서 무료 다운로드 가능하다.

WinSCP 접속 정보
프로토콜          : SFTP
호스트(Host)      : localhost 또는 STEP 02에서 확인한 WSL2 IP
사용자명(Username): ftpuser ← STEP 06에서 만든 계정
비밀번호(Password): 설정한 비밀번호
포트(Port)       : 22
WinSCP 접속 정보 입력 (호스트이름 = 서버 IP)

WinSCP FTP 접속 성공!

접속 성공!
WinSCP 오른쪽 창에 Ubuntu 파일 목록이 보이면 FTP 서버 구축 완료다 🎉

전체 흐름 요약

SETUP FLOW
01hostname -I WSL2 IP 확인
02apt update 패키지 목록 업데이트
03apt install -y vsftpd vsftpd 설치
04vi /etc/vsftpd.conf 설정 수정
05systemctl start + enable vsftpd 서비스 시작
06adduser ftpuser FTP 접속용 계정 생성
07WinSCP FTP 접속 성공 ✓

간단한데 이거 없으면 파일 전송할 때마다 scp 명령어 쳐야 해서 불편하다. WinSCP 붙여두면 드래그앤드롭으로 끝난다.

자주 묻는 질문 (FAQ)

Q. WinSCP에서 "Connection refused" 오류가 나요
1. sudo systemctl status vsftpd — 서비스 running 상태 확인
2. hostname -I — IP 재확인 (WSL2는 재시작마다 IP 변경됨)
3. localhost로 접속 시도해보기
Q. "500 OOPS: vsftpd: refusing to run with writable root" 오류
/etc/vsftpd.confallow_writeable_chroot=YES를 추가하고 sudo systemctl restart vsftpd로 재시작하면 해결된다.
Q. WSL2 재시작 후 FTP가 안 돼요
WSL2는 재시작 시 서비스가 자동으로 안 올라올 수 있다. sudo systemctl start vsftpd로 수동 시작하거나, /etc/wsl.conf에 systemd 설정을 추가해서 자동 시작되도록 설정하면 된다.
Q. 파일 업로드가 안 돼요
/etc/vsftpd.conf에서 write_enable=YES가 설정됐는지 확인하고 sudo systemctl restart vsftpd로 재시작해보면 된다.
// 교훈
Ubuntu로 더 쉽게 구축하는
FTP 서버, 이제 직접 만들어봤다.
Tags: #Ubuntu #WSL2 #vsftpd #FTP #서버구축 #WinSCP