본문 바로가기
자격증

[리눅스마스터 1급] 11-3. 파일 서비스 (vsftpd)

by LimSeongHyeon 2025. 4. 30.


개요

 


vsftpd (Very Secure FTP Daemon)

모드
모드 이름이 서버 입장에서 지어졌다고 생각하면 헷갈리지 않는다.

 


 

Active Mode

액티브 모드는 클라이언트가 서버에게 데이터를 주고받을 포트번호만 알려주면 서버가 알아서 연결해주는 모드이다. 서버 입장에서 직접 클라이언트에 연결해야하기 때문에 능동 모드이다.

 


Passive Mode

패시브 모드는 클라이언트가 서버에게 패시브모드니까 데이터를 주고받을 포트가 무엇이냐고 묻는다. 서버는 데이터를 주고받을 포트를 개방하고 클라이언트에게 이를 알려준다. 클라이언트는 서버가 알려준 데이터 포트에 접근한다.

 


 

더보기
개인적인 의견으론 패시브 모드는 서버, 클라이언트 모두 불편한 방식이라는 느낌이 좀 든다. 서버는 포트를 할당하고 관리해야 하는 번거로움이 발생한다, 또한 클라이언트는 서버에 연결하기 위해 포트를 물어보는 작업이 하나 더 추가되게 된다.

하지만 서버가 클라이언트에 inbound connection을 하지 않는다는 점. 그리고 서버가 연결마다 새로운 포트를 할당한다는 점에 있어서 보안적으로는 굉장히 효과적일 것이라고 생각된다.

보안이 보장된 물리적 보안 환경에서의 폐쇄망이라면 액티브 모드 사용하는 것이 좋지 않을까 싶다. 내부자가 보안 위협을 한다면 액티브 모드나 패시브 모드나 비슷한 보안 수준일 것이기 때문이다. 

 


 

설치 및 실행
$ dnf install -y vsftpd
$ systemctl start vsftpd.service

 


 

파일 개요

파일명 설명
/etc/vsftpd/vsftpd.conf vsftpd의 메인 설정 파일. 서버 동작에 필요한 모든 설정 옵션 정의.
/etc/vsftpd/user_list userlist_enable가 yes일 때 참조. userlist_deny 값이 no면 whitelist, yes면 blacklist로 작동.
/etc/vsftpd/ftpusers 항상 blacklist로 취급되는 사용자 계정 목록. 등록된 사용자는 로그인 불가.
/etc/pam.d/vsftpd vsftpd 서비스의 PAM 인증 설정 파일. 시스템 계정 인증과정에 사용되는 모듈 설정 포함.

 

$ locate /etc*vsftp*
/etc/vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
기억이 나지 않으면 locate를 사용해서 찾아내도록 하자.

 


/etc/vsftpd/vsftpd.conf
$ man vsftpd.conf
manual이 생각보다 잘 정리되어 있다. 모르는게 생기면 해당 페이지를 참조하면 큰 도움이 될 것이다.
설정 설명 사용 예시
listen standalone 모드로 데몬 실행 listen=YES
anonymous_enable 익명 사용자 접속 허용 여부 anonymous_enable=NO
local_enable 로컬 사용자 접속 허용 여부 local_enable=YES
write_enable 파일 업로드/쓰기 허용 write_enable=YES
chroot_local_user 로컬 사용자를 홈 디렉토리로 제한 chroot_local_user=YES
userlist_enable /etc/vsftpd/user_list 파일 사용 여부 userlist_enable=YES
userlist_deny user_list 파일을 blacklist로 사용할지 여부 userlist_deny=YES
userlist_file user_list 파일 경로 지정 userlist_file=/etc/vsftpd/user_list
ftpd_banner 접속 시 표시할 배너 메시지 ftpd_banner=Welcome to FTP Server!
max_clients 동시에 접속 가능한 최대 클라이언트 수 max_clients=10
max_per_ip 동일 IP의 동시 접속 제한 max_per_ip=3
pam_service_name PAM 인증 시 사용할 서비스명 pam_service_name=vsftpd
pasv_enable Passive 모드 사용 여부 pasv_enable=YES
pasv_min_port Passive 모드 최소 포트 지정 pasv_min_port=50000
pasv_max_port Passive 모드 최대 포트 지정 pasv_max_port=51000
log_ftp_protocol FTP 명령 로깅 활성화 log_ftp_protocol=YES

