Sunday, April 15, 2018

CentOS 7.3 리눅스 네트워크 ] 3. vsFTP 서버 간단 설정


안녕하세요. 썬구루입니다. 이 게시물에서는 CentOS 7.3 리눅스를 가지고 FTP 서버를 구성하는 방법에 대해 알아보도록 하겠습니다. FTP는 파일 전송 프로토콜을 나타내지만 여기서는 FTP 서비스를 지칭합니다. 네트워크를 통해 가지고 있는 파일을 다른 곳에 전송하거나 다른 곳에 있는 파일을 가지고 오려면 어떻게 할 수 있을까요?

다양한 방법이 있지만 리눅스에서 가장 간단한 방법은 FTP 서비스를 이용하는 것입니다. FTP 서비스는 서비스를 제공하는 FTP 서버(Server)와 서비스를 제공받는 FTP 클라이언트(Client)로 나누어집니다.

CentOS 7.3 리눅스에서 vsFTP 서버 프로그램 패키지를 설치한 후 FTP 서버로 구성하고 호스트에 WinSCP 프로그램 설치하여 FTP 클라이언트를 사용해볼 것입니다. CentOS 7.3 리눅스 설치 시 저희는 Server with GUI로 설치했었습니다. 그리고 이렇게 설치하면 자동적으로 FTP 서버 프로그램이 설치되진 않습니다. 그래서 yum 또는 rpm 명령을 사용하여 관련된 프로그램 패키지를 설치해야 합니다.


■ vsFTP 설치

vsFTP는 FTP 서비스를 제공하기 위해 만들어진 서버 서비스 프로그램입니다. CentOS 7.3을 설치할 때 Server with GUI로 설치하면 관련된 패키지가 자동적으로 설치되지 않습니다. 그래서 설치 DVD를 넣고 패키지를 설치하거나 yum 명령을 사용하여 인터넷을 통해 Repository에 있는 패키지를 설치할 수도 있습니다.

저희는 CentOS 7.3 설치 ISO 파일을 가상머신에 연결하여 아래와 같이 vsFTP 패키지를 설치해 보도록 하겠습니다.


[root@centos701 ~]# rpm -qa | grep ftp
[root@centos701 ~]#
[root@centos701 ~]# df -h /dev/sr0

Filesystem      Size  Used Avail Use% Mounted on
/dev/sr0        7.8G  7.8G     0 100% /run/media/root/CentOS 7 x86_64

[root@centos701 ~]#
[root@centos701 ~]# cd /run/media/root/CentOS\ 7\ x86_64/Packages/
[root@centos701 Packages]#
[root@centos701 Packages]# ls | grep -i vsftp

vsftpd-3.0.2-21.el7.x86_64.rpm
vsftpd-sysvinit-3.0.2-21.el7.x86_64.rpm

[root@centos701 Packages]#
[root@centos701 Packages]#
[root@centos701 Packages]# rpm -ivh vsftpd-3.0.2-21.el7.x86_64.rpm

경고: vsftpd-3.0.2-21.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:vsftpd-3.0.2-21.el7              ################################# [100%]

[root@centos701 Packages]#

관련된 서비스가 활성화되어 있는지 그리고 리부팅 시에도 자동으로 실행되도록 설정되어 있는지 확인하기 위해 아래와 같은 명령을 사용할 수 있습니다.

[root@centos701 Packages]# systemctl status vsftpd.service

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

 1월 25 20:55:30 centos701 systemd[1]: Starting Vsftpd ftp daemon...
 1월 25 20:55:30 centos701 systemd[1]: Started Vsftpd ftp daemon.
 1월 26 08:45:16 centos701 systemd[1]: Stopping Vsftpd ftp daemon...
 1월 26 08:45:16 centos701 systemd[1]: Stopped Vsftpd ftp daemon.

[root@centos701 Packages]# 

리부팅 시에도 vsFTP 서버 서비스가 자동 실행될 수 있도록 설정하기 위해 아래와 같은 명령을 실행합니다.

[root@centos701 Packages]# systemctl enable vsftpd

Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@centos701 Packages]#
[root@centos701 Packages]# systemctl status vsftpd.service

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: inactive (dead)

 1월 25 20:55:30 centos701 systemd[1]: Starting Vsftpd ftp daemon...
 1월 25 20:55:30 centos701 systemd[1]: Started Vsftpd ftp daemon.
 1월 26 08:45:16 centos701 systemd[1]: Stopping Vsftpd ftp daemon...
 1월 26 08:45:16 centos701 systemd[1]: Stopped Vsftpd ftp daemon.

[root@centos701 Packages]# 





■ vsftpd 서비스 시작/종료

vsftpd 서비스 시작과 종료하는 방법은 간단합니다. 아래와 같이 systemctl 명령을 통해 서비스 데몬을 올릴 수 있습니다.

