FTP 프로토콜
FTP(File Transfer Protocol)로 파일을 전송하는 프로토콜입니다. FTP를 이용하면 원격지에 있는 리눅스 서버(혹은 다른 FTP서버)로부터 특정 파일을 다운로드하거나 반대로 업로드할 수 있습니다. 단 원격지 서버에는 FTP 서버 데몬이 설치되고 활성화(동작) 되어 있어야 하며, FTP를 이용하기 위해서는 접속하는 입장에서도 FileZilla같은 FTP 클라이언트 프로그램이 있어야 합니다.



CentOS에서 FTP서버는 vsftpd 라는 패키지로 제공됩니다.
리눅스 환경에서는 FTP서버를 vsftpd(Very Secure FTP Demon)이라는 이름의 패키지를 통해 제공됩니다. 이름에서도 알 수 있듯이 vsftpd는 보안적인 기능 또한 가지고 있습니다.

먼저 vsftpd를 설치하기위해 root 계정으로 다음의 명령어를 실행합니다
# yum -y install vsftpd
cs

아주 쉽게(?) 설치가 완료됩니다.
...생략...
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : vsftpd-3.0.2-25.el7.x86_64                      1/1
  Verifying  : vsftpd-3.0.2-25.el7.x86_64                      1/1
 
Installed:
  vsftpd.x86_64 0:3.0.2-25.el7                                     
 
Complete!
cs





서비스 설정
vsftpd 서비스(FTP)가 리눅스 서버를 재부팅 하여도 자동으로 동작하도록 설정합니다.
# systemctl restart vsftpd
# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
cs




홈 디렉터리 접근 설정
CentOS7(1511) 이후 버전부터는 SELinux 보안 설정을 변경해 주어야 FTP 사용자의 홈 디렉터리에 접근할 수 있습니다. 다음 명령어를 실행하고 아무런 메시지도 뜨지 않고 넘어가면 성공입니다.
# setsebool -P allow_ftpd_full_access on
cs

CentOS7(1511) 이하 버전인 경우
# setsebool -P ftp_home_dir on
cs





방화벽 설정
CentOS7에서는 기본적으로 FTP에 대한 포트가 방화벽으로 막혀있으므로 해제 설정을 해주어야 합니다. 다음 두 명령어를 차례로 입력합니다. 각각 success가 뜨면 성공입니다.
# firewall-cmd --permanent --add-service=ftp --zone=public
success
# firewall-cmd --reload
success
cs





익명 계정(Anonymous) 접근
FTP는 사용자 계정을 통해 로그인할 수도 있지만 익명 계정 이란것이 있어 암호 없이 접속하여 일부 오픈된 디렉터리만 사용할 수 있는 기능이 있습니다.

anonymous(익명) 계정으로 접속하는 경우 디렉터리는 기본적으로 /var/ftp/ 로 접근됩니다. 해당 디렉터리로 접근해보면 기본적으로 pub이라는 디렉터리가 생성 되어 있습니다.



pub 디렉터리에 파일을 하나 생성해 보도록 하겠습니다. 내용은 아무것이나 입력해도 상관없습니다.
# cd /var/ftp/pub/
# vi test. txt
cs





브라우저를 통한 FTP 접속
익명계정을 통해 파일을 다운로드만 하는 경우에는 브라우저를 이용해도 됩니다. IE나 크롬같은 브라우저는 기본적으로 FTP 프로토콜을 지원하고 있습니다. 주소창에 ftp://서버주소 를 입력하고 접근합니다. 

앞의 스키마가 http://가 아닌 ftp://로 시작해야 브라우저 입장에서 ftp 서버로 접근한다는것을 인식할 수 있습니다.




pub 디렉터리를 클릭하여 접근해보면 서버에서 작성해 두었던 텍스트 파일이 보입니다. 이것을 클릭하면 파일을 다운로드 할 수 있습니다.







FileZilla를 통한 FTP 접속
브라우저 이외에 FTP를 더욱 편하게 이용하기 위해서는 FTP 클라이언트 프로그램이 필요합니다. 가장 유명한 무료 프로그램으로는 FileZilla가 있습니다. 다운로드 및 사용 방법은 아래 링크를 참조합니다.

