📁 FTP(File Transfer Protocol) 정리
FTP는 파일 전송을 위한 표준 프로토콜로, 클라이언트와 서버 간에 파일을 업로드하거나 다운로드하는 데 사용된다. TCP/IP 기반에서 동작하며, 제어 연결과 데이터 연결을 통해 효율적인 파일 전송을 지원한다. 📡
🔄 FTP의 동작 원리
FTP는 두 가지 연결을 통해 통신을 수행한다.
1. 제어 연결 (Control Connection)
- 목적: 로그인, 명령어 전송, 응답 수신 등 제어 정보를 주고받는 연결
- 포트 번호: TCP 21번 포트
- 특징: 연결 유지형, 접속 종료까지 유지됨
- 예시: 사용자 로그인, 디렉터리 탐색, 파일 전송 명령 전송 등
2. 데이터 연결 (Data Connection)
- 목적: 실제 파일을 전송하는 연결
- 포트 번호: Active 모드: 서버 20번 / Passive 모드: 랜덤 포트
- 특징: 전송할 때만 연결, 끝나면 끊김
- 예시: 파일 다운로드/업로드, 디렉터리 목록 전송 등
🔧 데이터 연결 방식
✅ Active Mode (액티브 모드)
1. 클라이언트 → 서버로 21번 포트로 제어 연결 수립
2. 클라이언트가 자신이 열어놓은 포트 번호를 서버에게 알려줌
3. 서버는 20번 포트를 사용해 클라이언트 포트로 데이터 연결 시작 (SYN)
- 장점: 설정이 간단
- 단점: 클라이언트가 방화벽 뒤에 있을 경우 연결 실패 가능성 높음 ❌
✅ Passive Mode (패시브 모드)
1. 클라이언트 → 서버로 제어 연결 수립 (포트 21)
2. 클라이언트가 PASV 명령 전송
3. 서버가 자신이 열어놓은 데이터 포트를 클라이언트에게 알려줌
4. 클라이언트가 해당 포트로 서버에게 데이터 연결 요청 (SYN)
- 장점: 방화벽 환경에서 안정적임
- 단점: 서버에서 포트를 여러 개 열어야 해서 설정 필요 ⚠️
🤔 왜 제어 연결과 데이터 연결을 분리했을까?
- 명령어 처리와 파일 전송이 동시에 혼합되면 혼란이 발생
- 파일 전송 중 명령어가 오면 흐름이 깨질 수 있음
- 명령어는 명령어대로, 파일은 파일대로 분리하여 안정성 확보 🔐
🛠️ FTP 서버 구축 (vsftpd 기준)
1. vsftpd 설치
# CentOS/RHEL
dnf -y install vsftpd
# Debian/Ubuntu
apt install vsftpd -y
2. 서비스 시작 및 확인
systemctl start vsftpd
systemctl enable vsftpd
# 포트 확인
netstat -antup | grep vsftpd
netstat -antup | grep 21
3. 설정 파일 경로 및 항목 (/etc/vsftpd/vsftpd.conf)
listen=YES
listen_ipv6=NO
pasv_enable=YES
📁 사용자 접근 제어 파일
/etc/vsftpd/ftpusers
- 이 파일에 계정이 있으면 로그인 불가능
- PAM 기반 제어 → 아이디+비번 모두 입력해도 로그인 거부됨
- 해커가 정보 유출하기 어려움 (보안적으로 안전)
# 예: 루트 계정 로그인 차단
echo "root" >> /etc/vsftpd/ftpusers
/etc/vsftpd/user_list
- 이 파일에 계정이 있으면 로그인 불가능
- vsftpd 자체가 제어 → 아이디만 입력해도 로그인 차단됨
- 해커가 "이 계정은 차단됐구나" 눈치 챌 수 있음 😨
🔐 디렉터리 제한 (Chroot 설정)
전체 사용자 chroot
chroot_local_user=YES
allow_writeable_chroot=YES
특정 사용자만 chroot 적용
allow_writeable_chroot=YES
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
- /etc/vsftpd/chroot_list에 적은 사용자만 chroot 적용됨
특정 사용자만 chroot 제외
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
- /etc/vsftpd/chroot_list에 적힌 사용자만 chroot 제외, 나머지는 전부 제한
포트 지정하기
pasv_min_port=50000
pasv_max_port=50001
pasv_min_port=50000(포트번호) Passive Mode 동작에서선택할port의최소범위지정(default=0)
pasv_max_port=60000(포트번호) Passive Mode 동작에서선택할port의최대범위지정(default=0)
이 내용을 파일 맨 아래에 작성하여 저장한다. ( /etc/vsftp/vsftpd.conf)
🏡 홈 디렉터리 변경하기
사용자 접속 시 자동으로 연결되는 디렉터리를 바꾸고 싶다면?
1. /etc/passwd 수정
username:x:1001:1001::/ftpdir:/sbin/nologin
2. vsftpd.conf 설정 추가
local_root=/ftpdir
🔐 보안을 위한 설정 요약
항목 설정 추천
계정 차단 | /etc/vsftpd/ftpusers 사용 |
chroot 적용 전체 | chroot_local_user=YES |
chroot 적용 사용자만 | chroot_list_enable=YES |
홈 디렉터리 변경 | local_root=/ftpdir |
FTP 보안 강화 | FTPS/SFTP, 방화벽, Fail2Ban 등 추가 사용 권장 |
🔐 보안을 강화하는 접근 제어 설정
FTP는 기본적으로 로그인 기반의 접근 방식을 사용하기 때문에, 사용자 계정 관리와 접근 제어 설정을 제대로 해놓지 않으면 해커의 표적이 될 수 있다. FTP는 암호화되지 않은 채 로그인 정보가 전송되므로, 보안에 특히 주의가 필요하다. 🧱
📄 접근 제어 파일: ftpusers, user_list
FTP에서는 로그인 가능 여부를 제어할 수 있는 두 개의 주요 파일이 있다.
✅ /etc/vsftpd/ftpusers
- 역할: 해당 파일에 등록된 계정은 로그인 자체가 차단된다.
- 특징: 로그인 시도 시 아이디와 비밀번호를 입력해도 로그인 실패
- 제어 주체: PAM(Pluggable Authentication Modules) — 즉, 리눅스 자체의 인증 시스템이 관리함
- 보안상 이점:
해커 입장에서 해당 계정이 차단되었는지, 비밀번호를 틀렸는지 구분할 수 없기 때문에 더 안전하다.
예를 들어, 루트 계정을 이 파일에 추가하면 로그인 시도 시에도 아무런 힌트를 주지 않는다. 🙅♂️
# 예시: 루트 계정 차단
echo "root" >> /etc/vsftpd/ftpusers
✅ /etc/vsftpd/user_list
- 역할: 이 파일에 등록된 계정도 로그인 차단 대상이지만...
- 제어 주체: vsftpd 자체가 이 파일을 관리
- 차이점: 로그인 시 아이디만 입력해도 차단됨 ➡️ 해커가 "아, 이 계정은 막혀 있네?" 하고 유추할 수 있음 ❗
즉, ftpusers가 더 보안적으로 안전한 설정이다.
로그인 단계에서 실패하는 정보를 노출하지 않기 때문에, 정보 수집(정보 유출)에 대한 위험을 줄일 수 있다. 🕵️♀️
🚫 chroot와 보안
FTP 사용자가 루트 디렉터리나 다른 시스템 영역에 접근하지 못하도록 하기 위해, chroot 설정을 사용하는 것이 좋다.
✅ 전체 사용자 chroot 제한 (모든 계정 격리)
chroot_local_user=YES
allow_writeable_chroot=YES
- 모든 사용자의 홈 디렉터리를 최상위 디렉터리로 인식하게 하여 상위 디렉터리 접근 차단
- 파일 시스템 보호에 효과적이다.
✅ 특정 사용자만 chroot 적용 (원하는 계정만)
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
- 위 설정이면 /etc/vsftpd/chroot_list에 명시된 계정만 chroot 적용됨
- 예: 외부 사용자는 chroot 적용하고, 내부 관리자는 자유롭게 탐색 가능하도록 설정할 수 있다
✅ 특정 사용자만 chroot 제외 (나머지는 다 chroot)
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
- 이번엔 반대로, chroot_list에 있는 사용자만 chroot 제외됨
- 나머지 사용자들은 기본적으로 디렉터리 격리를 적용받는다
🧠 홈 디렉터리 변경하기
FTP 접속 시 기본 디렉터리를 원하는 곳으로 바꾸고 싶다면?
- /etc/passwd 파일에서 사용자 계정의 홈 디렉터리를 직접 변경한다.
- 또는 vsftpd 설정 파일에 아래와 같이 지정해준다:
local_root=/ftpdir
- 이렇게 하면 사용자는 로그인 시 자동으로 /ftpdir 경로로 연결된다.
- 보안 + 편의성을 동시에 잡을 수 있다! 🎯
🛡️ 보안을 위한 요약 팁
설정 항목 보안 측면 추천 설정
로그인 제어 | ftpusers 사용 (PAM 차단, 비번 입력해도 차단됨) |
계정 노출 방지 | user_list보다 ftpusers가 더 안전함 |
디렉터리 접근 제한 | chroot_local_user=YES 사용 |
특정 사용자 예외 설정 | chroot_list_enable=YES + chroot_list_file=경로 설정 |
FTP 자체 보안 | FTPS/SFTP 또는 방화벽, Fail2ban 같은 도구 함께 사용 권장 |
📌
보안에 취약한 FTP를 사용할 경우, 기본적인 계정 접근 제어와 디렉터리 제한 설정은 필수다.
ftpusers와 chroot 설정만 잘 해놔도, 해커의 발걸음을 확실하게 막아줄 수 있다. 🚷
필요하다면 SSL 기반의 FTPS, SSH 기반의 SFTP로 전환하는 것도 좋은 선택이다. 😎
'Linux' 카테고리의 다른 글
실습 /web,ftp, iptables,db (0) | 2025.05.28 |
---|---|
crontab (예약작업 프로그램) (0) | 2025.05.26 |
와이어샤크로 본 도메인 이름 해석 과정 wireshark (0) | 2025.04.26 |
계정 관리, 디스크 관리, RAID 구성 및 bit 연산-> 서버 관리나 데이터 복구 시 유용 (0) | 2025.04.26 |
IPtables 설정 응용, 실습 (방화벽과 클라이언트, 서버를 3개 둔 상황) (0) | 2025.04.25 |