[root@centos701 Packages]# pgrep -l vsftpd
[root@centos701 Packages]#
[root@centos701 Packages]# systemctl status vsftpd

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: inactive (dead)

 1월 25 20:55:30 centos701 systemd[1]: Starting Vsftpd ftp daemon...
 1월 25 20:55:30 centos701 systemd[1]: Started Vsftpd ftp daemon.
 1월 26 08:45:16 centos701 systemd[1]: Stopping Vsftpd ftp daemon...
 1월 26 08:45:16 centos701 systemd[1]: Stopped Vsftpd ftp daemon.

[root@centos701 Packages]#
[root@centos701 Packages]# systemctl start vsftpd.service
[root@centos701 Packages]#
[root@centos701 Packages]# systemctl status vsftpd

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 목 2017-01-26 08:57:56 KST; 3s ago
  Process: 12389 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 12390 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─12390 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 1월 26 08:57:56 centos701 systemd[1]: Starting Vsftpd ftp daemon...
 1월 26 08:57:56 centos701 systemd[1]: Started Vsftpd ftp daemon.

[root@centos701 Packages]#
[root@centos701 Packages]# pgrep -l vsftpd
12390 vsftpd
[root@centos701 Packages]# 

그리고 다음과 같은 명령을 사용하면 vsFTP 서비스를 종료할 수 있습니다.

[root@centos701 Packages]# pgrep -l vsftpd
12390 vsftpd
[root@centos701 Packages]# systemctl status vsftpd

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 목 2017-01-26 08:57:56 KST; 2min 20s ago
  Process: 12389 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 12390 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─12390 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 1월 26 08:57:56 centos701 systemd[1]: Starting Vsftpd ftp daemon...
 1월 26 08:57:56 centos701 systemd[1]: Started Vsftpd ftp daemon.

[root@centos701 Packages]#
[root@centos701 Packages]# systemctl stop vsftpd.service
[root@centos701 Packages]#
[root@centos701 Packages]# systemctl status vsftpd

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since 목 2017-01-26 09:00:47 KST; 3s ago
  Process: 12389 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 12390 (code=killed, signal=TERM)

 1월 26 08:57:56 centos701 systemd[1]: Starting Vsftpd ftp daemon...
 1월 26 08:57:56 centos701 systemd[1]: Started Vsftpd ftp daemon.
 1월 26 09:00:47 centos701 systemd[1]: Stopping Vsftpd ftp daemon...
 1월 26 09:00:47 centos701 systemd[1]: Stopped Vsftpd ftp daemon.

[root@centos701 Packages]#
[root@centos701 Packages]# pgrep -l vsftpd
[root@centos701 Packages]# 

■ SELinux 설정

테스트를 위해 향상된 리눅스 보안에 관련된 SELinux를 enforcing에서 permissive로 변경하도록 하겠습니다. 아래와 같이 명령을 실행하여 /etc/sysconfig/selinux 파일 내의 설정값을 변경합니다.

[root@centos701 ~]# grep "^SELINUX" /etc/sysconfig/selinux

SELINUX=enforcing
SELINUXTYPE=targeted

[root@centos701 ~]#
[root@centos701 ~]# sed  -i  's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
[root@centos701 ~]#
[root@centos701 ~]# grep "^SELINUX" /etc/sysconfig/selinux

SELINUX=permissive
SELINUXTYPE=targeted

[root@centos701 ~]# 

동작 중인 SELinux 모드를 변경하기 위해 아래와 같은 명령을 실행합니다.

[root@centos701 ~]# getenforce

Enforcing

[root@centos701 ~]# setenforce permissive
[root@centos701 ~]#
[root@centos701 ~]# getenforce

Permissive

[root@centos701 ~]# 

■ vsftpd 구성 파일

/etc/vsftpd 디렉터리에 아래와 같은 구성 파일들이 존재합니다.

  ▶ ftpusers
  ▶ user_list
  ▶ vsftpd.conf

1). /etc/vsftpd/ftpusers 파일

FTP 서버에 접속하지 못하는 사용자 목록. 기본적으로 root 계정과 시스템 계정들은 FTP를 사용하지 못하게 막혀있습니다.

2). /etc/vsftpd/user_list

FTP 서버에 접속할 수 있는 또는 할 수 없는 사용자 목록을 가지고 있는 파일입니다. 파일 내용을 보시면 알 수 있는데 vsftpd.conf 파일 내용 중 userlist_deny 설정값이 NO 이면 접속할 수 있는 사용자 목록이고 YES라면 접속할 수 없는 사용자 목록으로 처리됩니다.

그러나 /etc/vsftpd/vsftpd.conf 파일 기본 설정에 userlist_deny라는 항목은 없습니다. 그래서 설정 전까지 기본 체크는 아래 파일에 의해 FTP 서버에 접속하지 못하는 사용자가 처리됩니다.

/etc/vsftpd/ftpusers

3). /etc/vsftpd/vsftpd.conf

vsftpd 서비스에 대한 실제 구성 파일입니다. vi 편집기를 사용하여 파일 내용을 확인하면 상당히 많은 설정값(Parameter=Value)들이 존재하는 것을 확인할 수 있습니다. 테스트를 위해 몇 가지만 변경 또는 추가할 것입니다.

