티스토리 뷰

Application/Linux

VSFTP 설치하기

알 수 없는 사용자 2008. 2. 10. 10:40

왜 VSFTP를 추천하는가?
서버 운영에 있어서 가장 중요한 요소는 보안문제입니다.
기존의 proftp와 wu-ftp 는 보안 홀에 대한 보고가 빈번히
일어나 서버의 보안이 흔들린 경우가
많았습니다.
vsftp 는 보안부분을 특히 강조한 서버데몬으로서 REDHAT,
SUSE, OPEN-BSD에서 기본 FTP 데몬으로
채택하고 있으며 vsftp를 매우 신뢰하고 있씁니다.
vsftp에서 보안, 빠른 퍼모먼스, 안정성을 주요 특징으로
소개하고 있고 그 성능도 여느 ftp 서버
보다 탁월한듯 합니다.
지원하는 대표적인 기능으로는 가상IP 지원, 가상유저 지원, Standalon 과 inetd 지원, 강력한 사용자
설정, 전송 대역폭 조절기능, 환경설정파일을 IP별로 독립적 운영 지원, IP별 제한기능등이 있습니다.
또한 config 파일의 설정문법도 아주 간단해서 FTP 서버관리를 쉽게 할 수 있습니다.

... 중략 ...

1. VSFTP 설치

vsftp 홈페이지 : http://vsftpd.beasts.org/
vsftp 다운로드 : ftp://vsftpd.beasts.org/users/cevans/

먼저 VSFTP의 설치를 위해 ftp://vsftpd.beasts.org/users/cevans/ 에 접속해 최신버젼을
다운받습니다. 현재 이 강좌를 쓰고 있는 시점의 최신버젼은 vsfpd-2.0.1 버젼이군요..
그럼 vsftpd-2.0.1을 다운받았다는 가정하에 이강좌를 진행하겠습니다.
버젼별로 큰 차이는 없으니까 다른 버젼을 1.2.2 버젼을 선택하신분들도 설치하시는데는
큰 어려움이 없으실겁니다.

다운받은 파일을 /root/SRC 라는 디렉토리에 옮겨서 설치작업을 시작하도록 하겠습니다.
/root/SRC 에서 작업하는 특별한 이유가 있는건 아닙니다. 그러니까 각자 작업공간을 만들어
작업하시면 됩니다. 저는 소스설치한 데몬이나, 유틸의 소스들을 한곳에 모아두는 습관이
있어 /root/SRC 에서 항상 작업을 하는편입니다. 뽀족히 설치작업할 위치가 없다면 저를 따라
/root/SRC 에서 작업을 하는게 좋겠네요

파일이 설치할 디렉토리로 옮겨졌으면 vsftpd-2.0.1.tar.gz 을 압축을 해제합니다.

압축이 풀리면 vsftpd-2.0.1 이라는 디렉토리가 생깁니다. 설치를 위해 이 디렉토리로 이동합니다.

VSFTP 소스가 있는 디렉토리에서 make 명령을 하면 vsftpd 라는 바이너리 파일이 생성됩니다.

ls 명령으로 새로 생성된 vsftpd 바이너리 파일을 확인할 수 있습니다.

VSFTP를 운영하기 위해서는 nobody 사용자가 필요합니다.
다음과 같이 현재 nobody 사용자가 존재하는지 체크를 하세요
[root@develop vsftpd-2.0.1]# grep nobody /etc/passwd
nobody:x:99:99:Nobody:/:/bin/bash

위와같이 nobody 가 존재할 경우는 nobody를 새로 생성하지 않아도 됩니다.
만약 nobody 사용자가 존재하지 않을경우 아래와 같이 nobody 사용자를 추가해 줍니다.

VSFTP는 empty 라는 디렉토리를 필요로 합니다. 기본구성은 /usr/share/empty 입니다.
/usr/share/empty 디렉토리가 존재하는지 확인한 후 존재하지 않는다면 empty 디렉토리를 생성해 줍니다.

다음은 Anonymous FTP에서 사용할 ftp 계정이 필요합니다.
ftp 계정이 존재하지 않는다면 추가해야 됩니다.
ftp 계정의 HOME Directory 즉 Anonymous 접근의 루트로   /var/ftp 로 설정하기 위해 -d /var/ftp 옵션을 주어 ftp 계정을 생성해 줍니다. 먼저 /var/ftp 디렉토리를 생성합니다. 만약 이미 /var/ftp 라는 디렉토리가 있을 경우 다음과 같이 디렉토리의 소유자와 그룹을 root로 변경하고 og(Other, Group)에 w(쓰기권한)을 제거합니다

