su-tudy 님의 블로그
#7 FTP 서버 구축 — Pure-FTPd & FileZilla & 호스트 전용 어댑터 본문
📌 협업을 위한 파일 업로드 환경 만들기
웹 서버에 파일을 올리려면 매번 PuTTY 명령어를 써야 한다. 하지만 리눅스를 모르는 협업자가 파일을 업로드해야 하는 상황이라면? FTP 서버를 구축해 두면 상대방은 FileZilla 만 열어서 드래그&드롭으로 파일을 올릴 수 있다.
또한 Pure-FTPd와 MariaDB를 연동하면 사용자마다 접근 가능한 폴더를 다르게 지정할 수 있다. 예를 들어 site1 담당자는 /web/site1에만, site2 담당자는 /web/site2에만 접근하도록 권한을 분리할 수 있다.
📌 미리 알아두면 좋은 개념
❑ 대표적인 원격 프로토콜 3가지
| HTTP | SSH / SFTP | FTP |
| 웹 서비스 제공에 사용되는 프로토콜. 브라우저와 서버가 통신하는 방식. | 리눅스 원격 제어 및 암호화된 파일 전송. PuTTY, FileZilla가 이 방식을 사용. | 원격 파일 전송 전용 프로토콜. Pure-FTPd가 이 방식을 담당. |
| 80 / 443 | 22 | 21 |
❑ 능동형 vs 수동형 FTP
| 능동형 (Active) | 수동형 (Passive) |
| 서버가 클라이언트에게 데이터 연결을 시도한다. 클라이언트 방화벽에 막히는 경우가 많다. | 클라이언트가 서버에게 데이터 연결을 시도한다. 방화벽 문제가 적어 일반적으로 권장되며, 호스트 전용 어탭터 환경에서 사용한다. |
❑ 호스트 전용 어댑터란?
기존 NAT 방식은 포트포워딩을 통해 호스트 → 가상머신으로 접속했다. 호스트 전용 어댑터를 추가하면 가상머신이 호스트 PC와 직접 통신할 수 있는 전용 네트워크가 생긴다. 포트포워딩 없이도 IP 주소만으로 바로 접속할 수 있어 FTP처럼 여러 포트를 쓰는 서비스에 훨씬 편리하다.
네트워크 방식 비교
호스트 PC → 포트포워딩 → 가상머신 (NAT)
: 포트별로 일일이 설정 필요
호스트 PC → 직접 통신 → 가상머신 (호스트 전용)
: IP 주소로 바로 접속 가능
📌 진행한 실습 과정 정리
❑ FileZilla로 SFTP 연결 (SSH 방식)
본격적인 FTP 서버 구축 전에, FileZilla를 SSH 방식(SFTP)으로 먼저 연결해 파일 전송 기능을 확인한다.
- FileZilla 설치 후 실행 : 파일 → 사이트 관리자 → 새 사이트
- 아래 정보 입력 후 연결
FileZilla 사이트 관리자 입력값
프로토콜 : SFTP - SSH File Transfer Protocol
호스트 : 127.0.0.1
포트 : 설정해 두었던 SSH 포트 번호
유형 : 비밀번호 묻기
사용자 : 리눅스 계정 이름

❑ 이미지 업로드 테스트
연결 성공 후 FileZilla에서 파일을 드래그해 서버로 전송하고, 웹 브라우저에서 이미지가 잘 뜨는지 확인한다.
- 파일질라에 드래그로 사진 전송
- PuTTY에서 파일 전송 확인
- 파일을 웹서버 경로로 이동
- HTML 파일 생성
- 브라우저에서 확인
# PuTTY에서 파일 전송 확인
cd ~
ls
# 파일을 웹서버 경로로 이동
mv 사진파일명 /web/site0/public
# HTML 파일 생성
vim /web/site0/public/파일이름.html
# HTML 파일 내용 추가
<hr />
<img src="사진파일명.jpg">
# 브라우저에서 확인
127.0.0.1:포트번호/파일이름.html
❑ Pure-FTPd 설치 및 설정
# 기존 pure-ftpd 완전 삭제 (깔끔하게 재설치를 위해서)
sudo yum remove pure-ftpd -y
sudo rm -rf /etc/pure-ftpd
# pure-ftpd 설치
sudo yum install pure-ftpd -y
# 설정 파일 열기
sudo vim etc/pure-ftpd/pure-ftpd.conf
# /my 검색 → MYSQLConfigFile 줄 주석(#) 제거
/my
# 수정 후 저장
:wp!

# mysql 소켓 파일 경로 확인
sudo locate mysql | fgrep sock
# pureftpd-mysql 설정 파일 열기
sudo vim /etc/pure-ftpd/pureftpd-mysql.conf
# /my 검색
/my
# 아래 항목 수정
MYSQLSocket /var/lib/mysql/mysql.sock
MYSQLUser pureftpd # MariaDB 접속 ID
MYSQLPassword 비밀번호 # MariaDB 접속 PW
MYSQLDatabase pureftpd # FTP 사용자 정보 DB
MYSQLCrypt cleartext # 비밀번호 평문 저장


