본문 바로가기
모의해킹 침해대응 과정/Liunx 관리

FTP server / day18

by 알거음슴 2021. 4. 20.

FTP (File Transfer Protocol) 파일 전송 프로토콜

인터넷 상의 컴퓨터들간에 파일을 교환하기 위한 표준 프로토콜로써 가장 간단한 방법이기도 하다. FTP는 보통 TCP/IP에 함께 딸려오는 일련의 프로그램 속에 포함되어 있다. FTP는 보안적인 부분이 강화된 sFTP사용을 주로 권장하고 있다, FTP는 크게 2가지로 나눠볼 수 있다.

 Real FTP : ID/PASS 인증하는 사용자들 : EX) user01, fedora, ....

 Anonymous FTP : 인증 없는 사용자들 : EX) anonymous or ftp (인증이 없기에 거의 다운로드 전용)

 

FTP 프로그램의 종류

리눅스에서 사용할수 있는 FTP 프로그램은 여러가지이다.

wu-ftpd : 예전 RedHat Linux에서 사용하던 기본 FTP 프로그램 (개발중단으로 거의 사용안됨)

vsftpd : 현재 많이 사용되고 있는 기본 FTP 프로그램 (보안적인 부분이 우수함)

proftpd : 현재 많이 사용되고 있는 기본 FTP 프로그램

기타(gssftp, tftp, sftp...)

 

vsFTP (Very Secure FTP)

 특징

* 업로드 다운로드 모드 가능하다,

* 20,21 port 또는 21,1024 port 사용하고 TCP protocol이다.

 

사용방법의 개요

 Program : vsftpd, ftp

 Deamon & Port & Protocol : /usr/sbin/vsftpd, 20/tcp, 21/tcp, 1024/tcp

 Configuration files : /etc/vsftpd/vsftpd.conf

 Sub configuration files : /etc/vsftpd/{user_list, ftpusers}

 Service : vsftpd.service

 

vsftp 설치 폴더 확인 및 환경설정 파일 확인 (/etc/vsftpd)

 ftpusers : vsftpd 서버에 접속할 수 없는 사용자 정의

 user_list : vsftps 서버에 접속할 수 없는 사용자 정의

* 위 두 파일중 한곳이라도 정의되면 서버에 접속할 수 없는 사용자가 된다.

 /var/ftp : Anonymous FTP 사용자를 위한 디렉토리 

 vsftpd.conf : vsftpd 의 주 설정 파일

[참고] vsftpd 의 주요 지시자

anonymous_enable=YES /* 익명 사용자의 접속을 가능하게 설정한다. */
local_enable=YES /* 로컬 사용자의 접속을 가능하게 설정한다. */
write_enable=YES /* 로컬 사용자의 쓰기 기능을 가능하게 설정한다. */
local_umask=022 /* 로컬 사용자의 파일 생성시 적용될 umask 값을 설정한다. */
#anon_upload_enable=YES /* 익명 사용자의 파일 업로드를 가능하게 설정한다. */
#anon_mkdir_write_enable=YES /* 익명 사용자의 디렉토리 생성을 가능하게 설정한다. */
dirmessage_enable=YES /* 특정 폴더에 접속시 .message 파일의 메시지를 보여줄 것인지를 지정
하는 설정이다. */
xferlog_enable=YES /* 업로드/다운로드 로그를 xferlog에 기록하겠다는 설정이다. */
connect_from_port_20=YES /* ftp 데이터 전송시 20번 포트 사용을 설정한다. */
#chown_uploads=YES /* 익명 사용자가 업로드한 파일의 소유권을 변경할 때 설정한다. */
#chown_username=whoever /* chown_uploads=YES일 경우 지정한 사용자 이름으로 익명 사용자가
업로드한 파일의 소유자가 지정된다. */
#xferlog_file=/var/log/vsftpd.log /* 업로드/다운로드 로그파일을 지정한다. */
xferlog_std_format=YES /* xferlog를 표준 로그포맷으로 기록한다. */
#idle_session_timeout=600 /* ftp접속의 타임아웃시간을 지정한다. (단위: 초) */
#data_connection_timeout=120 /* 데이터 전송의 타임아웃시간을 지정한다. (단위: 초) */
#nopriv_user=ftpsecure /* vsftpd 데몬을 루트가 아닌 시스템에 존재하는 일반 사용자의 비특권
권한으로 동작시킨다. */
#async_abor_enable=YES /* async_abor_enables 기능을 사용하겠다는 설정이다. */
#ascii_upload_enable=YES /* ASCII 모드로 업로드를 허락하겠다는 설정이다. */
#ascii_download_enable=YES /* ASCII 모드로 다운로드를 허락하겠다는 설정이다. */
#ftpd_banner=Welcome to blah FTP service. /* ftp 서버 접속시 안내메세지를 출력한다. */
#deny_email_enable=YES /* 익명사용자 접속시 패스워드를 e-mail형식으로 받겠다는 설정이다. */
#banned_email_file=/etc/vsftpd/banned_emails /* 허용하지 않을 e-mail 주소를 파일에 넣어두면 접
속이 안된다. (banned_emails파일 생성시) */
chroot_local_user=YES /* 전체 사용자가 chroot 기능을 사용하도록 설정한다. */
#chroot_list_enable=YES /* chroot_list에 등록된 사용자만 chroot 기능을 사용하도록 설정한다. */
#chroot_list_file=/etc/vsftpd/chroot_list /* chroot 기능을 사용할 사용자 리스트 파일을 지정한다. */
#ls_recurse_enable=YES /* ls -R(서브디렉토리 파일 목록 출력) 명령 사용여부를 설정한다. */
listen=YES /* 단독 데몬일 경우 listen 을 YES로 지정한다. */
# listen=NO /* xinetd 로 설정할 경우 NO로 지정한다. */
pam_service_name=vsftpd /* pam 사용자 인증 설정 */
userlist_enable=YES /* userlist 사용을 허가하겠다는 설정이다. */
# userlist_deny=NO /* userlist 에 등록된 사용자만 허가하겠다는 설정이다. */
tcp_wrappers=YES /* tcp_wrappers 기능을 사용하겠다는 설정이다. (host, ip 차단) */

 

