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

FTP는 인터넷상의 컴퓨터들간에 파일을 교환하기 위한 표준 프로토콜로서 가장 간단한 방법이기도 하다화면에 표시할 수 있는 웹 페이지와 관련 파일들을 전송하는 HTTP, 전자우편을 전송하는 SMTP 등과 같이, FTP 역시 인터넷의 TCP/IP 응용 프로토콜 중의 하나이다. FTP는 웹 페이지 파일들을 인터넷상에서 모든 사람이 볼 수 있도록 하기 위해 저작자의 컴퓨터로부터 서버로 옮기는 과정에서 사용된다또한다른 서버들로부터 자신의 컴퓨터로 프로그램이나 파일들을 다운로드 하는 데에도 많이 사용된다.

 

사용자 입장에서는 간단한 명령을 이용하여 FTP를 쓰거나또는 그래픽 사용자 인터페이스를 제공하는 상용 프로그램을 쓸 수도 있다보통은 웹 브라우저도 웹 페이지로부터 선택한 프로그램을 다운로드 하는데 FTP를 사용한다. FTP를 사용하여 서버에 있는 파일을 지우거나 이름을 바꾸거나 옮기거나 복사하는 등 갱신작업을 할 수도 있다. FTP 서버에는 로그온을 해야하지만익명의 FTP를 사용하여 모든 사람들에게 공개된 파일들을 쉽게 접근할 수 있도록 하고 있다.

 

FTP는 보통 TCP/IP에 함께 딸려오는 일련의 프로그램 속에 포함되어 있다.

 

## Active Mode, Passive Mode ##

보안쪽 신입사원 기술면접에 자주 나온다.

FTP 는 두 개의 모드가 있다.

오래된 전통적인 한 방식이 바로 Active mode 라는 것과 좀 더 최근에 나타난 것이 Passive mode 이다.

 

이 두가지를 비교해 보면인터넷 사용자들이 가장 흔하게 접하는 웹 브라우저들이 일반적으로

Passive 모드로 설정되어 있다그러나, FTP 클라이언트 프로그램들은

일반적으로 Active 모드가 기본값으로 설정되어 있다.

 

Active 모드에서는 원격지의 서버가 어떠한 출력을 내보낼 때

이를테면 ls  dir 같은 명령어가 입력되면 결과를 출력하려고 할 때 혹은 파일을 전송할 때 -

반드시 현재 내가 사용중인 컴퓨터와 별도의 추가적인 TCP/IP 연결을 맺어야 한다.

(이때 일반적인 FTP 포트인 21번이 아니라 FTP-Data 포트인 TCP 20번을 사용한다.)

 

이는 기존에 연결된 FTP 를 끊지 않고 Data 커넥션을 필터링 하는 것이 불가능하다는 얘기이므로 방화벽이 설치되어 있는 경우 Active 모드는 상당히 곤란한 환경이 된다.

 

반면에 Passive mode 에서는 TCP 20번 포트 대신에 1024 번 이상의 시스템에서 예약해 놓지 않은 포트를 사용하여 데이터를 주고받을 수 있다.

 

Passive 모드를 끄고 접속하라는 것은 해당 FTP 서버가 Passive 모드를 지원하지 않고 기본적이고도 전통적인 Active 모드로만 운영이 된다는 뜻이며 또한, Passive 모드를 지원하지 않는 서버의 경우에

Passive 모드로 접속하는 것이 불가능하다.

 

## 간단한 FTP TFTP ##

TFTP

TFTP(Trivial File Transfer Protocol)란 이더넷을 이용하여 파일을 다운 받는 프로토콜로직이다. UDP 방식을 사용한다. TFTP ftp와 같은 파일 전송 프로토콜이지만매우 간단한 프로토콜로 구성되므로 부트로더와 같은 작은 크기의 프로그램에서 수행할 수가 있다.

 

보통 BOOTP와 연동하여 네트워크 부트를 할 때 사용하게 된다.

 

TFTP는 다음의 두 가지 방법에 의해 사용될 수 있다.

 

일반 ftp프로토콜은 tcp프로토콜(3웨이 핸드쉐이킹방식자세한 사항은 네트웍 관련서적을 참고 하기 바람.)을 사용하지만, tftp udp프로토콜(단방향 핸드쉐이킹 방식자세한 사항은 네트웍 관련 서적을 참고 하기 바람.)을 사용하여 전송한다.

 