❑ MariaDB와 Pure-FTPd 연동
FTP 사용자 정보를 MariaDB로 관리하면 사용자별 접근 폴더를 DB에서 쉽게 제어할 수 있다.
# MariaDB 접속
mysql -u root -p
# pureftpd 전용 계정 생성 (pureftpd DB만 조작 가능)
GRANT ALL PRIVILEGES ON pureftpd.* TO pureftpd@`localhost` IDENTIFIED BY '비밀번호';
-- pureftpd 전용 DB 생성
DROP DATABASE IF EXISTS pureftpd;
CREATE DATABASE pureftpd;
USE pureftpd;
-- FTP 사용자 정보를 저장할 users 테이블 생성
CREATE TABLE users (
uidx int(10) unsigned NOT NULL AUTO_INCREMENT,
`user` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`gid` int(10) unsigned NOT NULL,
`uid` int(10) unsigned NOT NULL,
occurDate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`status` tinyint(1) unsigned NOT NULL DEFAULT '1',
ipaccess varchar(15) NOT NULL,
comment varchar(100) NOT NULL,
ulBandWidth smallint(5) unsigned NOT NULL,
dlBandWidth smallint(5) unsigned NOT NULL,
quotaSize smallint(5) unsigned NOT NULL,
quotaFiles int(10) unsigned NOT NULL,
`dir` varchar(100) NOT NULL,
PRIMARY KEY (`uidx`)
);
-- FTP 계정 생성 및 접근 폴더 지정
INSERT INTO `users` VALUES
(1,'site1','korea1231',1000,1000,NOW(),1,'*','',0,0,0,0,'/web/site1'),
(2,'site2','korea1231',1000,1000,NOW(),1,'*','',0,0,0,0,'/web/site2'),
(3,'site3','korea1231',1000,1000,NOW(),1,'*','',0,0,0,0,'/web/site3');
-- 등록된 FTP 계정 확인
SELECT * FROM users;
sudo vim /etc/passwd로 확인할 수 있다. 일반 계정은 보통 1000번부터 시작한다.# pure-ftpd 자동 시작 설정 및 재시작
sudo systemctl enable pure-ftpd
sudo systemctl restart pure-ftpd
# FTP 클라이언트 설치 후 접속 테스트
sudo yum install ftp
ftp 127.0.0.1
# name : DB에 등록한 아이디 (site1, site2 등)
# passwd : DB에 등록한 비밀번호
❑ FTP 포트포워딩 및 FileZilla FTP 연결
- VirtualBox → 포트포워딩 → 규칙 추가 (호스트 포트: 임의설정 / 게스트 포트 21)
- FileZilla → 파일 → 사이트 관리자 → 새 사이트
FileZilla FTP 접속 정보
프로토콜 : FTP
호스트 : 127.0.0.1
포트 : 포트포워딩에서 설정한 포트
유형 : 비밀번호 묻기
사용자 : DB에 등록한 아이디 (site1, site2 등)
전송 설정 : 능동형으로 연결
❑ 호스트 전용 어댑터 설정
Passive 포트 대역을 설정하고 호스트 전용 어댑터를 추가해 포트포워딩 없이 직접 접속할 수 있도록 구성한다.
# Passive 포트 범위 설정 (1000개 포트 할당)
sudo vim /etc/pure-ftpd/pure-ftpd.conf
# /passive 검색 → PassivePortRange 주석 제거
PassivePortRange 49001 50000
# pure-ftpd 재시작
sudo systemctl restart pure-ftpd
- VirtualBox에서 CentOS 우클릭 → 정지 → ACPI 종료
- 설정 → 네트워크 → 어댑터 2 → 네트워크 어댑터 활성화 체크 → 호스트 전용 어댑터 → VirtualBox Host-Only Ethernet Adapter 선택
- VirtualBox 재시작 후 ip addr로 새 랜카드 IP 확인
- PuTTY에서 새 IP 주소로 재연결


192.168.56.x 대역이다. ip addr로 정확한 주소를 확인한 후 사용한다.
❑ FileZilla에서 FTP(Pure-FTPd) 방식으로 최종 연결
- FileZilla → 파일 → 사이트 관리자 → 기존 사이트 모두 삭제 → 새 사이트
- 아래 정보 입력 후 연결
호스트 전용 어댑터 기반 FTP 접속 정보
프로토콜 : FTP
호스트 : 192.168.56.x (호스트 전용 어댑터 IP)
포트 : 21 (기본값, 비워도 됨)
유형 : 비밀번호 묻기
사용자 : DB에 등록한 아이디
전송 설정 : 수동형(Passive)으로 변경
⚠️ 오류 / 주의
🚨 오류 — FTP 접속은 되는데 파일 목록이 안 보일 때
FileZilla 전송 모드가 능동형으로 설정되어 있을 가능성이 높다. 사이트 관리자 전송 설정 탭에서 수동형(Passive)으로 변경하고 재연결한다.
🚨 오류 — pure-ftpd 재시작이 실패할 때
sudo journalctl -u pure-ftpd -n 30으로 최근 로그를 확인한다. 대부분 설정 파일의 경로 오타이거나 mysql 소켓 파일 경로가 틀린 경우다.
📌 요약
✔️ FileZilla를 STFP 방식으로 연결해 파일 전송 기능 확인
✔️ Pure-FTPd를 설치하고 MariaDB와 연동해 사용자별 접근 폴더를 DB로 관리
✔️ Passive 포트 대역을 설정하고 호스트 전용 어댑터를 추가
✔️FileZilla에서 수동형(Passive) FTP로 사용자별 접속을 확인했다.
다음 편으로 이동 🔜 #8 개발 환경 구축 — PHP & EditPlus & Docker
'리눅스 > Linux 실습' 카테고리의 다른 글
| #9 실전 배포 — 클라우드 서버 & Docker & Django (0) | 2026.04.23 |
|---|---|
| #8 개발 환경 구축 — PHP & EditPlus & Docker (0) | 2026.04.15 |
| #6 데이터베이스 구축 — MariaDB & SQLyog (0) | 2024.12.09 |
| #5 웹 서버 구축 — Nginx 설치 & Virtual Hosting (0) | 2024.11.24 |
| #4 보안 설정 — 방화벽(firewalld) & SELinux 비활성화 (0) | 2024.11.23 |