서버 운영 관리 [ Tip ]

vsftpd 설치 및 설정

 

vsftpd 는 리눅스 서버에서 가장 흔히 사용하는 FTP (File Transfer Protocol) 서버 프로그램이며 일반적으로 vsftpd 패키지가 서버에 설치되어 있습니다.

FTP의 역할은 데이터를 서버에 파일을 업로드하거나 다운로드 하는 용도이며 요즘 나오는 웹에디터들도 FTP 를 통해 데이터 전송을 지원하기 때문에 서버에서 데이터 전송을 위해 사용되는 대표적인 프로그램이라고 할 수 있습니다.

  

리눅스 서버에서 가장 흔히 사용하는것이 VSFTP 이다. 간략하게 소개하자면 아래와 같은 장점이 있습니다.

• FTP 에 대한 보안설정 옵션들이 많습니다.

• 설정 파일 수정과 의미가 명확하여 초보자들도 쉽게 사용 가능합니다.

• 리눅스에 기본탑재하고 있어서 따로 설치할 필요없이 바로 사용 가능합니다.

  

vsftp 설치


 

1. vsftp 설치 여부 확인

# rpm -qa | grep vsftpd

vsftpd-3.0.2-29.el7_9.x86_64

 

2. vsftp는 기본적으로 포함되어 있거나 아래와 같이 간단하게 설치 가능합니다.

Redhat 계열 OS

$ yum install vsftpd

 

Debian 계열 OS

$ apt-get install vsftp

 

3. 설정파일의 경로는 아래와 같습니다

Redhat계열 OS 설정파일 위치

$  vi /etc/vsftpd/vsftpd.conf

 

Debian 계열 OS 설정파일 위치

$ vi /etc/vsftpd.conf

 

4. FTP 명령 실행 방법은 아래를 참고합니다.

Redhat 계열 OS

$ systemctl stop vsftpd : 정지

$ systemctl start vsftpd : 시작

$ systemctl restart vsftpd : 정지 후 시작

 

Debian 계열 OS

$ systemctl stop vsftp : 정지

$ systemctl start vsftp : 시작

$ systemctl restart vsftp : 정지 후 시작

 

여기서는 몇가지 대표적인 설정옵션을 알아봅니다.

# /etc/vsftpd/vsftpd.conf

• anonymous_enable=NO

익명사용자 접근을 허용하지 않음 (누구나 ID/PW 없이 FTP에 접근하여 자료를 업로드 및 다운로드 할수 있게하는 옵션입니다)

편리해보이는 기능이긴 하지만 보안상 좋지 않으므로 NO 로 설정합니다.

 

• anon_upload_enable=YES

익명 사용자가 파일업로드를 가능하게 하겠다는 의미 계정 생성하지 않고 파일을 받을수 있어 편리하긴 하지만 보안상 좋지는 않습니다.

 

• anon_mkdir_write_enable=YES

익명 사용자가 디렉토리를 생성 가능하게 하겠다는 옵션입니다.

 

• 계정 JAIL 설정

chroot_local_user=YES

FTP 접속한 계정이 자신의 홈디렉토리 (공간) 이외에는 접근할수 없게 하는 옵션입니다.

NO 로 설정하거나 주석처리가 되어 있는경우에는 모든 계정이 다른 디렉토리로 접근이 가능합니다. (JAIL 설정이라고도 하는듯 합니다)

 

• 특정 계정만 JAIL 적용하기

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

/etc/vsftpd/chroot_list 파일에 JAIL 할 계정 등록해주면 됩니다.

 

• 특정계정만 제외하고 JAIL 하기

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

/etc/vsftpd/chroot_list 파일에 JAIL 제외할 계정 등록해주면 됩니다.

 

• 계정의 홈디렉토리는 /etc/passwd 파일에서 확인가능합니다.

ex) ddongho:x:502:502::/home/ddongho:/bin/bash

ddongho 라는 계정의 홈디렉토리는 /home/ddongho 라는것을 확인할수 있습니다

 

• idle_session_timeout=600

사용자가 로그인후 아무런 작업이 없을시 600초후에는 강제로 접속을 끊겠다는 의미입니다.

사용자가 잠시 PC 앞에서 떠난후 다른 누군가가 내 자료를 불법적으로 다운로드 혹은 업로드 등의 작업을 할 수 있으므로 꼭 설정하는것이 좋습니다.

 

• data_connection_timeout=120

