강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

리눅스로 구축한 FTP서버

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.gif title08.gif
icon02.gifFTP설치확인 및 설치하기
icon02.gif0FTP구성파일과 FTP 홈디렉토리
icon02.gif0FTP서버 환경설정파일 /etc/ftpaccess
icon02.gif0접속거부 리스트 /etc/ftpusers
icon02.gif0특정호스트로의 사용자 허용여부 리스트 /etc/ftphosts
icon02.gif0FTP서버의 홈디렉토리 /home/ftp
icon02.gif0FTP접속로그파일 /var/log/xferlog
icon02.gif0FTP 명령어

FTP서버란?
 

FTP서비스란 TELNET과 함께 WWW이전의 인터넷의 대표서비스로서 인터넷으로 연결된 곳이면 어디에서나 원하는 파일을 올려놓을 수도 가져올 수 있도록 하는 기능을 가진 서비스를 말한다.

이런 기능을 하는 서버를 FTP서버라고 하며 일종의 소프트웨어 이다.

PC통신에서 파일을 다운받아본 경험이 있으신 분들은 알겠지만 파일을 올리고 내리는 작업에서 시스템 부하가 많으므로 FTP서비스를 하려면 네트웍과 서버의 성능이 어느정도 갖추어 줘야야하며 ISP나 WSP등에서 FTP서비스를 할 때는 대부분 FTP서비스만을 위한 서버를 별도로 두어 운용을 하고 있다.

이번 장에서는 리눅스 서버에 ftp서버를 설치하여 운용하는 방법에 대해서 알아보도록하자.여기서 설명하는 리눅스는 레드헷을 기준으로 한 것으로 레드헷에서 프로그램의 설치 및 관리는 RPM(Redhat Package Management)을 통해서 하게 된다.


FTP설치확인 및 설치하기

먼저 리눅스시스템에 FTP서버가 설치되어있는가를 확인해보고 설치되어 있지 않다면 설치를 해보도록 하자.

FTP서버의 설치확인은 다음과 같이 한다.

 

 

[root@ciss9 ]# rpm -qa | grep wu-ftp

wu-ftpd-2.4.2vr17-3


레드헷리눅스에서 FTP서버를 보통 wu-ftp를 쓰기 때문에 여기서 wu-ftp가 시스템에 설치되어 있는가를 rpm명령어로 조회를 해 본 것이다.

위의 예는 설치되어 있는 것으로 나왔으나 만약 설치되어 있지 않다면 다음과 같이 하여 설치를 할 수 있다.

 

 

[root@ciss9 ]# rpm -Uvh wu-ftpd-2.4.2vr17-3

 

이렇게만 하면 RPM이 알아서 설치를 해주며 이후에는 관리만 해주면 된다.

FTP구성파일과 FTP 홈디렉토리

 

이제 본격적으로 레드헷 리눅스에서 관리되는 ftp서버에 대해서 알아보도록 하자.

앞서 말씀드렸듯이 레드헷리눅스의 거의 모든 설정파일들은 /etc밑에 존해한다.

ftp관련 설정파일 역시 여기에 있으며 ftp관련 설정파일들을 확인해 보려면 다음과 같이 확인해 볼 수 있다.

여기서 소개하는 설정사항들은 필자가 직접운용하고 있는 서버의 실제 설정사항들을 소개한 것으로 각자 자기의 시스템에 알맞게 수정하여 설정하도록 한다.

 

 

[root@ciss9 /etc]# ls -l | grep ftp

-rw------- 1 root root 513 Sep 30 15:08 ftpaccess

-rw------- 1 root root 456 Apr 19 22:22 ftpconversions

-rw------- 1 root root 39 Apr 19 22:22 ftpgroups

-rw------- 1 root root 104 Apr 19 22:22 ftphosts

-rw------- 1 root root 79 Aug 20 10:14 ftpusers


리눅스를 ftp서버로 활용하려면 위의 ftp관련 설정파일 5개를 완전히 이해하고 알맞게 수정하여 시스템에 맞게 관리할 수 있어야 한다.