동작되는 방식은 클라이언트가 서버에 접속하여 파일을 요청하면 해당 파일을 서버는 전송하고 이를 클라이언트는 응답하는 방식을 취한다매번 파일의 블록을 전송 시 블록의 길이를 전송하는데 이 블록의 크기는 고정되어 있어 이 크기보다 작은 블록이 오면 이를 마지막 블록으로 인식한다.

 

단점은 하나의 블록 전송이라도 실패하면 전송을 중지하므로 패켓 손실이 많은 환경에서는 사용이 곤란하다.

 

거의 모든 유닉스의 구현에 있어서 tftp 서버를 포함하고아마 스스로 설치할 일은 없을 것이다.

 

- TFTP 구축 필요성

 

리눅스를 다운로드 하는 방식에는 시리얼을 이용하는 방식과 랜을 이용하는 방식이 있다.

 

다운 받아야 할 내용이 매우 큰 램 디스크 이미지를 시리얼로 다운 받게 되면 개발속도가 현저히 떨어진다시리얼은 전송속도가 매우 늦기 때문이다랜을 이용하여 파일을 타겟보드5에 다운로드하는 방법으로 TFTP를 이용하도록 하고 있다. TFTP를 사용하면 매우 빠른 속도로 다운 받기 때문에 개발속도가 향상될 수 있다.

 

## 명령어 ##

ascii : 전송모드를 ASCII모드로 설정한다.(ascii또는 as)

binary : 전송모드를 BINARY모드로 설정한다.( binary또는 bi)

bell : 명령어 완료시에 벨소리를 나게한다.(bell)

bye : ftp접속을 종료하고 빠져나간다.(bye)

cd : remote시스템의 디렉토리를 변경한다.(cd 디렉토리명)

cdup : remote시스템에서 한단계 상위디렉토리로 이동한다.(cdup)

chmod : remote시스템의 파일퍼미션을 변경한다.(chmod 755 index.html)

close : ftp접속을 종료한다. (close)

delete : remote시스템의 파일을 삭제한다.(delete index.old)

dir : remote시스템의 디렉토리 내용을 디스플레이한다.(dir)

disconnect : ftp접속을 종료한다.(disconnect)

exit : ftp접속을 종료하고 빠져나간다.(exit)

get : 지정된 파일하나를 가져온다.(get index.html)

hash : 파일전송 도중에 "#"표시를 하여 전송중임을 나타낸다.(hash)

help : ftp명령어 도움말을 볼 수 있다.(help또는 help 명령어)

lcd : local시스템의 디렉토리를 변경한다.(lcd 디렉토리명)

ls : remote시스템의 디렉토리 내용을 디스플레이한다. (ls 또는 ls -l)

mdelete : 여러개의 파일을 한꺼번에 지울 때 사용한다.( mdelete *.old)

mget : 여러개의 파일을 한꺼번에 가져오려할 때 사용한다. ( mget *.gz)

mput : 한꺼번에 여러개의 파일을 remote시스템에 올린다.(mput *.html)

open : ftp접속을 시도한다.(open 168.126.72.51또는 open ftp.kornet.net)

prompt : 파일전송시에 확인과정을 거친다. on/off 토글 (prompt)

put : 하나의 파일을 remote시스템에 올린다.(put index.html)

pwd : remote시스템의 현재 작업디렉토리를 표시한다.(pwd)

quit : ftp접속을 종료하고 빠져나간다.(quit)

rstatus : remote시스템의 상황(version, 어디서접속ID)을 표시한다.(rstatus)

rename : remote시스템의 파일명을 바꾼다.(remote 현재파일명 바꿀파일명)

rmdir : remote시스템의 디렉토리을 삭제한다.(rmdir 디렉토리명)

size :remote시스템에 있는 파일의 크기를 byte단위로 표시한다.(size index.html)

status : 현재 연결된 ftp세션모드에 대한 설정을 보여준다.(status)

type : 전송모드를 설정한다.(type 또는 type ascii 또는 type binary)

 

 

 

 

## FTP 보안강화 ##