파라미터
설명
anonymouse_enable
NO
 이것은 익명 사용자 로그인 설정입니다. 사용자 계정과 암호를 입력하고 접속하도록 만드는 것이 좋겠죠. 기본값이 YES로 되어 있는데 NO로 변경합니다.
chroot_local_user
YES
 FTP 접속 시 사용자 홈 디렉터리 밖으로 이동할 수 있을지 없을지에 대한 설정입니다. YES는 홈 디렉터리 밖으로 이동 못함을 나타냅니다.. 홈 디렉터리 밖으로 빠져나가지 못하도록 하기 위해 # 주석을 제거합니다.
pasv_enable
YES
 vsFTP를 패시브(Passive) 모드로 동작하게 만들기 위해 사용하는 설정입니다. 
pasv_min_port
50001
 패시브 포트 번호 (0~65535 사이 번호이나 well-known 포트를 제외한 포트 번호를 사용하는 것이 좋습니다.)
pasv_max_port
50001
 패시브 포트 번호
allow_writeable_chroot
YES
 chroot 환경을 쓰기 가능하기로 하는 설정입니다.





vi 편집기로 파일을 열어 아래와 같이 내용을 추가합니다.

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).

anonymous_enable=NO
chroot_local_user=YES

pasv_enable=YES
pasv_max_port=50001
pasv_min_port=50001
allow_writeable_chroot=YES

#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir

vsftpd.conf 구성 파일을 수정하였다면 이를 적용하기 위해 아래와 같이 vsftpd 서비스를 재시작합니다.

[root@centos701 vsftpd]# systemctl restart vsftpd.service

네트워크를 통해 FTP 서비스를 제공할 수 있도록 아래와 같이 리눅스 방화벽에 FTP 서비스를 추가합니다.

[root@centos701 vsftpd]# firewall-cmd --permanent --add-service=ftp
success
[root@centos701 vsftpd]# firewall-cmd --reload
success
[root@centos701 vsftpd]#

■ WinSCP FTP 클라이언트 프로그램 다운로드

이 프로그램은 GPL License 기반 FTP 클라이언트 GUI 프로그램이다. 프리 소프트웨어입니다. 라이선스 정보는 아래 링크에서 확인 하루 수 있으며 개인, 기업 또는 관공서에서 누구나 자유롭게 이 소프트웨어를 사용할 수 있습니다.

 https://winscp.net/eng/docs/license#free_software

아래와 같은 사이트에서 WinSCP 프로그램을 다운로드할 수 있습니다. 설치하는 방법은 따로 설명하지 않을 것입니다. 호스트 운영체제 즉 윈도우 운영체제에 이 프로그램을 설치합니다. 파일 실행 > Next > Next ...

https://winscp.net/download/WinSCP-5.9.3-Setup.exe

■ WinSCP 프로그램을 이용한 FTP 서버 접속 테스트

1). 호스트 운영체제에서 WinSCP 실행 및 정보 입력

시작 메뉴 > 실행 에서 winscp 를 입력하여 WinSCP 프로그램을 실행합니다.


위와 같은 창이 열리면 아래와 같은 정보를 입력합니다.

호스트 이름 : 192.168.80.10
사용자 이름 : guru
비 밀  번 호 : xxxxxx

저장 버튼을 눌러 FTP 서버 접속 정보를 저장합니다.

3). 파일 업/다운로드 테스트

성공적으로 접속하면 아래와 같은 화면이 나타날 것입니다. 그러면 탐색기처럼 드래그 앤 드롭 기능을 사용하여 간단하게 파일 또는 폴더를  업로드 또는 다운로드를 할 수 있습니다.


■ vsftpd 접속 시도 시 오류

1). cannot change directory /home....

위와 같은 오류가 난다면 리눅스 SELinux 때문에 방해(?)를 받고 있는 것입니다. 이때 아래와 같이 설정하면 정상적으로 접속을 할 수 있습니다.

[root@sunguru ssh]# setenforce enforce
[root@sunguru ssh]# vi /etc/sysconfig/selinux

SELINUX=permissive  <= 다음과 같이 변경

[root@sunguru ssh]#

여기까지 'vsFTP 서버 간단 설정'에 대해 알아보았습니다. 세부 설정은 다음에... ^^ WinSCP를 사용하여 22번 Port로 SSH 접속해서 파일을 전송할 수도 있습니다. SSH를 사용하면 암호화된 통신을 할 수 있죠. 텍스트 통신을 하면 암호가 패킷 모니터링 프로그램에 의해 노출되기 쉽거든요. 간단 설정만 해도 파일 업/다운로드하는 데는 문제가 없을 것입니다.


만약 특정 사용자들에게 공유 디렉터리를 만들어 활용하도록 만들고 싶다면 삼바(Samba)를 사용하시길 바랍니다.

다음 게시물에서는 SSH에 대해 알아보도록 하겠습니다.





No comments:

Post a Comment