ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • FTP 서버 설정
    Linux 2010. 11. 25. 17:55
    반응형

    FTP Server (vsFTP, proFTP) 구축하기

     

    1. FTP Mode

     

    1-1. Port Mode (Active Mode)

     

    처음 Client Server 21번 포트로 접속을 맺게 되는데 이 Session Command Session이라고 하며, Command Session을 통해 사용자는 Server에게 사용자 ID Password를 전달해서 인증을 받는다. 인증을 거친 Client pwd, dir, get, put … 등의 원하는 작업에 해당하는 명령어를 전달한다.

     

    FTP를 통해 실제 파일을 주고 받을 때는 새로운 Session이 하나 더 연결되는데 이를 Data Session이라고 한다. Data Session Server에서 자신의 출발지 포트를 20번으로 하고 Client 1024 이상의 포트와 접속을 맺는다. Data Session을 통해 Client Server로부터 파일을 다운로드 할 수 있고 Server로 업로드를 하게 된다.

     

    그러나 이런 이유로 FTP Gateway설정을 해서 방화벽이 내부 사용자들의 FTP 접속을 대행하게 된다.

    방화벽이 내부 사설 PC FTP접속 요구를 가로채서 방화벽이 대신 Server와 접속을 하게 된다. 방화벽이 Server Clinet 중간에서 Data의 흐름을 중개하게 된다.

     

    1-2. Passive Mode

     

    Port Mode (Active Mode) Client에서 Server Command Session 접속을 하고, Server에서 Client로의 Data Session을 연결하게 되는 반면, Passive Mode Client Server Command Session Data Session을 모두 연결하는 방식이다.

     

    내부 사설 PC에서 Server Command Data Session을 모두 연결하기 때문에 내부에서 외부로 FTP 접속시 Passive Mode로만 접속한다면 방화벽에서는 FTP Gateway를 설정할 필요가 없다

     

    2. vsFTP 구축하기

     

    2-1. 패키지 설치

     

    # rpm –qa vsftpd

    # yum install vsftpd

    # ls /var/ftp/

    pub                                  : pub 디렉토리가 생성되었는지 확인

     

    2-2. 설정 확인

     

    # telnet localhost 21

    Trying 127.0.0.1…

    Connected to localhost.localdomain (127.0.0.1)

    Escpe character is ‘^]’

    220 (vsFTPd 2.0.5)

    user ftp

    331 Please specify the password.

    pass ftp@mail.net

    230 Login successful.

    quit

    221 Goodbye.

    Connection closed by foreign host.

     

    3. 환경 설정 (Upload 설정 방법)

     

    # vi /etc/vsftpd/vsftpd.conf

                 다음 행의 # 주석을 제거한다.

                 27 : anon_upload_enable=YES

                 31 : anon_mkdir_write_enable=YES

    # cd /var/ftp

    # ls –l

    drwxr-xr-x  2  root  root 4096 Aug 29 00:50 pub

    # chown ftp.ftp pub/                         : 소유자.그룹 을 ftp로 바꾼다

    # chmod –R 757 pub/                       : 일반유저도 write 할 수 있게 설정

     

    4. ftp 명령어 (Client에서 사용)

     

    help, ?                 : 도움말

    cd {Directory}       : 해당 디렉토리로 이동한다

    chmod {File}        : 원격의 FTP 서버에 있는 파일이나 디렉토리의 퍼미션을 조정한다

    dir {Directory}       : 디렉토리 리스트를 알아본다. ls와 동일하다

    delete {File}         : 파일을 삭제한다

    mdelete {File}       : 여러 개의 파일을 동시에 삭제한다

    exit                      : 원격 FTP서버의 접속을 종료한다

    quit                      : 접속을 종료한다

    get {File}             : 원격 FTP 서버에 있는 파일을 자신의 로컬 시스템으로 가져온다

    put {File}             : 로컬 시스템에 있는 파일을 원격의 FTP 서버로 업로드 한다

    mget {File}           : 원격 FTp 서버에 있는 여러 개의 파일을 동시에 다운로드 할 때 사용한다

    mput {File}           : 로컬 시스템에 있는 여러 개의 파일을 동시에 업로드 할 때 사용한다

    size {File}            : 원격 FTP 서버에 있는 파일의 크기를 출력한다

    mkdir {Directory}: 원격의 FTP 서버에 새로운 디렉토리를 생성한다

    rmdir {Directory}    : 원격의 FTP 서버의 디렉토리를 삭제한다

    pwd                     : 원격 FTP 서버의 현재 위치를 출력한다

    status                  : 현재의 상태를 출력한다

    nlist {Directory}     : 원격의 FTP 서버에 있는 DIR 서브 디렉토리 리스트를 출력한다

    open {FTP host}   : 원격의 FTP host로 접속한다

    rename   {name1 name}      : 원격의 FTP 서버에 있는 파일이나 디렉토리의 이름을 name1에서 name2

    로 바꾼다

     

    5-1. 실명 접속시 환경 설정

     

    # /etc/pam.d/vsftpd

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

    : /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.

     

    5-2. vsftpd.conf 의 주요 설정

     

    anonymous_enable=YES                   : 사용자의 접속 허용 여부

    local_enable=YES                            : 로컬 계정 사용자의 접속 허용 여부

    write_enable=YES                            : write 명령어 허용 여부

    local_umask=022                              : 로컬 계정 사용자용 umask

    anon_upload_enable=YES                 : anonymous 사용자가 파일을 업로드 할 수 있는지 여부

    anon_mkdir_write_enable=YES           : anonymous 사용자의 디렉토리 생성 허용 여부

    xferlog_enable=YES                         : 파일 전송 로그를 남길 것인지 여부

    xferlog_file=/var/log/vsftpd.log          : 파일 전송 로그 파일명

    xferlog_std_format=YES                     : xferlog 표준 포맷으로 로그를 남길지 여부.

    ftpd_banner=Welcome to blah FTP service.       : FTP 서버 접속할 때 로긴 메시지

    chroot_list_enable=YES

    chroot_list_file=/etc/vsftpd.chroot_list               : 사용자의 홈디렉토리를 벗어나지 못하도록 제한하기 위한 설정. 제한이 필요할 경우 YES로 바꾼 후 제한할 사용자 ID chroot_list_file= 에 설정한 파일에 지정한다.

     

    5-3. 기본 설정 파일에는 없는 설정값으로 필요시 추가한다

     

    pam_service_name=vsftpd    : PAM 파일명을 지정

                                               (설치할 때 /etc/pam.d/vsftpd명으로 복사함)

    session_support=YES          : wtmp에 로그 남기기

                                               (YES로 해야만 last 명령어로 접속 여부 확인 가능)

    chroot_local_user=YES        : 사용자가 자신의 home directory를 벗어나지 못하도록 설정

    message_file=.message       : 새로운 디렉토리에 들어갔을 때 뿌려줄 환경 메시지를

                                              저장할 파일명 

    xferlog_std_format=NO          : xferlog 형식으로 log를 남기려면 xferlog 표준 포맷은 로긴,

                                               디렉토리 생성등의 로그를 남기지 않음. 그러나 vsftpd

                                               스타일 로그는 이를 포함한 보다

    상세한 로그를 남김

    anon_max_rate=0                : 전송속도 제한 (0은 제한없음, 단위는 초당 bytes)

    local_max_rate=0

    trans_chunk_size=0

    max_clients=100                  : 최대 접속자 수

    max_per_ip=3                      : IP당 접속 수

     

    5-4. vsftpd의 다양한 기능 설정

     

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

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

    ascii_download_enable=YES

    ascii_upload_enable=YES

     

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

    대부분의 ftp서버는 로그인시 쉘을 요구하게 됩니다. 하지만 쉘 권한을 주지 않은 사용자들에게 ftp접근 권한을 주려면 /etc/pam.d/vsftpd파일에서 4번째 줄에 #을 입력하여 주석 처리 합니다.

    (check_shell=NO 라는 지시자가 있었지만 PAM인증을 받는 곳에서는 작동하지 않았다.)

    #%PAM-1.0

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

    auth       required     pam_stack.so service=system-auth

    #auth       required     pam_shells.so

    account    required     pam_stack.so service=system-auth

    session    required     pam_stack.so service=system-auth

     

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

    ftp사용자가 자기 home디렉토리를 벗어나지 못하게 하려면 다음과 같이 설정합니다.

    chroot_list_enable=YES

    chroot_local_user=YES

    위와같이 설정합니다. 접속하면 /etc/vsftpd.chroot_list 파일이 없다고 에러가 나게 됩니다.

    단순히 touch /etc/vsftpd.chroot_list 이렇게 파일을 만들어 주면 됩니다.

    그리고 특정유저는 제외하려면 /etc/vsftpd.chroot_list 파일에 사용자 계정을 넣어줍니다.

     

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

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

    force_dot_files=YES

     

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

    특수한 목적으로 파일 및 디렉토리의 소유자를 숨길 경우가 있습니다. 이런 경우 다음과 같이 설정하면, ftp라는 사용자로 보이며, ID는 보이지 않습니다.

    hide_ids=YES

     

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

    하위디렉토리 리스트를 보여주기 위해서 ls -R 명령어를 내릴때가 있습니다. 이런경우 대부분의 ftp 서버는 부하등의 이유로 막아 두게 됩니다. vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 다음 지시자를 입력하세요.

    ls_recurse_enable=YES

     

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

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

    passwd_chroot_enable=YES

     

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

    대부분의 ftp서버에서 시간 표현은 표준시각(GMT)을 보여주게 됩니다. 국내에서만 사용하는 ftp서버는 다음 옵션으로 국내 시간으로 보여줄 수 있습니다.

    use_localtime=YES

     

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

    다운로드 받는 한 사용자가 네트웍 트래픽을 모두 사용해 버리는 것을 방지하기 위해서 대역폭을 조정해야 하는 경우가 있습니다. 다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는  (Bytes/Sec) 입니다.

    local_max_rate=300000

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

     

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

    ftp서버에 접속할 수 있는 최대 접속수를 제한하려면, 아래의 설정으로 제한 가능합니다.

    max_clients=10

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

     

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

    ftp서버의 한 사용자가 대역폭을 모두 사용해 버리는 것을 방지하기 위해, 전송 속도를 제한하면, flashget 등의 유틸리티로 몇개의 접속으로 나눠 받으면 대역폭 제한을 우회 할 수 있습니다. 이런경우 한 IP에서 접속 가능한 동시접속 수를 제한하므로 해결 가능합니다.

    max_per_ip=2

    위 설정은 한 IP에서 접속할 수 있는 연결을 2개로 제한합니다.

     

    12) PASSIVE 모드 사용시 사용하는 포트 범위를 제한하려면?

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

    pasv_min_port=40000

    pasv_max_port=50000

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

     

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

    ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다. vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다.

    deny_file={*.mp3,*.wmv}

    위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.

     

    14) 특정파일 패턴을 숨기려면?

    특정파일이 서버내에는 존재하지만, ftp접속시 보여지지 않게 설정할 수 있습니다. 다음예를 보시기 바랍니다.

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

    위 설정은 mp3파일, .hidden 파일, hide로 시작하는 파일을 보여지지 않게 하는 옵션입니다.

    반응형

    'Linux' 카테고리의 다른 글

    리눅스 백업  (0) 2010.11.25
    Fedora Core 6 에서 CVS 사용하기  (0) 2010.11.25
    리눅스 타임서버 설정  (0) 2010.11.25
    eth0, eth1 바꾸기  (0) 2010.11.25
    VI 편집기 사용하기  (0) 2010.11.25

    댓글

Designed by Tistory.