CentOS 8 - FTP 서버 구축(VSFTPD) 설치

    CentOS 8 - Install FTP Server (VSFTPD)

    FTP (File Transfer Protocol)
    원격 사용자가 시스템과 파일을 주고받을 수 있는 클라이언트-서버 간 네트워크 프로토콜입니다.

    포트는 [21번]을 사용하고 있습니다.
    리눅스에서 가장 많이 사용하는 오픈 소스 FTP는 [PureFTPd/ProFTPD/vsftpd] 등이 있습니다.

    VSFTPD (Very Secure FTP) [공식 홈페이지]
    그중 보안적으로 안전하며 안정적인 데이터 이동 속도를 제공하고 있는 VSFTPD 설치 포스팅을 진행하려고 합니다.
    레드햇(Redhat)/CentOS/수세(SuSE) OS에서도 기본으로 선택하는 FTP 프로그램 입니다.
    릴리즈 버전은 [2015-07] [vsftpd-3.0.3] 이 마지막이지만 현재까지도 대중적으로 많이 이용하고 있으며 버그 리포트도 거의 없다 보니 릴리즈 업데이트가 드물게 발생합니다.

    ■ [설치환경 및 준비물]
    릴리즈 설치 테스트 : 2020-06-26
    CentOS 8 리눅스 설치 서버 [포스팅 참고]

    OS 버전
    [root@localhost ~]# cat /etc/redhat-release
    CentOS Linux release 8.1.1911 (Core)

     

    ※ CentOS 8 커널 5.7 적용 후 테스트 진행 [기본 커널에서 작업해도 상관없음]
    [root@localhost ~]# uname -r

    5.7.2-1.el8.elrepo.x86_64

     

    vsftpd 설치 버전 확인
    [root@localhost ~]# yum list vsftpd
    사용 가능한 패키지
    vsftpd.x86_64  3.0.3-31.el8  AppStream

    ■ 진행 순서


    1. vsftpd [Yum 설치]

    [root@localhost ~]# yum install vsftpd
    마지막 메타 데이터 만료 확인 : 0:05:32 전에 2020년 06월 25일 (목) 오전 03시 45분 06초.
    Dependencies resolved.
    ==============================================================
     Package              Architecture         Version                     Repository               Size
    ==============================================================
    Installing:
     vsftpd                     x86_64               3.0.3-31.el8                AppStream               180 k

    Transaction Summary
    ==============================================================
    설치  1 Package

    Total download size: 180 k
    Installed size: 343 k
    Is this ok [y/N]: y

    ..

    설치됨:
      vsftpd-3.0.3-31.el8.x86_64
    완료되었습니다!

    2. vsftpd.conf 환경설정 [수정 후 저장]

    [root@localhost ~]# vi /etc/vsftpd/vsftpd.conf

         11 # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
         12 anonymous_enable=NO     [ YES → NO 변경 ]


         98 # (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
         99 # the user does not have write access to the top level directory within the
        100 # chroot)
        101 chroot_local_user=YES      [ # 주석 제거하거나 라인 추가 ]


        129 pasv_enable=YES                 [ 추가 ]
        130
        131 pasv_min_port=50001           [ 추가 ]
        132 pasv_max_port=50005           [ 추가 ]
        133
        134 allow_writeable_chroot=YES     [ 추가 ]

    [참고]
    anonymous_enable=NO

    익명 유저 로그인을 차단합니다. YES 되어있을 경우 아무나 접속할 수 있으므로 보안에 취약

     

    chroot_local_user=YES

    일반계정의 유저 홈 디렉토리에서 상위 폴더로 이동하는 것을 제한합니다.

     

    pasv_enable=YES

    Passive 모드로 접속할 수 있게 설정합니다.

    [Passive 모드의 특징] 
    - PC 클라이언트에서 서버 쪽으로 21번 포트 통신 응답을 시도합니다.
    - 서버 측에서 응답을 받을 경우 서버에서 사용할 두 번째 포트(1024~65535 포트)를 알려줍니다.
    - PC 클라이언트는 다른 포트를 열어 서버가 알려준 두 번째 포트로 접속을 시도하고 데이터를 전송합니다.
    - 하지만 서버에서 모든 두번째 포트(1024~65535 포트)를 개방하고 알려야 하는 문제가 있지만 접속 범위를 설정하여 문제를 해결할 수 있습니다.

    pasv_min_port=50001 / 접속 포트 설정의 최소 범위 (위 포트 범위 내에서 임의 설정 가능)
     pasv_max_port=50005 / 접속 포트 설정의 최대 범위 (위 포트 범위 내에서 임의 설정 가능)

    allow_writeable_chroot=YES

    상위 버전부터는 일반계정 유저에 홈디렉토리에 쓰기 권한이 있을 경우 해당 옵션을 꼭 주어야 합니다.
    안 할 경우 : 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 에러 발생[스크린샷 참고]

    3. vsftpd 활성화 및 서비스 구동

    □ 부팅 시 자동 활성화

    [root@localhost ~]# systemctl enable vsftpd
    Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.

     

    서비스 시작
    [root@localhost ~]# systemctl start vsftpd

    구동 확인
    [root@localhost var]# ps -ef |grep vsftpd

    root       2447      1  0 04:14 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
    root       2449   1821  0 04:14 pts/1    00:00:00 grep --color=auto vsftpd

    4. 방화벽 설정

    □ iptables 수정 후 저장[순서 중요]

    [root@localhost ~]# vi /etc/sysconfig/iptables

    # sample configuration for iptables service
    # you can edit this manually or use system-config-firewall
    # please do not ask us to add additional ports/services to this default configuration
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT    [추가]
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 50001:50005 -j ACCEPT  [추가]
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT

     

    □ 방화벽 재시작

    [root@localhost var]# systemctl restart iptables

     

    □ 적용 확인

    [root@localhost var]# iptables -nL | egrep "21|5000"
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:21
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpts:50001:50005

    5. FTP 테스트할 일반계정 생성

    □ 계정 생성
    [root@localhost ~]# useradd ftptest

    패스워드 설정
    [root@localhost ~]# passwd ftptest
    ftptest 사용자의 비밀 번호 변경 중
    새  암호: 패스워드 입력
    새  암호 재입력: 패스워드 입력
    passwd: 모든 인증 토큰이 성공적으로 업데이트되었습니다.

    계정 생성 확인 [PASSWD 파일에 순차적으로 맨 아래에 등록]
    [root@localhost ~]# cat /etc/passwd | grep ftptest
    ftptest:x:1002:1002::/home/ftptest:/bin/bash

    계정 폴더 생성 확인
    [root@localhost ~]# ls -al /home | grep ftptest
    drwx------   2 ftptest ftptest  4096  6월 25 04:29 ftptest

    사용자 업로드를 위해 쓰기 권한 부여
    [root@localhost ~]# chmod 711 /home/ftptest/
    [root@localhost ~]# ls -al /home | grep ftptest
    drwx--x--x   2 ftptest ftptest  4096  6월 25 04:29 ftptest

    6. 실전 테스트

    FTP 접속할 수 있는 클라이언트는 종류가 많습니다.

    가장 흔한 알드라이브(구 알FTP)/파일 질라 등이 있으며 저는 파일질라 프로그램을 이용해 접속해보겠습니다.

    파일질라 [공식 홈페이지]

    [파일 질라 로그인 화면]

    [정상 로그인 및 파일 업로드]

    □ 서버에 파일 업로드 확인 완료

    [root@localhost ftptest]# ls -al /home/ftptest/
    합계 24
    drwx--x--x  2 ftptest ftptest 4096  6월 25 21:15 .
    drwxr-xr-x. 6 root    root    4096  6월 25 04:29 ..
    -rw-r--r--  1 ftptest ftptest   18 11월  8  2019 .bash_logout
    -rw-r--r--  1 ftptest ftptest  141 11월  8  2019 .bash_profile
    -rw-r--r--  1 ftptest ftptest  312 11월  8  2019 .bashrc

    -rw-r--r--  1 ftptest ftptest 1241  6월 25 21:15 test.PNG [서버 업로드 확인]

     

    이렇게 설정을 완료하면 호스팅 서비스의 경우 사용자별로 관리를 할 수 있으므로

    보안적으로 좀 더 안전하게 이용이 가능합니다.

    Designed by JB FACTORY