티스토리 뷰

Update : 2019-04-02

CentOS 강좌 PART 2. 6  FTP 서버 구축과 운영

FTP (File Transfer Protocol)은 네트워크를 통해 서버와 클라이언트 간에 파일을 전송하기 위해 널리 사용되는 표준도구이다. 사용자 기반 또는 익명의 인증을 통한 파일 전송을 통해 편리하게 파일을 공유할 수 있다. 하지만 CentOS7에서는 보안상 이유로 VSFTP 데몬으로 변경되어 사용되고 있으며, 기존 FTP에 비해 강화된 보안 기술을 제공한다.

이 가이드에서는 VSFTP 의 설치와 구성을 다룬다.



1.FTP 서버 설치

먼저 vsftpd를 yum을 통해 설치한다.

1
[root@web whchoi]# yum -y install vsftpd
cs

설치가 완료되면 vsftpd를 활성화하고, 재구동시에서 사용가능하도록 등록한다.

1
2
[root@web whchoi]# systemctl start vsftpd
[root@web whchoi]# systemctl enable vsftpd
cs

FTP 서비스 포트를 방화벽에서 허용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@web whchoi]# firewall-cmd --zone=public --permanent --add-port=21/tcp
success
[root@web whchoi]# firewall-cmd --zone=public --permanent --add-service=ftp
success
[root@web whchoi]# firewall-cmd --reload
success
[root@web whchoi]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: ssh dhcpv6-client ntp http ftp
  ports: 21/tcp
cs



2. FTP 서버 구성

FTP 서버를 설정하고 보안관련 추가 구성을 위해 /etc/vsftpd/vsftpd.conf를 설정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@web whchoi]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable = NO         # 익명 로그인을 비활성화 (기본값 YES)
 
# anonymous_enable을 할 경우 기본 디렉토리는 /var/ftp/pub 이다.
 
local_enable = YES            # 로컬 로그인을 허용 
write_enable = YES            # 파일 시스템을 변경하는 FTP 명령을 활성화 
local_umask = 022             # 로컬 사용자를위한 파일 작성을위한 umask 값 
dirmessage_enable = YES       # 사용자가 처음 입력 할 때 메시지 표시 가능 새로운 디렉토리 
xferlog_enable = YES          # 로그 파일은 업로드 및 다운로드를 상세하게 관리합니다. 
connect_from_port_20 = YES    # PORT 스타일 연결을 위해 서버 시스템에서 포트 20 (ftp-data) 사용 
xferlog_std_format = NO       # 표준 로그 파일 형식 유지 (기본값 YES) —> 기본값은 로그를 볼 수 없다.
listen = NO                   #독립 실행 형 모드에서 vsftpd 실행 방지
listen_ipv6 = YES             # IPv6 소켓에서 수신 대기
pam_service_name = vsftpd     # PAM 서비스 사용 
userlist_enable = YES.        # vsftpd가 사용자 이름 목록 로드 허용. 
tcp_wrappers = YES            # tcp wrappers 허용
xferlog_file=/var/log/xferlog # log를 활성화 한다. (기본은 비활성)
vsftpd_log_file=/var/log/vsftpd.log
 
 
# 대부분은 기본설정을 사용하면 되고, anonymous에 대한 허용여부만 결정하면 된다.
# vsftpd_log_file=/var/log/vsftpd.log 를 추가하고, xferlog_std_format = NO를 변경하지 않으면 log가 안보인다… 
이거 때문에 1시간 헤맸다…반드시 설정 변경해야 로그를 볼 수 있다!!!
cs

사용자 목록 파일 기반으로 FTP를 서용하거나 거부하는 구성을 설정한다.
해당 파일은 /etc/vsftpd.userlist  에서 설정할 수 있다.
이 파일 목록에 User가 추가되지 않으면, vsftpd 를 사용할 수 없도록 한다.
만약 이 파일 목록을 새롭게 만들지 않으면, 현재 설정된 모든 User들이 vsftpd 사용이 가능하다.

1
2
3
4
5
6
7
8
9
[root@web whchoi]# cat /etc/vsftpd.userlist
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
chroot_local_user=YES
allow_writeable_chroot=YES
 
# vsftpd가 userlist를 load하도록 하고, file은 /etc/vsftpd.userlist에 저장하도록 한다.
# User가 로그인시 자신의 home directory에 기본 로그인하고 쓰기를 허용하도록 한다.
cs



3.SELinux 설정. 

FTP 로그인 사용자가 자신의 홈디렉토리 파일을 읽을 수 있도록 SELinux bool을 설정한다. 기본 비활성화 되어 있으므로 구성이 필요하다.
semanage 명령은 기본 설치되어 있지 않으므로, 필요에 따라 아래 내용을 수행한다.

1
2
3
4
[root@web whchoi]# yum provides /usr/sbin/semanage

# semanage 명령을 설치한다.
cs

1
2
3
4
5
6
7
8
[root@web whchoi]# setsebool -P ftp_home_dir on
[root@web whchoi]# semanage boolean -m ftpd_full_access --on
 
# setsebool 이 기본 비활성화이므로, 활성화 시켜준다.
# semanage 명령을 통해 FTP가 사용자의 홈 디렉토리를 읽고 쓸 수 있도록 SELinux 정책을 설정한다.
 
[root@web whchoi]# systemctl restart vsftpd
# vsftpd를 재구동한다.
cs

"setsebool -P tftp_home_dir on" 이 에러가 나는 경우에는 "setsebool -P tftp_home_dir on"로 대체한다.
REHL/CentOS 7.3 bug 이다.


4.FTP User 테스트

User를 신규 생성하고, Test 해  본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@web whchoi]# useradd -m test1
[root@web whchoi]# passwd test1
 
# -m 옵션은 디렉토리를 함께 생성하며, 사용자와 디렉토리 삭제시에는 userdel -r 옵션을 사용한다.
# 기존 사용자가 있다면 이 절차는 무시해도 된다.
 
[root@web whchoi]# echo “test1" | tee -a /etc/vsftpd.userlist
[root@web whchoi]# cat /etc/vsftpd.userlist
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
chroot_local_user=YES
allow_writeable_chroot=YES
test1
whchoi
root
 
# /etc/vsftpd.userlist에 새로운 User를 추가한다.
 
[root@web whchoi]# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): test1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/test1”
 
# 정상적으로 로그인되는 것이 확인된다.
cs

Log 파일에서 보면 정상적으로 접속과 전송이 이뤄지는 것을 확인 할 수 있다.




공지사항