관리 메뉴

IT창고

리눅스 FTP 설정 본문

서버운영/Linux

리눅스 FTP 설정

방구석여포 2017. 9. 21. 01:20

리눅스의 FTP(File Transfer Protocol)는 TCP/IP 프로토콜 기반의 서버와 클라이언트 간의 파일 전송시 사용되는 프로토콜로서 웹에서 FTP의 고유기능인 파일전송을 편리하게 할수있게 되어서 예전보다 인기가 떨어졌으나 대용량/대량의 파일의 전송에 특화되어 있는 프로토콜입니다. 초기의 FTP는 Telnet과 동일하게 로그인 과정에서 평문으로 데이터가 전송되어 보안에 취약해서 SFTP, FTPS가 생겼습니다. FTP 프로토콜은 TCP 20번과 21번을 사용해서 서비스합니다.


FTP동작방식으로 Active와 Passive가 있는데 둘의 단점을 알아보면 Acitve는 서버가 클라이언트에게 접속하는 방식으로 방화벽 혹은 ISP에서 외부에서의 접속을 허용하지 않는다면 정상적인 FTP동작을 할수가없고 Passive는 서비스제공을 위한 서버의 방화벽을 서버의 1024번 이후의 포트를 모두 개방해야하는 정책을 사용해야하기에 1024번 이후의 포트들을 모두 관리할수없는 단점이 있습니다.


CentOS 6.x 리눅스에서 FTP를 사용하는 법을 알아보겠습니다.

VSFTP(Very Secure FTP)는 GNU GPL 라이센스 관리하에 배포되고 있는 FTP서버용 프로그램으로 안정적이면서 빠른 속도로 서비스를 제공할 뿐 아니라 보안적 측면에서도 뛰어난 성능을 보여줍니다.

VSFTP를 설치하는법은 yum -y install vsftpd 입력해서 패키지를 설치합니다. 기초 설정으로 service vsftpd start입력하여 vsftpd 데몬을시작하고 chkconfig vsftpd on 으로 부팅할때마다 항상 활성화 시킵니다. chkconfig --list vsftpd 입력하면 확인할수있습니다. 이제 서비스가 제대로 작동하는지 확인하려면 ps -ef | grep vsftpd , netstat -tulpn | grep 21 , grep ftp /etc/services 를 입력해서 제대로 작동하는지 확인합니다.


A리눅스에 누구나 사용가능한 FTP서버를 구성해보겠습니다.

anonymous계정을 사용하여 접속하는데 anonymous계정으로 접속되는 디렉토리는 /var/ftp이고 특별한 패스워드 없이 ftp접속이 가능합니다.

vim /etc/vsftpd/vsftpd.conf 파일은 vsftpd 기본 설정 파일인데 vim편집기를 사용하여 수정해줍니다. 119줄로 글이 많은데 vim편집기에서 명령모드로 /를 입력하고 원하는 글을 쓰면 글찾기가 됩니다. /anonymous를 입력하면 anonymous에 대한 글이 있는 곳들 전부를 확인할수있습니다. 파일안에서 아래와 같이 설정해줍니다 혹은 주석을 풀어도 상관없습니다.

anonymous_enable=YES

anon_upload_enable=YES 

write_enable=YES

anon_mkdir_write_enable=YES

chown_uploads=YES

chown_username=ftp

6개 정도의 설정을 해주시면 됩니다 그리고 vsftpd.conf 파일에 25번째 줄쯤에 anon_umask=077를 추가합니다.

/var/ftp가 anonymous계정의 디렉토리인데 mkdir /var/ftp/upload 를 입력하여 디렉토리를 만들어주고 권한을 설정합니다. chown root:ftp /var/ftp/upload , chmod 773 /var/ftp/upload 를 입력해주고 service vsftpd restart 로 변경사항을 적용해줍니다. 여기까지가 설정단계인데 이제 ftp접속 테스트를 해보겠습니다.

순서도는 anonymous -> Server-A -> pwd -> /var/ftp 이동합니다. ftp디렉토리안에있는 두개의 디렉토리가 있는데 pub는 기본값으로 생성되어있는 디렉토리로 다운로드 전용디렉토리로 사용하고 upload 디렉토리는 직접만든 디렉토리로 업로드 전용 디렉토리로 사용하겠습니다.


B리눅스에 yum -y install ftp 를 입력하여 패키지를 설치하고 전에 구성했던 DNS서버의 도메인 DNS를 구축하지 않았다면 IP를 입력해도 상관없습니다. ex) ftp [IPADDR | URL]

계정은 안만들었기에 anonymous계정으로 접속합니다. 만약 접속이 안된다면 방화벽을 해제하세요.