간단히 이들 5개의 설정파일에 대해서 알아보면 다음과 같다.

이중 ftpconversions는 파일을 올리고 내릴 때 파일의 유형에 따라 어떤 압축프로그램을 쓸 것인가를 결정해 주는 것으로 초기설정 그대로 두는 것이 좋다.

 

● ftpaccess : 접근옵션 및 사용권한등 ftp서버의 전반적인 환경설정

● ftpconversions : 파일을 올리고 내릴 때 어떤 압축프로그램을 쓸것인가를 결정.

● ftpgroups : 그룹이름으로 접속할 그룹의 이름과 패스워드 저장.

● ftphosts : 접근허용할 호스트와 허용하지 않을 호스트를 설정

● ftpusers : 접근허용하지 않을 사용자ID를 설정.

이들 파일은 vi등으로 열어서 확인해 보면 대부분 그 설정방법등을 알 수 있는 것들이다.

그럼 이 파일들의 자세한 설정방법들을 알아보자.

FTP서버 환경설정파일 /etc/ftpaccess

 

이 파일은 ftp서버의 전반적인 사항에 대한 설정파일이며 ftp서버를 어떤식으로 운용할 것인가에 대한 해답이 될 수 있는 파일이다.

파일의 내용은 다음과 같이 구성되어 있다.

 

 

[root@ciss9 /etc]# cat ftpaccess

class all real,guest,anonymous *

email root@localhost

loginfails 5

readme README* login

readme README* cwd=*

message /welcome.msg login

message .message cwd=*

compress yes all

tar yes all

chmod no guest,anonymous

delete no guest,anonymous

overwrite no guest,anonymous

rename no guest,anonymous

log transfers anonymous,real inbound,outbound

shutdown /etc/shutmsg

#passwd-check rfc822 warn

passwd-check rfc822 enforce



class all real,guest,anonymous *

class로 정의되어 있는 것은 접속유형에 관한 설정으로 그 의미는 다음과 같다.

접속하는 모든 사용자에 대하여(all, class명) 실제ID를 가지거나(real), 손님으로 접속하거나(guest), 익명계정으로접속하는(anonymous) 사용자에 대하여 접속을 허용하며 모든호스트로(*) 부터의 접속을 허용한다는 의미이다.

이 class는 관리자의 정책에 따라서 얼마든지 만들어 사용할 수 있으며 접속인원수나 접속호스트를 제한할 때 사용된다.

email root@localhost

email은 ftp서버관리자의 전자우편 주소로서 ftp서버에 이상이 있거나 불법적인 접근등이 있을 때 여기에 설정된 email주소로 메일을 보내주게 된다.

loginfails 5

ftp서버로 접속할 때 비밀번호등을 잊어버려 비밀번호를 몇번인가 잘못입력했더니 접속할 수 없었던 경험이 있을 것이다.

일종의 보안차원에서 ftp로그인시에 몇번 잘못입력했을 때 접속을 끊을 것인가를 설정한다.

여기서는 5번으로 설정되어 있으나 필자는 개인적으로 생각으로는 3번정도가 적당하다고 생각한다.

message /welcome.msg login

 

 

[root@ciss9 ftp]# ftp 168.126.72.51

Connected to 168.126.72.51.

220 ciss9.kornet.net FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.

Name (168.126.72.51:sspark): anonymous

331 Guest login ok, send your complete e-mail address as password.

Password: ********(실제로는 안보임)

230-Welcome to Kornet ftp hosting server

230-We are now here.

230-

230-

230 Guest login ok, access restrictions apply.

Remote system type is UNIX.

Using binary mode to transfer files.


ftp로그인시에 공지사항등을 보여줄 때 사용한다.

위의 예와 같이 ftp서버로의 접속에 성공한 사용자에게만 공지사항등의 메시지를 보여주므로 사용상의 유의사항이나 급한 서비스제한의 알림 및 전송할 수 있는 파일사이즈제한등을 알릴 때 주로 사용된다.