다운로드 시작시간부터 지정된 초동안 완료되지 않으면 접속을 강제로 끊습니다.

 

• write_enable=YES

사용자의 쓰기 권한입니다. YES를 주면 권한이 있는 사용자는 누구든지 파일 업로드 및 파일 수정 삭제 등을 할 수 있습니다.

NO라고 하면 누구든지 파일 수정, 삭제, 업로드는 할 수 없습니다.

 

• local_enable=YES

리눅스 로컬 사용자 일반 계정이 FTP에 접근할수 있게 한다는 의미합니다.

 

• local_umask=022

FTP 로 접근한 로컬 사용자들이 파일을 생성할때 기본으로 권한을 644 로 가지게 하겠다는 의미합니다.

 

• dirmessage_enable=YES

사용자가 어떤 디렉토리로 이동할때 디렉토리에 지정된 메세지를 보여주는 기능을 사용하겠다는 옵션입니다.

 

• xferlog_enable=YES

사용자들의 파일 업로드/다운로드 등의 기록을 LOG 로 남기겠다는 의미입니다. (xferlog_std_format parameter 에 따라 형식이 정해지는듯 합니다)

 

• ftpd_banner=Welcome to iwinv FTP

FTP 접속시 보여줄 메세지, 활성화되지 않을시 FTP의 버젼 정보가 나타납니다.

  

 

vsftp 패시브 모드 및 방화벽 설정


  

간혹 방화벽 때문에 FTP 접속이 안되거나 데이터 전송이 안되는 경우가 종종 발생합니다.

FTP 사용때문에 방화벽 사용을 중단할수는 없으니 아래와 같이 패시브 모드라는것을 설정하는 방법이 있습니다.

FTP를 패시브 모드로 사용한다면 서버에서 클라이언트들에게 데이터포트를 제한하여 제공하기 때문에 방화벽 설정을 port 허용정책으로 제어할 수 있습니다.

 

* 만약 FTP를 액티브 모드로 사용한다면 클라이언트에서 서버로 데이터포트를 랜덤하게 요청하기 때문에 클라이언트 IP로 방화벽 허용정책을 설정해야 합니다.

  

• vsftp 패시브 모드 설정

# /etc/vsftpd/vsftpd.conf (아래내용 추가후 vsftpd 데몬 재시작)

pasv_enable=Yes

pasv_min_port=50001

pasv_max_port=50005

∗ 50001 ~ 50005 번 포트까지는 패시브 포트로 사용하겠다는 의미이며 동시접속자와 동시 파일 전송갯수를 고려하여 범위를 잡아야 합니다.

 

방화벽 설정

 

1. 위와 같이 설정하였다면 ELCAP 방화벽에서 인바운드 TCP 50001 ~ 50005 번까지 포트를 오픈해주면 됩니다.

 

2. 혹시 리눅스 서버에 iptables 방화벽을 사용하고 있다면 아래와 같이 방화벽 설정을 하고 저장해줍니다.

# iptables -I INPUT 1 –m state —state NEW –m tcp –p tcp —dport 50001:50005 –j ACCEPT

# iptables-save > /etc/sysconfig/iptables 

 

FTP 서버를 구축완료 하였다면 FTP 클라이언트 프로그램을 이용하여 데이터를 전송하거나 다운 받을 수 있으며

일반적으로는 FTP 아이디와 패스워드는 root 계정이 아닌 일반계정을 사용하여 로그인하게 됩니다.

 

일반적인 vsftpd.conf 설정 (패시브 모드 사용)

# vi /etc/vsftpd/vsftpd.conf

 

anonymous_enable=NO

chroot_local_user=YES

allow_writeable_chroot=YES (CentOS 6에서 제외)

#chroot_list_enable=YES

-> (주석을 풀어서 YES로 사용한다면 /etc/vsftpd/chroot_list 에 상위폴더로 갈 수 있는 계정을 넣어줘야만 합니다. 그렇기 때문에 모든계정을 상위디렉토리 접근을 막기위해서 주석을 풀지 않습니다)

#chroot_list_file=/etc/vsftpd/chroot_list

listen=YES

listen_ipv6=NO

local_enable=YES

write_enable=YES

userlist_enable=YES

userlist_deny=YES

#userlist_file=/etc/vsftpd/user_list (기본값 = /etc/vsftpd/user_list)

#userlist_file=/etc/vsftpd/user_list

pasv_enable=YES

pasv_promiscuous=YES

pasv_min_port=50001

pasv_max_port=50005