* /var/ftp가 존재할 경우

* ftp 계정이 없고 /var/ftp가 존재하지 않을경우
[root@develop vsftpd-2.0.1]# mkdir /var/ftp  --> /var/ftp 가 없을 경우

이제 install 과정을 진행하겠습니다.
make install 을 해 줌으로서 생성된 vsftpd 파일이 /usr/local/sbin 에 복사가 되고 vsftpd의 man 페이지가 /usr/local/man/man5, /usr/local/man/man8 로 복사가 되고 inet 모드로 운영할 때 사용할 vsftpd 파일도 /etc/xinetd.d 디렉토리에 복사됩니다.
make install을 진행하기 전에 /usr/local/sbin 디렉토리와 /usr/local/man/man5, /usr/local/man/man8 디렉토리를 먼저 생성해 줍니다.
[root@develop vsftpd-2.0.1]# mkdir /usr/local/sbin
[root@develop vsftpd-2.0.1]# mkdir /usr/local/man/man8
[root@develop vsftpd-2.0.1]# mkdir /usr/local/man/man5

디렉토리가 모두 생성되었으면 make install을 합니다.
위와 같이 출력되면 에러 없이 install 이 실행된것입니다.

이제 VSFTP의 환경설정파일인 vsftpd.conf를 /etc 디렉토리에 복사합니다.
[root@develop vsftpd-2.0.1]# cp vsftpd.conf /etc

시스템의 local 사용자들의 접속을 허가 하기 위해 복사된 /etc/vsftpd.conf 를 열고
local_enable=YES 부분과 write_enable=YES, local_umask=022 부분의 주석을 제거합니다.
[root@develop vsftpd-2.0.1]# vi /etc/vsftpd.conf

주석을 제거했으면 저장하고 편집모드를 빠져나옵니다.

마지막으로 local 계정 사용자들의 로그인 인증을 위해 설치디렉토리안의 RedHat 디렉토리안에
있는 vsftpd.pam 파일을 /etc/pam.d 디렉토리에 ftp 라는 이름으로 복사를 합니다.

이제 모든 설치 과정은 끝났습니다. 그럼 VSFTP가 잘 작동하는지 테스트를 해 볼껀데 테스트는
xinetd 모드로 VSFTP 데몬을 돌리고 VSFTP의 standalone 모드로 운영하는 방법과 xinetd 모드로 
운영하는 자세한 방법은 'VSFTP 운영및 활용 강좌'에서 다루도록 하죠.

우선 install 할때 복사되었던 /etc/xinetd.d/vsftp 파일을 열어 disable = no 로 설정되어 있나 확인합니다.
혹시 disable = yes 로 되어 있다면 no 로 변경해 줍니다.

vsftpd 의 실행을 위해 xinetd를 restart 합니다.

xinetd 데몬이 정상적으로 실행되었으면 anonymous 로 접속을 해 봅시다

-------------추가 ---------
/etc/ftpusers   생성 - 접속을 차단할
/etc/vsftpd.chroot_list  생성- 접속시 자신의 계정 상위디렉토리를 이동 할수 있는 계정 ID
-> 1.1 버전에서는 상위디렉토리에 접근 불가 ID를 적는다.

---- vsftpd.conf -- 주요 내용--

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=No    익명 접속 불가
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#

chroot_local_user=YES     // -> 1.1 버전에는 기재되어 있지 않다
chroot_list_enable=YES    // 상위 디렉토리이동의 허용한다 다만  아래 chroot_list_file 에서 정의된 계정만 허용함
-> 1.1 버전에서는 반대로 허용하지 않는다.
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
#

. 문제 해결

1) ftpwho 같은 명령은 있나?
   또한 last를 해도 접속된 걸 확인할 수가 없는데 방법이 없나?

  ftpwho 형태의 명령은 없으며 임시적으로 다음 명령어 등으로 확인할 수 있다.

  # ps -ef|grep vsftpd
  # fuser -v ftp/tcp

  vsftpd v1.2.0이상부터 PAM을 통해 wtmp에 로그를 남기므로 last로 접속여부를 확인할 수 있다.