이 내용을 변경하고 싶을때는 ftp서버의 홈디렉토리인 /home/ftp밑에 있는 welcome.msg파일을 수정해 주면된다.

message .message cwd=*

 

 

ftp> cd internet

250-인터넷에 관한 파일들입니다. 많이 받아가세요.

250-

250 CWD command successful.

 

바로 위에서 설명된 login시에 보여줄 메시지와는 달리 cd라는 명령어로 ftp디렉토리를 변경할 때에 자동으로 보여줄 메시지를 결정한다.

각 디렉토리별로 담고 있는 내용이 다를 것이므로 주로 해당 디렉토리의 내용에 대해서 간단히 설명해 주는 역할등을 한다.

아래의 예는 인터넷에 관한 파일들을 담고 있는 디렉토리로 접근했을 때 보여주게되는 내용이다.

이들 내용을 변경코자 한다면 /home/ftp 이하의 각디렉토리별로 존재하는 .message파일을 수정해 주면된다.

이 파일은 .(점)으로 시작하므로 그냥 ls명령으로는 보이지 않으므로 "ls -al"로 확인하기 바란다.

compress yes all

tar yes all

보시면 무슨 뜻인지 금방알 수 있듯이 접속한 모든 사용자(all)에 대하여 전송시에 압축(compress)과 묶는(tar)기능을 제공한다.

이 기능은 압축된 파일형태로 전송하면 속도를 증가시켜주므로 대부분 인터넷뿐만 아니라 PC통신등의 (공개)자료실등에 파일을 올릴때는 압축을 해서 올리는 것이 통신인의 기본 예의이다.

전송코자 하는 파일을 어떤압축 유틸리티로 전송할 것인가의 설정은 /etc/ftpconversions 이라는 파일에 되어 있다.

예를 들어 "*.Z"로 끝나는 파일은 compress라는 압축유틸리티를 사용하고 "*.gz"로 끝나는 파일을 전송할 때에는 gzip이라는 유틸리티를 사용하라고 설정이 되어 있다.

새로나온 압축유틸리티가 있을 때 이 유틸리티로 압축시켜 전송하길 원한다면 /etc/ftpconversions 파일에 압축유틸리티를 추가시켜 주면 된다.

chmod no guest,anonymous

delete no guest,anonymous

overwrite no guest,anonymous

rename no guest,anonymous

이 설정은 손님(guest)으로 접속한 사용자나 익명(anonymous)으로 접속한 사용자에 대하여는 파일모드변경(chmod)과 파일삭제(delete), 덮어쓰기(overwrite) 그리고 이름변경(rename)을 허용하지 않는다(no)는 설정이다.

log transfers anonymous,real inbound,outbound

위의 설정은 /var/log/xferlog라는 파일에 기록되는 ftp로그파일에 기록할 내용에 관한 설정으로 익명사용자(anonymous)나 실제(real) 계정사용자 (real)가 파일을 올릴때(inbound)나 내려받을때(outbound) 이 로그파일에 기록하라는 설정이다.

#passwd-check none warn

#passwd-check trivial enforce

#passwd-check rfc822 warn

passwd-check rfc822 enforce

이 설정은 ftp서버로 익명사용자(anonymous)가 접속할 때 입력하게되는 password의 입력조건에 대한 설정으로 입력되는 패스워드를 체크하여 접속을 허용할 것인지 허용하지 않을 것인가를 결정하게 된다. #으로 된 행은 모두 주석행이며 필요할때는 이 주석처리(#)를 떼어 버리고 사용하면 된다.

이 설정은 입력된 패스워드를 3가지(none, trivial, rfc822)의 조건설정중 한가지로 체크하여 이에 위반 했을때는 어떤조치를 취할 것인가(warn, enforce)를 지정해둔 것이다.

익명사용자(anonymous)에 대한 패스워드 조건체크

none : 패스워드의 체크없이 모두 허용한다.

