본문 바로가기
Infra & Security Eng/Project Implementation

vsftpd를 이용한 FTP 서버 구축 및 chroot 기반 사용자 격리 보안 설정

by 엔지니어 E 2026. 1. 22.
반응형

주제: FTP 서버 운영 하기

현재 FTP 서버는 사용을 잘 하지 않는 추세임 

FTP 개념과 동작 원리 

개념
대용량의 파일 전송 서비스


동작 원리
FTP는 제어 신호와 데이터 전송을 분리하여 처리하는 Out-of-Band 방식을 이용 한다. 커넥션을 2개 연다

- 서버가 사용하는 포트넘버: 20 - 데이터 / 21 - 제어
- 데이터 커넥션 모드: Active Mode(능동모드) 서버가 클라이언트에 접속을 시도함 / Passive Mode(수동 모드): 클라이언트가 서버에 접속을 시도함

현재 FTP 서버는 보안상의 이유로 사용하는 비중이 낮아짐

 

1단계: vsftpd 서버 환경 구축 및 사용자 계정 생성 실습

1. 서버와 클라이언트로 지정한 192번, 193번에 그룹과 계정을 생성

# groupadd -g 2500 test
# useradd -g test -u 2501 test01
# useradd -g 2500 -u 2502 test02

# passwd test01 / qw12
# passwd test02 / qw12

2. 리눅스에서 서버 설치 확인과 서버 접속 테스트

서버 접속 
# ftp 192.168.10.192 (접속하려는 서버 ip 주소를 입력하면 됨)  *vsftpd는 기능과 크기가 작기 때문에 보안상의 문제점도 그래서 적음

vsftp 설치 (미설치의 경우 설치 진행) 
# dnf install -y vsftpd
* # dnf list vsftpd - 설치 확인하기

ftp 서버 구동 
# systemctl restart vsftpd
* systemctl start vsftpd.servcie - 시스템 활성화 / systemctl enable csftpd.service - 시스템 재부팅 후 자동 실행
이를 통해 /usr/sbin/vsftpd를 메모리에 올리게 된다 

 

2단계: chroot 설정을 이용한 사용자 격리(보안)

chroot 설정은 vi 편집 모드를 통해 수정 한다. 

서버에서 작업 (192번)

chroot 설정은 vi 편집 모드를 통해 수정 한다
# vi /etc/vsftpd/vsftpd.conf - 검색 기능으로 chroot 색인검색으로 chroot를 찾는다 

여기서 설정 해야 할 내용
1. 접속 제한 설정 #max_clients=30 
#max_per_ip=3 한 ip에서 커넥션을 3개까지 접속 허용 (ip 에서 커넥션 못열게 하는 것)
* 공유기로 연결된 컴퓨터들은 공유기 하나이므로 컴퓨터 1대로 본다
ls_recurse_enable=no  - yes는 허용, no는 비허용이다. 보통 no로 적는다 

2. 익명 사용자 관련 설정 
anonymous_enable=NO

3. Chroot 설정 
#chroot_
* 명령어 적용한 것들의 앞에 있는 #는 다 지울 것 주석 처리 되므로 

ex) chroot: ftp 접속하면 접속한 디렉토리는 자신의 홈 디렉토리로 접속을 하게 됨. 여기서 홈 디렉토리가 아닌 root로 인식하게 하는 설정이chroot 설정임 

chroot_list_enable=YES 이고, chroot_local_user=no 일때 (계정 감옥행) vi 편집기에서 /etc/vsftpd/chroot_list 파일에 계정 감옥행 사용자 계정을 넣으면 된다.

chroot_list_enable=YES 이고, chroot_local_use=yes 일때 (계정 감옥해방)  /etc/vsftpd/chroot_list 파일에 vi 편집기에서 계정 감옥 해방될 사용자 계정을 넣으면 된다 
* chroot_list_enable=no 이면 chroot 설정 안하는 것이므로 그냥 무시하면 된다 

allow_writeable_chroot=YES 
chroot 적용시 반드시 명령어 적어줘야 접속이 가능하다

4. touch /etc/vsftpd/chroot_list 를 먼저 만들고, # vi /etc/vsftpd/chroot_list를 들어가서 계정 감옥행(혹은 계정 감옥해방행)을 갈 계정들을 입력 해주면 된다.

ex)
test 01
test 02
(계정이 여러 개일 경우 띄어쓰기가 아닌 엔터를 입력하여 진행 한다)
* touch: 파일 생성 / mkdir: 디렉토리 생성

* chroot 가 적용되면 외부 디렉토리가 access 안되므로 mount 명령을 이용해서 디렉토리에 access 하면 된다 

5. 수정 후에는 # systemctl restart vsftpd 를 입력하여 프로그램 재실행을 한다
클라이언트에서 작업  (193번)

1. 클라이언트(193번)에서 서버(192번)로 접속을 시도한다 
# ftp 192.168.10.192 
2. 위에 만들어 놓은 계정(test01, test02) 으로 로그인을 한다
3. # pwd 입력해서 현재 위치가 어디인지 확인 / #ls -al 로 목록 확인
4. ex) cd /etc 등의 명령어를 통해 내가 다른 디렉토리로 이동 할 수 있는지 없는지 확인을 한다

 
💡참고사항

내 서버가 아닌 다른 사람의 컴퓨터를 접속할 때 [# ftp 192.168.10.다른사람 ip] 로 명령어를 입력 - 아이디와 비밀번호 입력 - ls -al 해서 파일 확인을 해본다
listen (서버에만 있는 개념임) - 누가 접속이 들어오면 내가 서비스 해주는것임. 대기하고 있는 상태를 listen이라고 함