FTP에 접속하시고 사용하는법은 평소 리눅스를 사용하시는 것과 비슷합니다. cd , ls(dir), pwd, mkdir 등 의 명령어를 사용하실수있고 get명령어(파일하나 다운로드)와 put명령어(파일업로드) 그리고 mget, mput명령어로 여러개의 파일을 다운로드및 업로드하는 명령어가 있습니다.

ex) mget [file1] [file2] [file3] , mput *.txt


위의 설정까지가 anonymous계정을 사용한 기본 FTP설정이고 사용자계정을 사용한 FTP 접속 허용을 위한 설정을 알아보겠습니다. 위의 설정을 했다는 가정하에 다음으로 넘어가겠습니다.

vim /etc/vsftpd/vsftpd.conf 파일로 가서 local_enable=yes , wirte_enable=yes , local_umask=022 를 입력하고 service vsftpd restart로 변경사항을 적용합니다. 만약 위의 anonymous계정을 사용한 FTP설정을 했다면 입력할게없을겁니다.

A리눅스에 useradd로 아이디를 만들고 passwd 아이디로 패스워드를 설정해준후에 B리눅스로 가서 FTP접속을 하면 정상적으로 접속이 됩니다.


FTP의 보안설정을 알아보겠습니다.

파일을 이용한 접근제어를 알아보는데 두개의 파일을 알고 있어야합니다. /etc/vsftpd/ftpuser 과 /etc/vsftpd/user_list 인데

ftpuser는 FTP서버접속을 차단할 계정의 목록 파일이고 user_list는 /etc/vsftpd/vsftpd.conf파일안에 userlist_enable=YES  ,  userlist_enable=NO 로 파일의 사용여부를 결정합니다 YES가 활성화입니다. 추가옵션이 있는데 userlist_deny=YES , userlist_deny=NO가 있고 NO로 설정할경우 접근 허용 목록으로 user_list를 사용합니다. 차단 설정을 했다면 두개의 파일의 차이점으로 user_list파일은 차단당하면 패스워드도 입력못하고 거부당하는데 ftpuser파일은 차단당하면 패스워드화면까지 넘어가지만 올바르게 입력해도 차단당합니다.


PAM을 이용한 로그인을 제한하는 법을 알아보겠습니다.

PAM(Pluggable Authentication Module)은 서비스 접속 및 각종 인증에 사용되는 모듈로 ftpuser파일을 이용한 FTP사용자 접근 제어는 사용자 인증에 사용되는 모듈 PAM의 pam_listfile.so 모듈을 이용해 가능합니다. cat /etc/pam.d/vsftpd 에 인증을 담당하는 2번째 라인에 auth에서 해당 설정 확인합니다. 

VSFTP의 인증절차는 아래와 같습니다.

1. 클라이언트가 FTP서버에 서비스를 요청합니다. (로그인)

2. VSFTP서비스가 PAM에게 인증을 요청합니다.

3. PAM설정파일 확인  cat /etc/pam.d/vsftpd 

4. 인증 결과를 서버에게 전달합니다.

5. FTP서버는 PAM인증 결과로 VSFTP서비스 승인/거부를 진행합니다.

사용방법은 etc/vsftpd/vsftpd.conf 파일에 userlist_enable=NO로 바꾸고 ftpuser파일에 계정하나넣습니다.

vi /etc/pam.d/vsftpd 파일에 아래와 같이 설정합니다.

위와 같이 설정하면 PAM은 허용 목록으로 바뀌게됩니다.


chroot 적용하는 법을 알아보겠습니다.

vim /etc/vsftpd/vsftpd.conf 파일에 아래에 해당하는 주석을 풀어주거나 맨 아래에 추가합니다.

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

vim /etc/vsftpd/chroot_list 파일에 사용할 계정을 입력합니다.

사진에서 아이디 두개로 확인결과 최상위 디렉토리가 다름을 확인할수있습니다.


접근과 연결제한에 대해 알아보겠습니다.

접근하는 법으로 TCP_WRAPPER 라는 프로그램이있는데 Xinetd 데몬에 의해 수행되는 서비스들의 접근제어 프로그램 입니다.

vim /etc/vsftpd/vsftpd.conf파일에 tcp_wrappers=YES 로 해줍니다. yum -y install tcp_wrappers 패키지를설치해주고 

vim /etc/hosts.deny 파일에 vsftpd:ALL로 수정하고 vim /etc/hosts.allow 파일에 vsftpd:100.100.100.0/255.255.255.0 으로 수정해 줍니다. 사용법은 tcpdmatch [데몬명]:[IP주소/네트워크주소] 입니다.

ex) tcpdmatch vsftpd 100.100.100.130

access로 접근이 가능한지 불가능한지 알수있습니다. 순서를 따지면 client -> iptables -> tcp_warapper -> pam -> process 순서입니다. tcp_wrappers패키지를 설치하면 vim /etc/hosts.allow 파일에 설정없이 모두 주석으로 만들면 vsftpd 접속이 불가능해집니다. 두 파일 /etc/hosts.allow /etc/hosts.deny 파일중 allow파일이 우선순위가 높아서 먼저 해석되는데