trivial : email주소에 쓰이는 @기호가 입력되면 모두 허용

rfc822 : RFC822문서에 정의된 바에 따라 조건체크

위반시 조치사항

warn : 간단한 경고메시지를 뿌려주고 접속은 허용한다.

enforce : 조건에 맞지 않았을때에는 접속을 허용하지 않는다

접속거부 리스트 /etc/ftpusers

이 파일에 등록된 계정사용자는 ftp접속을 허용하지 않는다.

이런 설정은 주로 특정ID로의 ftp접속을 막을 때 주로 사용하며 특히 불량사용자의 접속을 허용하지 않으려고 할 때 이 파일(/etc/ftpusers)에 등록해 주고 ftp데몬을 restart해 주면 된다.

특히 다음과 같은 System 계정중 서버에 특정 권한이 있는 계정은 반드시 등록해 두어 ftp접속을 하지 못하도록 해두는 것이 보안상 필요하다.

 

[root@ciss9 /etc]# cat ftpusers

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

news

uucp

operator

games

nobody


특정호스트로의 사용자 허용여부 리스트 /etc/ftphosts

 

이 파일은 특정호스트에 있는 특정사용자에 대하여 ftp로의 접속을 허용할 것인가 말것인가에 대한 설정으로 주로 1차적인 보안조치등을 할 때 쓰이며, ftp서버관리자의 입장에서는 서버의 보안을 위하여 이 파일의 내용을 계속 추가 및 수정해 줘야할 의무가 있다.

게으른 시스템 관리자에게는 항상 해킹의 위험이 도사리고 있다는 사실을 잊지말기 바란다.

다음의 실제 예를 통해서 이해해 보도록 하자.

 

 

allow sspark *.manualand.co.kr

 

위의 예는 manualand.co.kr로 된 도메인으로부터 sspark라는 계정으로 접속할때는 허용하겠다는 의미이다.

위의 예에서 알 수 있는 것은 첫 번째 열은 허용할 것인가?(allow) 허용하지 않을것인가?(deny)를 지정해 주며 두 번째 열은 대상 ID이며 세 번째 열은 접속허용할 호스트를 의미한다.

다음의 예를 보자.

 

 

deny netman 168.126.38.26

 

위의 예는 168.126.38.26으로부터 접속하는 netman이라는 사용자는 접속을 허용하지 않겠다는 것이다.

여기서 알수 있는 것은 도메인 뿐만아니라 IP Address로도 설정이 가능하다는 것이다.

또한 168.126.38.* 처럼 *의 사용도 가능하다.

 

/etc/ftphosts 설정에서 간혹 잘못 이해하기 쉬운 부분이 있다.

위에서 보다시피 두 번째 열의 ID는 접속하는 곳의 사용자를 의미하는 것이 아니라 접속되어질 ftp서버를 의미하는 것이다.

즉, 위의 예는 A라는 서버에서 B라는 서버의 사용자인 netman이라는 ID사용자의 접속을 허용하지 않으려고 할 때의 설정인 것이다.

다시 한번 강조하지만 netman이라는 사용자는 ftp로 접속할 때 login : 부분에 접속사용자를 적을때의 ID를 말하는 것이다.

FTP서버의 홈디렉토리 /home/ftp

 

ftp서버의 홈디렉토리란 ftp로 접속을 했을 때 처음으로 보여주게될 디렉토리의 절대경로를 의미한다.

즉 ftp로 접속을 했을 때의 첫 번째 화면이 다음과 같다면

 

 

[manualand:/ testuser] ftp 168.126.72.51

Connected to 168.126.72.51.

220 ciss9.kornet.net FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 ED

T 1999) ready.

Name (168.126.72.51:sspark): anonymous

331 Guest login ok, send your complete e-mail address as password.

Password:

230-Welcome to Kornet ftp hosting server

230-We are now here.

230 Guest login ok, access restrictions apply.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> dir

200 PORT command successful.

150 Opening ASCII mode data connection for /bin/ls.

total 20

