FTP(File Transfer Protocol) ,ftpusers, user_list,chroot 설정 방식

2025. 4. 30. 20:18·Linux

 

📁 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 설정)

예시- root는 제어가 되어 있지 않지만 ktest는 제어가 되어 있다. 상위폴더 인식이 다름.

전체 사용자 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 접속 시 기본 디렉터리를 원하는 곳으로 바꾸고 싶다면?

  1. /etc/passwd 파일에서 사용자 계정의 홈 디렉터리를 직접 변경한다.
  2. 또는 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
'Linux' 카테고리의 다른 글
  • 실습 /web,ftp, iptables,db
  • crontab (예약작업 프로그램)
  • 와이어샤크로 본 도메인 이름 해석 과정 wireshark
  • 계정 관리, 디스크 관리, RAID 구성 및 bit 연산-> 서버 관리나 데이터 복구 시 유용
햅삐root
햅삐root
happyroot 님의 블로그 입니다. IT 보안 정리💛
  • 햅삐root
    햅삐한 root
    햅삐root
  • 전체
    오늘
    어제
    • 전체보기 IT (123)
      • Linux (21)
      • Network (23)
      • packet tracer& GNS3 (10)
      • Cryptology (7)
      • WEB (16)
      • DB (16)
      • Hacking (28)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    sqlinjection
    injectionvector
    Hack
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
햅삐root
FTP(File Transfer Protocol) ,ftpusers, user_list,chroot 설정 방식
상단으로

티스토리툴바