Overview
FTP(File Transfer Protocol)는 클라이언트와 서버 간 파일 전송을 위한 표준 네트워크 프로토콜이다.
인터넷에서 사용된 가장 오래된 프로토콜 중 하나이며, 대용량 파일 전송 및 서버 간 데이터 공유를 위해 여전히 널리 사용된다.
이 글에서는 FTP의 개념, FTP 서버 설정 방법, 보안 설정 및 실습 방법에 대해 다룬다.

FTP란?
FTP(파일 전송 프로토콜)는 TCP/IP 네트워크를 통해 파일을 업로드 및 다운로드할 수 있도록 해주는 프로토콜이다.
보안이 강화된 SFTP(Secure FTP) 또는 FTPS(FTP Secure)가 사용되기도 하지만, FTP는 여전히 많은 환경에서 활용되고 있다.
💡 FTP의 특징
- 클라이언트-서버 모델을 기반으로 동작
- 명령(제어) 채널과 데이터 채널을 분리하여 사용 (포트 21, 20)
- 익명(Anonymous) FTP 및 인증 기반 FTP 지원
- 액티브 모드(Active)와 패시브 모드(Passive) 지원
✅ FTP 포트
포트 | 설명 |
21 | FTP 제어(Control) 채널 |
20 | FTP 데이터 전송 채널 (Active Mode) |
1024~65535 | Passive Mode 데이터 채널 (랜덤) |
FTP Server 설정 (vsftpd)
Linux에서 가장 널리 사용되는 FTP 서버 소프트웨어는 vsftpd (Very Secure FTP Daemon)이다.
💡 vsftpd의 특징
- 보안성이 뛰어난 FTP 서버
- chroot 환경 지원 (사용자의 홈 디렉터리 제한)
- 익명(Anonymous) FTP 접속 가능 여부 설정 가능
- Passive Mode 지원
vsftpd 설치 및 방화벽 설정
1️⃣ 패키지 설치
yum -y install vsftpd # CentOS/RHEL
apt install vsftpd -y # Ubuntu/Debian
2️⃣ 서비스 활성화
systemctl enable vsftpd
systemctl start vsftpd
3️⃣ 방화벽 설정
firewall-cmd --permanent --add-port=21/tcp # FTP 기본 포트
firewall-cmd --permanent --add-service=ftp # FTP 서비스 추가
firewall-cmd --reload # 방화벽 설정 적용
✅ 방화벽 설정 확인
firewall-cmd --list-all
FTP 환경설정 (vsftpd.conf)
FTP 서버의 주요 설정 파일은 `/etc/vsftpd/vsftpd.conf` 이다.
설정을 변경하려면 이 파일을 수정해야 한다.
vi /etc/vsftpd/vsftpd.conf
1️⃣ 익명(Anonymous) 접속 비활성화
anonymous_enable=NO # 익명 사용자 접속 차단
2️⃣ 로컬 사용자 로그인 허용
local_enable=YES # 로컬 사용자 계정 접속 허용
3️⃣ 쓰기(업로드) 허용
write_enable=YES # 파일 업로드 허용
4️⃣ 사용자의 홈 디렉터리 제한 (chroot)
chroot_local_user=YES # 사용자가 자신의 홈 디렉터리만 접근 가능
✅ 특정 사용자만 chroot 제한을 해제하려면
chroot_list_enable=YES # 특정 사용자만 제한 해제
chroot_list_file=/etc/vsftpd/chroot_list # 예외 사용자 리스트 파일
📌 예외 사용자 설정
echo "username" >> /etc/vsftpd/chroot_list
FTP 사용자 추가 및 권한 설정
1️⃣ FTP 전용 사용자 생성
useradd -m ftpuser -s /sbin/nologin # FTP 전용 계정 (SSH 로그인 차단)
passwd ftpuser # 비밀번호 설정
2️⃣ FTP 디렉터리 및 권한 설정
mkdir -p /home/ftpuser/ftp # FTP 디렉터리 생성
chown -R ftpuser:ftpuser /home/ftpuser/ftp # 소유권 변경
chmod 750 /home/ftpuser/ftp # 디렉터리 권한 설정
✅ 파일 업로드를 허용하려면
mkdir /home/ftpuser/ftp/upload
chmod 770 /home/ftpuser/ftp/upload
FTP 접속 테스트
FTP 클라이언트를 사용하여 FTP 서버에 접속할 수 있다.
1️⃣ Linux에서 FTP 접속
ftp 192.168.1.100
- 사용자명과 비밀번호 입력 후 접속
- `ls` → 파일 목록 확인
- `put test.txt` → 파일 업로드
- `get test.txt` → 파일 다운로드
2️⃣ Windows에서 FTP 접속
- Windows 파일 탐색기에서 `ftp://192.168.1.100` 입력 후 접속
FTP 보안 강화
FTP는 기본적으로 평문(Plaintext)으로 인증 정보를 전송하기 때문에 보안 설정이 필요하다.
1️⃣ FTPS (SSL/TLS) 활성화
ssl_enable=YES # FTPS 활성화
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem # SSL 인증서 경로
rsa_private_key_file=/etc/pki/tls/private/vsftpd.pem # 개인 키 경로
📌 SSL 인증서 생성
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/vsftpd.pem -out /etc/pki/tls/certs/vsftpd.pem
2️⃣ FTP 패시브 모드 설정 (방화벽 문제 해결)
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
✅ 방화벽에서 패시브 포트 열기
firewall-cmd --permanent --add-port=40000-50000/tcp
firewall-cmd --reload
마무리
FTP는 클라이언트와 서버 간 파일 전송을 위한 오래된 프로토콜이지만, 여전히 널리 사용된다.
vsftpd를 통해 FTP 서버를 설정하고, 보안을 강화하며, 패시브 모드를 구성하면 보다 안정적인 환경을 구축할 수 있다.
💡 정리
- FTP는 TCP 21번 포트를 사용하며, 데이터 전송을 위한 포트도 필요
- vsftpd를 사용하면 보안성이 높은 FTP 서버를 구축 가능
- 기본적으로 로컬 사용자만 로그인 가능하도록 설정하는 것이 안전함
- FTPS(SSL/TLS) 설정을 통해 보안을 강화할 수 있음
이제 FTP 서버를 설정하고, 실습을 통해 익혀보자!
Reference
- `man vsftpd.conf`
- vsftpd 공식 문서
'Networking, Security, Protocols' 카테고리의 다른 글
RSA 공개키를 이용한 SSH 접속 (0) | 2022.01.20 |
---|---|
DNS(Domain Name System) (0) | 2022.01.19 |
NFS(Network File System) / auto fs(auto file system) (0) | 2022.01.18 |
SCP(Secure Copy) (0) | 2022.01.17 |
SSH(Secure Shell) (0) | 2022.01.17 |