d--x--x--x 2 root root 4096 Aug 11 20:37 bin

d--x--x--x 2 root root 4096 Aug 11 20:37 etc

drwxr-xr-x 2 root root 4096 Aug 11 20:37 lib

drwxr-sr-x 3 root ftp 4096 Oct 16 09:22 pub

-rw-r--r-- 1 root root 56 Aug 30 01:36 welcome.msg

226 Transfer complete.

ftp>


ftp로그인시의 첫 번째 디렉토리가 ftp 홈디렉토리인 것이다.

레드헷 리눅스의 ftp 홈디렉토리는 "/home/ftp"이다.

즉 위에서 "dirl"을 했을 때 디스플레이되는 파일과 디렉토리는 아래의 예처럼 "/home/ftp"에서 디스플레이 되는 내용이 동일하다는 의미이다.

 

 

[root@ciss9 ftp]# pwd

/home/ftp

[root@ciss9 ftp]# ls -l

total 20

d--x--x--x 2 root root 4096 Aug 12 05:37 bin

d--x--x--x 2 root root 4096 Aug 12 05:37 etc

drwxr-xr-x 2 root root 4096 Aug 12 05:37 lib

drwxr-sr-x 2 root ftp 4096 Aug 30 10:39 pub

-rw-r--r-- 1 root root 56 Aug 30 10:36 welcome.msg


ftp서버관리자는 서비스할 추가파일이 있거나 제외할 파일들은 이 디렉토리 이하로 복사또는 삭제하면 된다는 의미이다.

이들 디렉토리의 용도를 알아보자.

bin 디렉토리는 ftp기본명령어외에 사용에 필요한 명령어가 들어가 있다.

예를 들어 압축관련 명령어(compress, gzip, tar등)가 존재한다.

etc에는 group, passwd라는 파일이 들어있는데 그룹사용자의 ID와 패스워드가 들어있다.

pub디렉토리에는 실제로 ftp서비스를 할 파일들이 존재하며 이 pub디렉토리에 대부분의 파일들이 들어가 있다.

사용자들이 주로 사용하게될 디렉토리가 pub디렉토리란 의미이다.

 

여기에서 간과하기 쉬운 것이 있는데 이는 bin디렉토리와 etc디렉토리에는 일반사용자로 ftp접속했을 때는 ls나 dir등으로 디렉토리의 내용을 볼 수 없도록 디렉토리 퍼미션에 읽기권한을 제거해 두어 실행만 가능하도록 해 두었다는 것과 lib와 pub디렉토리는 읽기와 실행권한이 모두 있다는 것이다.

주의 깊게 보기 바란다.

간혹 시스템이 외부로부터 해킹을 당했을 때 디렉토리의 퍼미션들이 읽고 쓰기 가능하게 설정되어 있는 경우가 있다

. 이럴때는 즉시 시스템을 전체적으로 점검하여 적절한 조치를 취해야한다.

시스템관리자의 의무중 한가지가 파일과 디렉토리의 주기적인 퍼미션 점검이다.

시스템이 해킹당했을 때 나타나는 대표적인 현상중의 하나가 퍼미션변경이라고 할 수 있기 때문이다.

 

FTP접속로그파일 /var/log/xferlog

 

로그파일의 위치는 /var/log/xferlog이며 아래의 로그파일을 보면 알겠지만 ftp 로그파일에는 언제, 어디서 접속하여 어떤파일을 어디에 올려놓고 가져갔는가에 대한 정보들이 기록된다.

 

 

[root@ciss9 log]# cat xferlog | more

Fri Oct 1 17:08:24 1999 1 hosting.kornet.net 31320 /home/sspark/public_html/crack5.0

.README b _ i r sspark ftp 0 * c

Fri Oct 1 17:08:27 1999 2 hosting.kornet.net 2964507 /home/sspark/public_html/crack5

.0.tar.gz b _ i r sspark ftp 0 * c


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,042 명
  • 현재 강좌수 :  35,846 개
  • 현재 접속자 :  107 명