anonymous 계정으로 접근하기 위해 사용자명으로 anonymous를 입력하고 비밀번호는 아무거나 입력하여 접속합니다. 브라우저로 접근했을때와 마찬가지로 pub 디렉터리가 보입니다.







파일 업로드 및 550 permission denied 오류 해결
파일을 업로드 하려고 이미지 파일을 pub 디렉터리로 드래그앤 드롭 했더니 오류가 발생합니다. 이는 기본적으로 파일 쓰기(업로드) 설정이 되어있지 않기 때문입니다.




업로드 설정을 활성화 하기 위해 다음과 같이 명령어를 실행합니다.
# vi /etc/vsftpd/vsftpd.conf
cs


각 설정을 찾아서 아래와 같이 변경해줍니다. #으로 주석처리가 되어있다면 주석을 제거해주거나 새로 작성해 주어도 됩니다. 설정을 변경 후 저장합니다.
write_enable=YES        #업로드 기능 활성화
anon_upload_enable=YES  #익명 사용자의 업로드 허용
anon_mkdir_write_enable=YES    #익명 사용자의 디렉터리 생성 허용
cs


이후 /var/ftp/pub 디렉터리의 소유권 또한 root에서 익명사용자를 의미하는 ftp로 변경해 주어야 합니다. 또는 chmod 777 을 통해서 허가권을 모두 허용하도록 변경하는 방법도 있습니다.
# cd /var/ftp/
cs



 
# chown ftp.ftp /var/ftp/pub/
cs



마지막으로 설정을 적용하기 위해 vsftpd를 재시작합니다. 재시작 이후 익명사용자로 파일 업로드가 됨을 확인할 수 있습니다.
# systemctl restart vsftpd
cs




리눅스 계정으로 접근하기
당연한 말이지만 익명계정 이외에도 리눅스 서버 자체에 있는 root 계정이나 다른 계정으로 접근이 가능합니다. 이러한 리눅스 계정들을 로컬계정이라 하는데,  앞서 설정했던 vsftpd.conf 파일에 다음과 같이 설정되어 있어야 합니다.
local_enable=YES
cs


또한 이 리눅스 로컬 계정들은 /var/ftp/에만 접근할 수 있는 익명계정과는 다르게 자신의 권한에 따라 서버의 모든 디렉터리에 접근하거나 파일을 업로드, 이동, 삭제할 수 있습니다.




FTP 서버 상세 설정(vsftpd.conf)
vsftpd와 관련된 설정은 /etc/vsftpd/vsftpd.conf 파일을 통해 조작할 수 있습니다.
# vi /etc/vsftpd/vsftpd.conf
cs



vsftpd.conf 옵션
vsftpd는 기능이 많은만큼 여러가지 설정옵션들을 조작할 수 있는데, 다음과 같은것들이 있습니다.
anonymous_enable      #익명 사용자 기능을 활성화 할지  
local_enable        #로컬 사용자(리눅스 계정)의 접속 허용 여부
write_enable        #업로드 기능 활성화(익명 사용자 제외)
anon_upload_enable  #익명 사용자의 업로드 허용여부
anon_mkdir_write_enable    #익명 사용자의 디렉터리 생성 허용여부
dirlist_enable        #접속한 디렉터리의 파일 리스트를 보여줄지 여부
download_enable       #다운로드 허용 여부
listen_port           #FTP 서비스의 포트 번호 설정(기본은 21번이며 변경하는 경우 방화벽 설정 확인 필요)
deny_file                     #업로드를 금지할 파일명 패턴 지정 (ex deny_file={*.txt, *.zip})
max_clients                 #FTP 최대 동시 접속자 수 지정
max_per_ip               #클라이언트에서 한 PC당 몇개의 FTP를 연결 할 수 있는지
cs


이 밖에도 옵션이 너무나도 많기때문에 더욱 자세한 옵션은 공식 문서인 https://security.appspot.com/vsftpd/vsftpd_conf.html URL을 참고하도록 합니다.



다음글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!