강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

[SULINUX 강좌#9] FTP서버 운영하기 (vsftpd)

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

[SULINUX 강좌#9] FTP서버 운영하기 (vsftpd) 



FTP서버(vsftpd)

 

FTP서버는 파일을 교환하기 위한 프로토콜인 FTP를 사용할 수 있게 하는 서버입니다. FTP서버가 있으면, FTP클라이언트가 있어야 하고 이 두 개의 프로그램을 사용하여 서버에 파일을 업로드, 다운로드 할 수 있습니다. SULinuxFTP서버로 기본 vsftpd를 제공합니다. 예전에 많은 배포판이 proftpd를 고집하였으나 요즘은 vsftpd를 많이 사용합니다. vsftpdproftpd의 문제점을 모두 보완하고, 속도, 성능, 보안을 향상시켜 더욱 강력하게 만들어 졌습니다. 그 중에서도 보안을 강조하고 있으며 이름 또한 vsftpd(Very Secure FTP)서버입니다. vsftpd는 프로그램 배포사이트에서 최상급 형용사(most, fastest)를 사용하여 자랑할 만큼 자신 있게 말하는 부분이 속도와 보안성입니다.

 

Probably the most secure and fastest FTP server for UNIX-like systems.

 

 

VSFTPD의 동작구조

 

8981409a36269487e41dd29ffd6a290d_1644980290_7079.png
 

 

위 그림은 FTP서버의 동작 구조를 나타낸 그림입니다. FTP는 서버와 클라이언트 사이에 2개의 연결을 가집니다. 하나는 제어연결이며, 하나는 데이터전송을 위한 연결입니다. 제어연결은 FTP명령어 및 서버의 응답코드를 전송하기 위한 목적이며 ASCII코드를 사용하여 연결됩니다. 데이터연결은 파일 전송(put, get) 및 서버에서 파일 및 디렉토리 리스팅(ls)된 자료를 전달 할 때 사용 됩니다. 이렇게 제어연결과 데이터연결으로 분리한 이유는 파일을 효율적으로 전송하기 위함입니다. 제어연결은 클라이언트가 FTP서버에 접속해 있는 동안 연결을 유지하며, 데이터연결은 데이터 전송이 필요할 때 연결을 가집니다. 데이터 연결에서는 2가지 방법을 지원합니다. 하나는 Active연결, 하나는 Passive연결 입니다. Active연결은 서버에서 클라이언트로 연결을 시도하기 때문에 클라이언트의 방화벽이나, 공유기능을 사용하는 경우 연결되지 않습니다. 이때는 Passive연결을 사용합니다. 이는 일반적인 방법을 사용하여 클라이언트에서 서버로 연결을 시도하기 때문에 다양한 클라이언트 환경에 영향을 받지 않습니다.

 

주 의

 

SULinux는 보안을 위해 서버에 최소한의 포트만을 열어두었다. 열려있지 않은 포트는 리눅스 방화벽인 iptables를 사용하여 차단되어 있다. FTP는 기본 컨트롤 포트로 21, 데이터 포트로 20번을 사용하지만, Passive 모드를 사용하는 경우 1024번 이후 포트를 임의로 사용하기 때문에 방화벽 관리의 어려움이 있다. 하지만 iptablesnf_conntrack_ftp를 활성화 시키면 문제는 해결된다. SULinux에서 firewalld를 사용한다면, ftp 서비스를 오픈하면 nf_conntrack_ftp 모듈 또한 동시에 로드되도록 되어 있다.

 

 

 

FTP서버 접속 및 확인

 

FTP서버에 접속하는 방법은 다양합니다. 웹브라우저에서도 기본적으로 FTP서버에 접속 할 수 있으며, 다양한 FTP접속 프로그램이 나와 있습니다.

 

 

(1) FTP클라이언트 프로그램을 이용한 FTP서버 접속 (GUI)

 

FTP서버에 접속하기 위한 프로그램은 아주 많은 종류가 있습니다. 윈도우 및 리눅스 환경에서도 여러 가지 프로그램이 있습니다. 다음 그림은 FTP클라이언트 프로그램을 이용하여 FTP서버에 접속한 화면입니다.

 

8981409a36269487e41dd29ffd6a290d_1644980315_4187.png      8981409a36269487e41dd29ffd6a290d_1644980331_1192.png 

 

GUI 환경의 FTP클라이언트 프로그램입니다. 좌측은 Windows에서 사용하는 ALFTP이며, 우측은 Linux환경에서 사용하는 gftp를 사용하여 SULinux에 접속한 화면입니다.

 

 

(2) 웹브라우저를 사용한 FTP접속

 

윈도우 또는 리눅스에서 웹서핑을 하기위한 웹브라우저에도 대부분 기본적으로 FTP클라이언트 기능이 내장 되어 있습니다.

 

8981409a36269487e41dd29ffd6a290d_1644980350_1449.png    8981409a36269487e41dd29ffd6a290d_1644980365_045.png 

 

위 그림은 좌측에 윈도우의 웹브라우저 Explorer를 사용하고, 우측에 Firefox를 사용하여 SULinuxFTP서버에 접속한 화면입니다. Explorer의 경우 파일브라우저 기능을 함께 제공하기 때문에 FTP 업로드/다운로드가 가능하지만, Firefox의 경우는 FTP를 통한 파일 다운로드만 가능합니다.

 

8981409a36269487e41dd29ffd6a290d_1644980378_7826.png
 

 

리눅스의 경우는 위와 같이 파일브라우저를 사용하여 FTP 서버에 접속 할 수 있습니다. 위 그림은 gnome에서 사용하는 노틸러스(nautilus)를 사용하여 FTP서버에 접속한 화면입니다.

 

(3) 콘솔 명령어를 통한 FTP 접속 (CUI)

 

커맨드를 사용하여 FTP 서버에 접속 할 수 있습니다. 원격 서버에 접속하여 또 다른 서버에 있는 자료를 전송하기 위해 많이 사용합니다.

 

다음은 윈도우에서 명령어를 사용하여 FTP서버에 접속하는 방법입니다. 이 방법은 표준이며, 리눅스에서도 지원합니다.

C:\Documents and Settings\Administrator>ftp <site>

윈도우에서 명령어를 이용하여 SULinux FTP서버에 접속한 결과입니다. 사용자명과, 비밀번호를 사용하여 접속하였고, 여러 가지 명령어는 help명령어를 사용하여 확인 할 수 있습니다.

C:\Documents and Settings\Administrator>ftp 192.168.0.202

Connected to 192.168.0.202.

220 (vsFTPd 2.0.5)

User (192.168.0.202:(none)): sulinux

331 Please specify the password.

Password:

230 Login successful.

ftp> ls

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

Desktop

www

226 Directory send OK.

ftp: 14 bytes received in 0.00Seconds 14000.00Kbytes/sec.

ftp> help

Commands may be abbreviated. Commands are:

 

! delete literal prompt send

? debug ls put status

append dir mdelete pwd trace

ascii disconnect mdir quit type

bell get mget quote user

binary glob mkdir recv verbose

bye hash mls remotehelp

cd help mput rename

close lcd open rmdir

ftp>

 

다음은 SULinux에서 기본 제공하는 향상된 ftp클라이언트인 lftp의 사용법입니다.

[root@sulinux /]# lftp [OPTS] <site>

SULinux에서 lftp를 이용하여 SULinux FTP서버에 접속한 결과입니다. 사용자명@사이트를 입력하고, 비밀번호를 입력하여 접속하였고, 여러 가지 명령어는 help명령어를 사용하여 확인 할 수 있습니다.

[root@sulinux /]# lftp sulinux@192.168.0.202

비밀번호:

lftp sulinux@192.168.0.202:~> ls

drwxr-xr-x 2 501 501 4096 Apr 11 05:00 Desktop

drwxr-xr-x 3 0 0 4096 Apr 22 22:08 www

lftp sulinux@192.168.0.202:~> help

!<shell-command> (commands)

alias [<name> [<value>]] anon

bookmark [SUBCMD] cache [SUBCMD]

cat [-b] <files> cd <rdir>

chmod [OPTS] mode file... close [-a]

[re]cls [opts] [path/][pattern] debug [<level>|off] [-o <file>]

du [options] <dirs> exit [<code>|bg]

get [OPTS] <rfile> [-o <lfile>] glob [OPTS] <cmd> <args>

help [<cmd>] jobs [-v]

kill all|<job_no> lcd <ldir>

lftp [OPTS] <site> ls [<args>]

mget [OPTS] <files> mirror [OPTS] [remote [local]]

mkdir [-p] <dirs> module name [args]

more <files> mput [OPTS] <files>

mrm <files> mv <file1> <file2>

[re]nlist [<args>] open [OPTS] <site>

pget [OPTS] <rfile> [-o <lfile>] put [OPTS] <lfile> [-o <rfile>]

pwd [-p] queue [OPTS] [<cmd>]

quote <cmd> repeat [OPTS] [delay] [command]

rm [-r] [-f] <files> rmdir [-f] <dirs>

scache [<session_no>] set [OPT] [<var> [<val>]]

site <site_cmd> source <file>

user <user|URL> [<pass>] version

wait [<jobno>] zcat <files>

zmore <files> history -w file|-r file|-c|-l [cnt]

lftp sulinux@192.168.0.202:~>

 

lftp는 아주 강력한 기능을 제공합니다. 대표적으로 변경된 파일만 업로드 및 다운로드 할 수 있는 mirror 명령어, 다운로드 업로드 중 “Ctrl+z"키를 눌러 백그라운드 모드로 전환 할 수 있습니다. 그 밖에 자동완성 기능 등이 있습니다.

 

 

 

FTP서버(vsftpd) 시작 및 종료

 

vsftpd Server는 항상 실행하고 있는 서버 프로그램입니다. 콘솔 접속하여 vsftpd를 시작, 종료, 재시작 할 수 있습니다.

 

ascii_download_enable=YESascii_upload_enable=YES

 

 

위 그림은 service 명령어를 사용하여 vsftpd를 시작, 재시작, 종료 한 결과입니다. 위와 같은 방법으로 vsftpd 서버를 제어 할 수 있습니다.

FTP서버(vsftpd) 설정 및 운영

 

(1) 아스키모드로 파일전송 하려면?

vsftp는 기본적으로 아스키모드(ASCII)로의 파일 전송을 허용하지 않습니다. 윈도우와 리눅스등의 엔터문자로인한 text파일 변조(??)등 때문에 기본 허용하지 않습니다. 만약 필요해서 허용 하려면 다음과 같이 설정하시기 바랍니다.

/etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 넣습니다.

 

ascii_download_enable=YESascii_upload_enable=YES

 

설정 후에는 꼭 vsftpd를 재 시작하시기 바랍니다.

 

(2) 쉘권한이 없는 사용자들이 ftp를 사용가능하게 하려면?

대부분의 ftp서버는 로그인시 쉘을 요구하게 됩니다. 하지만 쉘 권한을 주지 않은 사용자들에게 ftp접근 권한을 주려면/etc/pam.d/vsftpd파일에서 4번째 줄에 #을 입력하여 주석 처리 합니다.(check_shell=NO 라는 지시자가 있지만 PAM인증을 받는 곳에서는 작동하지 않습니다.)

 

#%PAM-1.0

session optional pam_keyinit.so force revoke

auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

#auth required pam_shells.so

auth include system-auth

account include system-auth

session include system-auth

session required pam_loginuid.so

설정 후에는 꼭 vsftpd를 재시작 하시기 바랍니다.

(3) 사용자 home 디렉토리를 벗어나지 못하게 하려면?

ftp사용자가 자기 home디렉토리를 벗어나지 못하게 하려면 /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정하고 vsftpd를 재시작 합니다.

chroot_list_enable=YESchroot_local_user=YES

위와 같이 설정합니다. 설정 후 접속하면 /etc/vsftpd.chroot_list 파일이 없다고 에러가 나게 됩니다. 단순히 touch /etc/vsftpd.chroot_list 이렇게 파일을 만들어 주면 됩니다. 그리고 특정유저는 제외하려면/etc/vsftpd.chroot_list 파일에 사용자 계정을 넣어줍니다.

(4) "."으로 시작하는 숨김파일을 기본적으로 보이게 하려면?

리눅스에서 "."으로 시작하는 파일은 숨김 파일입니다. 하지만, 다른 os에서는 "."으로 시작해도 숨김 파일로 취급하지 않는 경우가 있습니다. 이런 경우 항상 "."으로 시작하는 파일을 보여주려면 /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

force_dot_files=YES

(5) ftp 접속시 파일과 디렉토리의 소유자를 숨기려면?

특수한 목적으로 파일 및 디렉토리의 소유자를 숨길 경우가 있습니다. 이런 경우 다음과 같이 설정하면, ftp라는 사용자로 보이며, 실 소유자의 ID는 보이지 않습니다. /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

 

hide_ids=YES

(6) 하위 디렉토리의 파일 및 디렉토리를 볼수 있는 ls -R 명령 허용하려면?

 

하위 디렉토리 리스트를 보기 위해서 ls -R 명령어를 내릴 때가 있습니다. 이런 경우 대부분의 ftp서버는 부하등의 이유로 막아 두게 됩니다. vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

ls_recurse_enable=YES

(7) opensshchroot 패치가 된 것을 사용하는데 정책을 같이 적용하려면?

openssh에 패치를 가하면, ssh 또한 자기 home 디렉토리를 벗어나지 못하게 설정할 수 있습니다. 이 정책은/etc/passwd파일의 홈디렉토리 부분에 /home/사용자/./ 와 같이 "/./"을 붙여 사용자를 홈디렉토리로 제한하게 됩니다. 이 정책에 따라 적용하려면/etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

passwd_chroot_enable=YES

(8) 파일을 올렸는데 시간이 이상하게 보인다면?

대부분의 ftp서버에서 시간 표현은 표준시각(GMT)을 보여주게 됩니다. 국내에서만 사용하는 ftp서버는 다음 옵션으로 국내시간으로 보여줄 수 있습니다. /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

use_localtime=YES

(9) 전송속도를 제한하고 싶다면?

다운로드 받는 한명의 사용자가 네트워크 트래픽을 모두 사용해 버리는 것을 방지하기 위해서 대역폭을 조정해야 하는 경우가 있습니다. 다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는  (Bytes/Sec)입니다. /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

local_max_rate=300000

위 설정은 300KByte/Sec의 대역폭을 제공합니다.

(10) 동시 접속자수를 제한하려면?

ftp서버에 접속할 수 있는 최대 접속수를 제한하려면, 아래의 설정으로 제한 가능합니다. /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

max_clients=10

 

위 설정은 동시에 10개의 연결으로 제한합니다.

(11) IP당 접속할 수 있는 동시접속 수를 제한 하려면?

ftp서버의 한 사용자가 대역폭을 모두 사용해 버리는 것을 방지하기 위해, IP당 전송 속도를 제한하면, flashget 등의 유틸리티로 몇 개의 접속으로 나눠 받아 대역폭 제한을 우회 할 수 있습니다. 이러한 경우 한 IP에서 접속 가능한 동시접속 수를 제한하므로 해결 가능합니다. /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

max_per_ip=2

 

위 설정은 한 IP에서 접속할 수 있는 연결을 2개로 제한합니다.(12) PASSIVE 모드 사용시 사용하는 포트범위를 제한하려면?

FTP에서 데이터 전송을 위해서 20번 포트를 사용합니다. 이 경우 서버에서 클라이언트 쪽으로 연결을 하기 때문에 중간에 방화벽 또는 공유기등을 사용한다면, 정상작동하지 않을 수 있습니다. 이런 문제를 해결하기위해서 PASSIVE모드라는 것이 있고, 이 모드에서는 서버의 1024이후 포트를 사용합니다. 이 포트의 범위를 제한하기 위해 다음과 같이 설정할 수 있습니다. /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

pasv_min_port=40000pasv_max_port=50000

위 설정은 PASSIVE에서 사용할 포트를 40000~50000로 합니다.

(13) mp3, wmv 등의 확장자를 가진 파일의 업로드를 금지하려면?

ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다. vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다. /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

deny_file={*.mp3,*.wmv}

 

위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.(14) 특정파일 패턴을 숨기려면?

특정파일이 서버내에는 존재하지만, ftp접속 시 보여지지 않게 설정할 수 있습니다. /etc/vsftpd/vsftpd.conf 파일을 열어 다음 설정을 하고 vsftpd를 재시작 합니다.

hide_file={*.mp3,.hidden,hide*,h?}

위 설정은 mp3파일, .hidden 파일, hide로 시작하는 파일을 보여지지 않게 하는 설정 예제입니다. 위 설정으로 파일은 있지만, FTP로 받아가지 못하게 할 수 있습니다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,157 명
  • 현재 강좌수 :  36,515 개
  • 현재 접속자 :  265 명