익명 사용자 설정
설정 내용
anonymous_enable=YES 익명 사용자 허용
anon_root=/srv/ftp 익명 사용자가 접근할 디렉토리
write_enable=NO 익명 사용자 쓰기 제한
anon_upload_enable=NO 익명 업로드 제한
anon_mkdir_write_enable=NO 익명 디렉토리 생성 제한
일반적으로 익명 사용자에 대해서는 다운로드만 가능하며 수정, 업로드 등이 제한되기 때문에 이와 같은 설정을 많이 사용한다.

로컬 사용자 설정
설정 내용
local_enable=YES 로컬 사용자 로그인 허용
write_enable=YES 로컬 사용자 파일 업로드 및 쓰기 허용
chroot_local_user=YES 로컬 사용자를 홈 디렉토리로 제한
일반적으로 로컬 사용자에 대해서 파일 업로드 및 쓰기는 가능하나, 디렉토리 제한이 없는 경우 보안상 문제가 될 수 있으므로 사용자 홈 디렉토리로 제한하는 설정을 많이 사용한다.

접근 제한 설정

 

방화벽 및 포트 제한 설정

# 일반적으로 21번 포트 TCP 연결을 허용하는 경우
$ iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# Passive Mode 포트로 50000~51000포트만 허용하는 경우
$ iptables -A INPUT -p tcp --dport 50000:51000 -j ACCEPT

# 특정 IP(192.168.0.100)에서의 요청만 허용하는 경우
$ iptables -A INPUT -p tcp -s 192.168.0.100 --dport 21 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 21 -j DROP

 

 

/etc/vsftpd/ftpusers (Black-List)

root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
거부할 사용자를 한줄에 하나씩 작성. 특히 시스템 계정인 경우 계정 탈취로 접근 가능하므로 명시해두는 것이 좋을 듯 하다.

 

 

/etc/vsftpd/user_list

userlist_enable userlist_deny 결과
YES YES Black-List
YES NO White-List

 

클라이언트 접속
$ dnf install -y ftp
$ ftp 192.168.0.5

 


문제

파일

 

vsftpd 서버의 메인 설정 파일 경로를 입력하세요.

더보기

/etc/vsftpd/vsftpd.conf

 

vsftpd 서버에서 접근을 제한할 사용자 파일 경로를 입력하세요.

더보기

/etc/vsftpd/ftpusers

 

vsftpd 서버에서 설정 값에 따라 접근을 제한하거나 허용하는 사용자 파일 경로를 입력하세요.

더보기

/etc/vsftpd/user_list

 


설정

 

vsftpd 서버에서 chroot 환경에서도 쓰기 권한을 허용하는 내용을 작성하세요.

더보기

allow_writeable_chroot=YES

 

vsftpd 서버에서 로컬 사용자의 chroot 환경을 설정하는 내용을 입력하세요.

더보기

chroot_local_user=YES

 

vsftpd 서버에서 로컬 사용자의 접근을 허용하는 내용을 입력하세요.

더보기

local_enable=YES

 

vsftpd 서버에서 익명 사용자의 디렉터리 생성을 차단하는 내용입력하세요.

더보기

anon_mkdir_write_enable=NO

 

vsftpd 서버에서 익명 사용자의 접근을 허용하는 내용을 입력하세요.

더보기

anonymous_enable=YES

 

vsftpd 서버에서 익명 사용자의 파일 업로드를 차단하는 내용을 입력하세요.

더보기

anon_upload_enable=NO

 

vsftpd 서버에서 접속한 로컬 사용자를 홈 디렉터리로 이동시키는 내용을 입력하세요.

더보기

chroot_local_users=YES

 


 

접근제한

 

/etc/vsftpd/user_list의 유저들을 화이트 리스트로 작동하게 만드는 내용을 입력하세요.

더보기

userlist_enable=YES

userlist_deny=NO

 

/etc/vsftpd/user_list의 유저들을 블랙 리스트로 작동하게 만드는 내용을 입력하세요.

더보기

userlist_enable=YES

userlist_deny=YES

 


 

클라이언트

 

클라이언트에서 vsftpd 서버(192.168.0.5)에 접근하는 명령어를 입력하세요.

더보기

$ ftp 192.168.0.5