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 [서버 업로드 확인]
이렇게 설정을 완료하면 호스팅 서비스의 경우 사용자별로 관리를 할 수 있으므로
보안적으로 좀 더 안전하게 이용이 가능합니다.
'◈『OS』 > Linux[CentOS (Stream)]' 카테고리의 다른 글
CentOS 8 - LVM 용량 증설 (0) | 2020.07.13 |
---|---|
CentOS 8 - 싱글 유저 모드 및 ROOT 패스워드 초기화 (0) | 2020.07.10 |
CentOS 8 - 웹 서버 구축 [APM] 설치 (2) | 2020.06.24 |
CentOS 8 - 보안설정 (2) | 2020.06.16 |
CentOS 8 - GUI 설치 (0) | 2020.06.14 |