2) 한글 파일명이 전송될 때는 vsftpd.log 에 ???? 로 남는다. 해결책은?

  vsftpd는 출력할 수 없다고 판단하는
  ASCII 코드 31 이하, 128~159, 177 문자를 모두 ? 로 바꿔서 저장을 한다.
  따라서 이 부분을 처리하지 않고 저장하도록 소스를 수정한 후 컴파일하면 해결된다.

3) 사용자가 홈디렉토리를 못 벗어나게 하고 싶는데?

  /etc/vsftpd.conf에 다음을 추가하면, 모든 사용자는 자신의 홈디렉토리만 접근할 수 있다.

  chroot_local_user=YES

  또한 특정 사용자로만 제한을 하고 싶다면 다음과 같이 한다. /etc/vsftpd.chroot_list에는 제한할
  사용자 ID를 한줄에 하나씩 나열하면 된다.

  chroot_list_enable=YES
  chroot_list_file=/etc/vsftpd.chroot_list

  주의할 것은 chroot_local_user=YES와 chroot_list_enable=YES를 함께 사용할 경우에는
  /etc/vsftpd.chroot_list에 포함된 사용자 ID만 제한없이 홈디렉토리를 벗어날 수 있다.
  즉, 반대로 작용한다.

  standalone으로 FTP서버가 동작중이면 재실행 필요. standalone에 대해서는 6)번에서.

4) root로 접속할 수는 없나?

  가능하면 root 접속은 허용하지 않기를 바란다.
  /etc/ftpusers 파일에서 root를 빼면 접속이 가능하다.

5) ID/비밀번호가 정확히 맞는데 로긴할 때 자꾸 530 Login incorrect. 라고 나온다.

  /etc/ftpusers (또는 vsftpd.ftpusers)에 등록된 사용자인지 확인한다.
  여기에 등록된 사용자는 로긴할 수 없다. 이럴 때 /var/log/messages에 다음과 같은 로그가 남는다.

  Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd

6) standalone으로 운영하고 싶다.
   (즉, apache나 sendmail처럼 xinetd 통하지 않고 운영을 원한다.)

  /etc/xinetd.d/vsftpd (vsftpd가 아닌 다른 파일명일 수 있음) 에서 disable = yes 로 변경하여
  xinetd로 서비스 하지 않도록 설정한다. xinetd 를 재실행하면 이제 xinetd를 통한 ftp 서비스는 종료된다.

  레드햇의 경우 /etc/rc.d/init.d/xinetd restart

  이제 vsftpd 데몬를 실행한다. (소스로 설치시 기본 경로는 /usr/local/sbin)

  # /usr/local/sbin/vsftpd &

7) 다른 포트(기본 21번)를 사용하고 싶다. (예를 들어 11121번 포트를 원할 때)

  * xinetd를 이용하는 경우

   /etc/service 에 'ftp2   11121/tcp' 한 줄을 추가한다.
   그리고 /etc/xinetd.d/vsftpd (vsftpd가 아닌 ftp와 같은 다른 파일명일 수 있음) 에서
   service ftp 를 service ftp2로 바꾸고, xinetd 를 재실행한다.

  * standalone으로 운영하는 경우

   /etc/vsftpd.conf 에서 listen_port=11121 을 추가하고 vsftpd 서버를 재실행한다.

  바뀐 포트로 운영중인지 확인은 netstat -atnp(리눅스) 또는 netstat -an(그 이외 유닉스)

8) 업로드 파일 크기를 제한하는 방법은 없나요? 이를테면 5MB이상의 파일은 업로드 못한다든지.

  현재 1.2.1버전까지 vsftpd 자체에 설정하는 방법은 없습니다.

5. 참고할만한 문서

* vsftpd 1.2.0 설치 문서
ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.0/INSTALL
* vsftpd.conf man page
* vsftpd에서 한글파일로그와 lastlog 로긴확인하기 (좋은진호)
http://coffeenix.net/board_view.php?bd_code=4
* vsftpd에서 전송속도 제한 (bandwidth limit) (좋은진호)
http://coffeenix.net/board_view.php?bd_code=21
* 포트 변경

- listen_port=n

'Application > Linux' 카테고리의 다른 글

*nix 명령어 정리  (0) 2008.02.10
PROFTPD 설치  (0) 2008.02.10
서버가 느려졌어요!  (2) 2008.02.10
Solaris  (0) 2008.02.10
우분투 + APM 설치  (0) 2008.02.10