[실습] FTP 서버에 root 접속이 가능하도록 설정하기 ( # ftpusers, user_list ).

[실습] /etc/vsftpd/ {ftpusers, user_list} 사용자 제어하기.

 

 

FTP 사용방법

 (GUI) : Filezilla Tool

 (TUI) : ftp CMD

ftp CMD 사용법 ( ftp> help)

 1. 사용절차

서비스 설치 -> 서비스 환경설정 파일 수정 -> 방화벽설정 -> ftp CMD 로 상대 server 진입.

 2. 업로드 다운로드 포인터 맞추기

cd /dir : 상대의 파일 송수신 위치 지정

lcd /dir : 나의 파일 송수신 위치 지정

 3. 기능설정

bin : 전송모드 설정 * binary, ascii / binaty 모드에서 ascii 전송모드로 송신시 오류발생

hash : 파일전송 hash(#) 표시, 전송중인 작업상황률 표현.

prompt : 대화영모드 on/off 

 4. 업로드/다운로드

put / get : 하나의 파일을 업로드, 다운로드

mput / mget : 다량의 파일을 일괄적으로 업로드, 다운로드

 5. 확인

ls / ls server * / ls dir * : 상대에게 전송여부 확인

!ls : 본인에게 온여부 확인.

 

[실습] server1 <--> server2 ftp CMD를 활용하여 업로드 다운로드 실습 

[실습] vsFTP banner 메시지출력 (banner_file=/etc/vsftpd/banner.txt)

[실습] vsFTP greeting 메시지 출력 (ftpd_banner=Welcome to blah FTP service.)

 * banner, greeting 모두, 적용시 버전정보를 가릴 수 있음.

[실습] FTP chroot 구성 (real, anonymous 사용자구분) 

* 사용자 별 최상위 디렉토리.

 - Anonymous FTP : /var/ftp
 - Real FTP : /

[실습] Anonymous 사용자 구성. (anonymous_enable=YES)

[실습] FTP port 변경. (listen_port=2121)

[실습] vsFTP 서버 접속자 수 제한 (max_clients=3)

[실습] IP당 접속 갯수 제한. (max_per_ip=3)

* max_ 지시자의 경우 정해진 리소스를 온전하게 사용할 수 있도록 하기위해 하는설정

[실습] Anonymous 파일 업로드기능P (File Transfer Protocol) 파일 전송 프로토콜

[실습] 파일 다운로드 전용 FTP 서버 구성 (파일경로,이름을 알고있는 경우에만 다운로드 가능)

 

 

FTP 보안

특정한 대역에서만 FTPserver 에 들어올 수 있도록 하는 설정 보안을 위한 설정은 크게 4가지가 있다

 * FTP 호스트 제한 (firewall, tcp_wrapper)

 * FTP 사용자 제한 (ftpusers, user_list)

 * FTP 프로그램 업데이트 & 패치 (보안 권고문)

 * 포트관리 (passive mode/active mode)

passive mode : 

 접속 및 명령어등의 동작포트(21port)는 고정이나, 데이터 전송 동작포트(1024이상port)는 요청이 있을 때 마다 새로운 포트를 생성해서 적용. (linux,unix : default)

active mode(non-passive mode) :

 접속 및 명령어등의 동작포트(21port)와 데이터 전송의 동작포트(20prot)를 달리해서 적용하는 방법 (windows default)

 

 

log 확인 (var/log/xferlog , var/log/secure)

 /var/log/xferlog : 파일 다운로드/업로드 log (o:파일다운로드 i:파일업로드 d:파일삭제)

 /var/log/secure : FTP 인증 실패 기록 log (성공시 기록되지않음)

[실습] 상황에 따른 log 기록 확인.

'모의해킹 침해대응 과정 > Liunx 관리' 카테고리의 다른 글

NFS server / day 20  (0) 2021.04.22
Mail / day 19  (0) 2021.04.21
Apache web server / day 17  (0) 2021.04.20
리눅스 DNS(domain name system) /day 16  (0) 2021.04.16
리눅스 방화벽(Firewalld) / day 15  (0) 2021.04.16