그러므로 deny파일과 규칙이 겹치면 deny파일의 규칙은 무시됩니다.

연결을 제한하는 법은 vim /etc/vsftpd/vsftpd.conf파일에서 맨 아래줄 부터 설정하면 됩니다. 설정할 옵션으로 6개정도 뽑으면 아래와 같습니다.

max_clients=50

max_per_ip=10

anon_max_rate=10000

local_max_rate=40000

max_login_fail=3     // 패스워드를 3번실패시 로그인 종료

idel_session_timeout=300  // 아무런 작업없을시 300초후에 접속종료


Passive 모드를 설정해 보겠습니다.

vim /etc/vsftpd/vsftpd.conf 파일에서 수정하는데 아래와 같이 수정하면됩니다.

pasv_enable=YES

pasv_max=port=61000

pasv_min=port=61000 

위와 같은설정으로 포트범위를 지정해줍니다.


VSFTP 보안 기능(SFTP FTPS)을 설정해보겠습니다.

A리눅스에 yum -y install openssh-server openssh 입력하여 패키지를 설치합니다.

vim /etc/ssh/sshd_config 파일을 열어 134째 라인은 주석 처리하고 135라인부터 아래에 사진과 같이 설정합니다. 

internal-sfto는 ChrootDirectory옵션을 사용해 각 사용자 별로 chroot를 적용하기위해 새롭게 만든이름 sftp-users 라는 그룹만 sftp를사용할수있고 internal-sftp로 접속이 가능합니다. service sshd restart를 입력하여 변경사항을 적용합니다.

테스트를 위해 아래와 같이 계정을 만듭니다.

groupadd sftp-users 

useradd -g sftp-users sftp-1

useradd -g sftp-users sftp-2

passwd sftp-1

passwd sftp-2

계정을 만들고 mkdir /home/sftp-1/test_dir 디렉토리를 만들어줍니다. 만든후 소유권과 권한을 설정해줍니다. chmod -R 755 /home/sftp-1  ,  chown -R root:sftp-users /home/sftp-1 를 입력하면 됩니다.

B리눅스로 넘어가서 테스트를 위해 yum -y install openssh-clients 를 입력하여 패키지를 설치합니다. 

sftp sftp-1@192.168.1.23 을 입력하면 sftp접속이 가능합니다 위의 sftp-1계정은 권한을 설정해서 접속이되지만 sftp-2계정은 권한및소유권을 설정하지않아 접속이 불가능합니다.


클라이언트 윈도우7에서 작업을 해보겠습니다.

https://filezilla-project.org/ 사이트에서 클라이언트용 프로그램을 다운로드하여 설치합니다.

sftp가 설치된 A리눅스에서 vim /etc/vsftpd/vsftpd.conf파일에가서 아래와 같이 설정합니다.

anonymous_enable=NO

local_enable=YES

write_enable=YES

chroot_local_user=YES

윈도우에서 filezilla를 실행해서 접속합니다.

인증서를 만들어봅니다.

꼭 cd /etc/pki/tls/certs 디렉토리로 이동합니다. certs 디렉토리에서 openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.epm -out vsftpd.pem 명령어를 입력합니다. 명령어가 꽤 길기때문에 주의합니다.

화면에 인증서 생성시 정보를 설정하는 화면이 나오는데 아래의 사진과 같은 양식으로 작성합니다.

작성을 완료하고 ls를 입력하면 파일 두개가 있는데 vsftpd.epm은 개인키 파일이고 vsftpd.pem은 인증서 파일입니다.

vsftpd.conf 파일에서 SSL 설정합니다. vim /etc/vsftpd/vsftpd.conf파일에 맨 아래에 아래의 사진과같이 설정합니다.

설정하고 service vsftpd restart를 해서 변경된 사항을 적용시킵니다.

다시 클라이언트 윈도우7로 넘어가서 filezilla에 사이트 관리자 창으로 갑니다. 호스트는 A리눅스로 유지하고 프로토콜은 FTP-파일 전송 프로토콜로 바꾸고 아래에 암호화는 TLS를 통한 명시적 FTP 필요를 선택합니다. 그러면 SSL인증서 설정이된 FTP서버에 접속할수있습니다.

인증서 화면이 나오면서 확인을 누르면 A리눅스의 FTP서버에 접속하게 됩니다.

'서버운영 > Linux' 카테고리의 다른 글

리눅스 Samba(삼바) 서버 설정  (0) 2017.09.23
리눅스 NFS 설정  (0) 2017.09.21
리눅스 DNS 고급설정  (0) 2017.09.19
리눅스 DNS 설정  (0) 2017.09.18
리눅스 본딩(Bonding)  (0) 2017.09.16
Comments