FTP (File Transport Protocol는 네트워크 상에서 파일을 전송하기 위해 설계된 이전 TCP 프로토콜입니다사용자 인증을 포함한 서버와 주고받는 통신이 모두 암호화되지 않았기 때문에 이 프로토콜은 비보안 프로토콜로 간주되며 주의하여 설정하셔야 합니다.

다음은 vsftpd FTP 서비스를 설정하는데 사용되는 보안 정책입니다.

FTP 환영 배너

사용자명과 암호를 입력하기 전에 환경 배너가 나타납니다이 배너에는 버전 정보가 포함되어 있으며이 정보는 크래커가 시스템 약점을 찾아내는데 유용하게 사용됩니다.

따라서 vsftpd의 환영 배너를 변경하시려면 /etc/vsftpd/vsftpd.conf 파일에 다음 지시자를 추가하시기 바랍니다:

ftpd_banner=<insert_greeting_here>

위의 지시자에서 <insert_greeting_here> 부분에 새로운 환영 메시지를 입력하십시오.

여러 개의 줄로 이루어진 배너 메시지를 입력하시려면 배너 파일을 사용하시는 것이 좋습니다 여러 배너를 손쉽게 관리하기 위하여 /etc/banners/라는 새 디렉토리를 만드신 후 모든 패너 파일을 이 디렉토리에 저장하십시오이 예시에서 FTP 접속에 사용되는 배너 파일은 /etc/banners/ftp.msg 입니다다음은 이 파일의 내용 예제입니다:

####################################################

# Hello, all activity on ftp.example.com is logged.#

####################################################

vsftpd에 이 환경 배너 파일을 사용하기 위해서는 /etc/vsftpd/vsftpd.conf 파일에 다음과 같은 지시자를 추가하십시오:

banner_file=/etc/banners/ftp.msg

 

익명 계정(anonymous) 접속

/var/ftp/ 디렉토리를 생성하시면 익명 계정이 활성화됩니다.

이 디렉토리를 생성할 수 있는 가장 쉬운 방법은 vsftpd 패키지를 설치하는 것입니다이 패키지는 익명 사용자를 위한 디렉토리 구조를 설정하고익명 사용자에게 이 디렉토리를 읽기만 할 수 있는 허가를 설정합니다.

익명 사용자는 어느 디렉토리에도 쓰기 작업을 할 수 없도록 기본 설정되어 있습니다.

익명 사용자 계정으로 업로드

익명 사용자가 업로드하는 것을 허용하시려면 /var/ftp/pub/에 쓰기 전용 디렉토리를 생성하시기를 권장합니다.

다음 명령을 입력하십시오:

mkdir /var/ftp/pub/upload

다음으로 익명 계정 사용자가 디렉토리 내의 내용을 보지 못하도록 허가를 변경하기 위해 다음 명령을 입력하십시오:

chmod 730 /var/ftp/pub/upload

디렉토리 목록은 다음과 같이 나타나야 합니다:

drwx-wx---    2 root     ftp          4096 Feb 13 20:05 upload

vsftpd에서 추가적으로 다음 줄을 /etc/vsftpd/vsftpd.conf 파일에 첨가하십시오:

anon_upload_enable=YES

사용자 계정

FTP는 비보안 네트워크 상에서 인증을 위해 암호화되지 않은 사용자명과 암호를 전달하기 때문에 시스템 사용자가 사용자 계정을 통해 서버에 접속하는 것을 거부하도록 설정하는 것이 좋습니다.

vsftpd에서 사용자 계정을 비활성화하시려면 /etc/vsftpd/vsftpd.conf 파일에 다음 지시자를 추가하십시오:

local_enable=NO

사용자 계정 제한하기

루트 사용자와 sudo 허가를 가진 사용자와 같은 특정 그룹의 계정이 FTP 서버에 접속하는 것을 막을 수 있는 가장 쉬운 방법은 4.4.2.4 에서 설명된 것처럼 PAM 목록 파일을 사용하는 것입니다vsftpd에 사용되는 PAM 설정 파일은 /etc/pam.d/vsftpd 입니다.

각 서비스에서 직접 사용자 계정을 비활성화시키는 것도 가능합니다.

vsftpd에서 특정 사용자 계정을 비활성화시키려면 /etc/vsftpd.ftpusers에 해당 사용자명을 추가하시면 됩니다.

접근 제어를 위해 TCP 래퍼 사용하기

5.1.1 에서 설명된 것처럼 FTP 데몬으로 접근을 제어하기 위해서 TCP 래퍼를 사용하십시오.


 

 

 

 

 

## 참고자료

http://web.mit.edu

http://www.terms.co.kr

http://kin.naver.com

'Server' 카테고리의 다른 글

아파치 인증창 띄우기  (0) 2017.01.07
CentOS/Apache SSL 설정  (0) 2017.01.06
윈도우 net user 커맨드  (0) 2017.01.06
윈도우 커맨드 net rkill at 등  (0) 2017.01.06
윈도우 CMD 명령어  (0) 2017.01.06

+ Recent posts