proftpd.conf 설정19
proftpd란 ProFTPD는 unix또는 unix 호환 OS를 위한 FTP daemon이다. ProFTPD는 free software를 토대로한 GNU Public License (GPL)에 따라 개발되어져 왔으며, 이는 완전한 source code 와 이를 포함한 Proftpd package들 또는 미리 컴파일을 한 binary들의 형태로 된 것을 원하는 목적에 따라 상업적으로 또는 마음껏 배포할수 있다는 것을 의미한다. 언제 누구에의해서든지 ProFTPD는 수정될수 있으며, 또한 GNU 기반 하에서 라이센스화를 할수가 있다.
ProFTPD는 안전하고 설정가능한 FTP 서버를 가지고픈 바램, Apache 웹서버의 매력적인(?) 관리이상으로 성장했다. unix(또는 비슷한)에서 운영되는 매우 제한된 숫자의 ftp 서버들이 있다. 통상적으로 사용되는 서버는 거의 대부분 wu-ftpd 이다. wu-ftpd가 훌륭한 성능을 제공하고 일반적으로는 좋은 작품이지만 최근의 Win32 FTP 서버들에서 보게되는 다양한 기능들이 없고 좋지 않은 보안역사를 가지고 있다. 개인적으로, 나(ProFTPD 프로젝트를 시작한 사람)는 벌레를 잡고 기능들을 추가하기 위해 wu-ftpd를 뜯어보는 것에 매우 많은 시간을 소비했다. 불행히도, 원하는 설정성과 기능들을 구현하기 위해서는 완전히 다시 만들어야 한다는 필요성이 너무도 일찍 확연해졌다. ProFTPD는 다른 어떤 서버의 개조판도 아니며, 처음부터 끝까지 완전히 독립적인 소스 체계이다.
설정성의 댓가면에서 wu-ftpd와 쌍벽을 이루면서 경량급이고 안전하게 만들어진 다른 FTP 서버들이 있다. 예를 들자면, Troll FTP는 wu-ftpd보다 꽤 안전하며 자원을 덜 잡아먹는 훌륭한 FTP 데몬이다. 불행히도, 이넘은 기초적인 FTP 서비스에는 꼭 들어맞지만, 더 복잡한 FTP 사이트들에서 요구되는 기능들을 제공하지 않는다.
ProFTPD는 다음의 기능들을 제공한다( 현재 이렇다는 것이고 계획된 더 많은 것들이 곧!):
Apache 웹 서버를 사용해 본 관리자라면 누구나 직관적으로 이해할 수 있는 지시자와 지시그룹으로 된 단 하나의 설정 화일.
Apache의 ".htaccess"와 비슷한 각 디렉토리의 ".ftpaccess" 설정.
쉽게 설정할 수 있는 다중 가상 FTP 서버와 anonymous FTP 서비스.
시스템 부하에 따라 stand-alone 또는 inetd 중에서 골라서 운영되도록 만들어짐.
anonymous FTP의 root 디렉토리에는 특별한 디렉토리 구조나 시스템 화일이 없어도 됨.
SITE EXEC 명령이 없다. 현대의 인터넷 환경에서 그런 명령은 보안면에서 악몽이다. ProFTPD는 어떠한 경우에도 어떤 외부 명령도 실행하지 않는다. 검사를 위해 관리자에게 소스가 제공된다 (항상 제공될 것이다).
유닉스 스타일 퍼미션에 기초한 숨겨지는 디렉토리나 화일들 또는 유저/그룹 소유권.
"root" 권한을 따낼 수 있는 공격의 기회를 줄이기 위해 stand-alone 모드에서는 특권이 없는 유저도 운영을 할 수 있도록 설정가능. 주의: 이 기능은 Unix 시스템의 능력에 기초한다.
기록하기, utmp/wtmp 지원. 기록하기는 wu-ftpd 표준과 호환이며 확장된 기록하기도 가능하다.
shadow 암호 지원, 만료된 계정들 지원 포함.
그럼 지금까지 proftpd에 대한 것을 알게되었고 이제 ftp서버를 관리하는 proftpd.conf 파일 설정을 알아보도록 하자. 우선 proftpd가 깔려있는지 확인을 한다..없으면 CD-ROM이나 각 배포판의 FTP에서 RPM으로 다운로드하든지 http://www.profrpd.org, ftp://linux.sarang.net/에 접속해서 소스나 RPM으로 다운로드하여 설치 하도록 한다. 설치가 다 되었으면 이제 본격적인 proftpd 설정 파일들을 보기로 한다.
# cd /etc
#vi proftpd.conf
ServerName "Accel Linux Default Installation"
# ServerType은 Server를 standalone mode로 할것인지 inet mode로 할것
# 인지를 정한다. standalone mode는 이미 생성된 프로쎄스를 복사해서 자식 프로세스를 생성하는
#이다. inet mode는 아 예 처음부터 프로쎄스를 생성한다. default로 inetd mode로 한다. standalone #mode 할 경우 아래 MaxInstances 지시자의 주석을 해제 한다.
# inetd mode로 작동을 할 경우에는 /etc/inetd.conf중에서
# ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
# 행을 아래와 같이
# ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd
# 수정을 해 주고 Inet demon을 재 실행 해 줘야 한다. Inet demon은 보통 센드메일, 아파치 웹서버는 #inet 슈퍼 서버의 관리를 받지 않고 독립적으로 실행된다. 왜냐하면, 이들의 서비스는 매우 빈번하게
#요청되므로 반응시간이 빨라야 한다. 사실, inetd슈퍼 서버를 거치는 서비스는 독립형 서버
#실행방법보다 반응시간이 느리다. 그러나 자구 사용하지 않는 서비스 데몬을 계속 띄어놓는 것은 낭비#이다. inetd에관리하는 서버들은 대부분 in.이라는 이름으로 시작하는 파일명을 가지며,
#/usr/sbin 디렉토리에 위치 한다
ServerType standalone
DefaultServer on
# ServerType이 standalone이면 이 항목의 주석을 풀어 줘야 한다.
# inetd로 작동을 시킬시에는 /etc/services에서 port를 지정한다.
Port 21
# root login을 허락할지의 여부를 지정한다. PAM modules를 사용한다면
# 먼저 /etc/proftpd/conf/ftpusers에서 root를 삭제해야 한다. 왜냐면 root는 모든 권한으로 다 되었기 ##때문에 root로 들어와 자료를 삭제할 수가 있어서 root user를 제거한다.
#
RootLogin off
# Global section은 proftpd의 전체적인 설정에 모두 적용시킨다.
<Global>
# group과 world writable로 부터 새로운 dir과 file들을 생성하는 것을
# 막기위하여 기본적으로 umask는 022로 설정을 한다.
#umask는 새로 생성된 디렉토리나 파일에 대해서 퍼미션을 기본적으로 적용시킨다. 즉 Global에서 #umask 022로 설정되어 있으므로 Anonymous 가 접속하여 새로 생성시킬 수 있는 디렉토리에 대해서 #755퍼미션, 그리구 파일에 대해서는 644의 퍼미션을 준다. 잠깐 디렉토리의 소유자에 관해서도
#생각해보자. Anonymous가 새로 생성된 디렉토리가 755이므로 이 디렉토리의 소유자는 root나 다른 #user가 아니고 "ftp"소유자가 된다. 즉 UserAlias Anonymous ftp이므로 모든 Anonymous에 대해서
#다른 Anonymos가 생성시킨 디렉토리나 파일을 지우거나 바꿀 수 있다.
Umask 022
# PAM module 사용여부 (/etc/pam.d/ftp가 필요하다)
# /usr/doc/proftpd-1.2.0pre5/README.PAM 를 참조하라
#
#AuthPAMAuthoritative on
</Global>
# 회선의 Bandwidth를 특정 속도로 제한을 한다.
#RateReadBPS 256
#RateReadFreeBytes 5120
#RateReadHardBPS on
# 접속 대기 시간을 설정한다. user 가 접속후 아무 작동도 안할때 일정 시간후에
# 접속이 종료되게 한다.시간은 초로 계산한다.
TimeoutIdle 300
# DeferWelcome 는 client가 인증을 하기 전에 servername을 display하는
# 것을 방지한다.
DeferWelcome off
# 'welcome.msg는 login시에 보여지고, 'message'는 각 하위 디렉토리에 접속
# 했을때 보여지게 된다.
# *메시지 파일에 포함되는 Magic Cookie 문자열 ( 참고사항) #
cookies
의 미
%C
현재의 작업 디렉토리
%E
Ftpaccess에 정의 된 메인트넌스 담당자의 e-mail주소
%F
CWD 파티션의 여유 공간(Kilobytes)
%L
로컬 호스트명
%M
이 클래스에서 허가된 최대 사용자수
%N
이 클래스의 현재 사용자수
%R
원격 호스트명
%T
지역 시간(Thu Nov 15 17:12:42 1990 형식)
%u
RFC 931 인증(authentication)을 통해 결정된 사용자명
%U
로그인시에 주어진 사용자명
DisplayLogin welcome.msg
DisplayFirstChdir .message
# DoS 공격을 막기 위해, 자식 process의 maximun number를 30으로 설정한다.
# 만약 30이상의 접속을 허락할 필요가 있다면 간단하게 이 치수를 증가시키도록
# 한다. 이것은 오직 standalone mode에서만 가능하다. inetd mode에서는
# service 당 maximun number를 제한 하는 것을 허락하는 inetd server에서
# 설정을 해야 한다.(xintd 역시 마찬가지 이다)
# MaxInstances 30
User nobody
Group nobody
# 일반적으로 file들을 overwrite를 가능하게 한다.
<Directory /*>
AllowOverwrite on
</Directory>
# ls 명령어의 -a option으로 hidden file을 볼수 있게 한다.
# LsDefaultOptions "-a"
#Anonymous user로 들어온느 설정부분
<Anonymous ~ftp>
User ftp
Group ftp
# Anonymous user가 ftp로 접근하여 shell의 권한을 얻는 것을
# 방지한다.
RequireValidShell off
# Anonymous 접근을 할때 특정 password를 지정할수 있다.
# 단 위의 User 지시자의 name이 passwd file에 등록이 되어져
# 있어야 한다. 이 지시자가 on일 경우 이메일 주소로 login을
# 할수 없다.
# AnonRequirePassword on
#
#ShowSymlink==>심벌릭 링크를 보여주는 설정이다. 기본설정은 Anonymous가 접속한 경우에는 off로 되어 있고, 기타계정 사용자가 접속할때는 on으로 설정되어 있다. 전체에 허용하고 on으로 한다..
#ShowSymlinks off
# User name "ftp"로 anonymous login을 할수 있도록 한다
UserAlias anonymous ftp
<Limit LOGIN>
AllowAll
</Limit>
# anonumous로 user로 들어오는 ftp서버의 메시지를 보여주는 곳이다..윗에 참고사항 참고한다.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# 최대 접속 인원수를 지정한다.(임으로 지정할 수 가 있다.)
MaxClients 10
# 하나의 호스트로 부터 동시에 접근할수 있는 수를 지정한다.
# 아래의 기본 설정으로는 하나의 호스트에서 한번의 접근만 허용한다.
MaxClientsPerHost 3 "Sorry, one connection allow per one host"
# 소유권이 root인 file이나 directory들을 보여주지 않는다
#HideUser root
# 그룹권한이 root인 file이나 directory들을 보여주지 않는다
#HideGroup root
# upload/download 비율을 지원한다.
# /usr/doc/proftpd-1.2pre7/mod_ratio.c를 참조하라
#
# Ratios on
# HostRatio foobar.net 100 10 5 100000
<Limit WRITE>
DenyAll
</Limit>
# Upload directory, allow upload and mkdir, deny download.
# Upload directory 설정이다. upload와 mkdir은 허락하며,
# download는 거절한다
#
<Directory incoming>
AllowStoreRestart on ===>클라이언트에서 서버로 파일 전송
AllowRetrieveRestart on ==>서버에서 클라이언트로 파일전송
==>설정을 on으로 하면 이어받기가 된다.
<Limit READ>
DenyALL
</Limit>
<Limit STOR MKD>
AllowALL
</Limit>
</Directory>
# 사용자가 접근하기를 원하지 않는 private directory
# <Directory logs>
# <Limit READ WRITE DIRS>
# DenyAll
# </Limit>
# </Directory>
</Anonymous>
#가상 서버 FTP만드는 설정을 하겠다. VirtualHost 의 주소는 네임서버에서 지정해주어야 한다.
<VirtualHost ftp.virtual.com>
ServerName "Virtual.com's FTP Server"
#들어오는 인원 제한
MaxClients 10
#로깅 시도 횟수
MaxLoginAttempts 1
#DeferWelcome on
#guest login만 허락하기를 위하여
#nomail user login을 제한한다.
<Limit LOGIN>
DenyALL
</Limit>
##홈디렉토리 밖에 움직이지 못한다.모든계정자에서 !admin은 admin 그룹을제외하고는 홈디렉토에서만 움직인다.
DefaultRoot ~ !admin
#다음, 자신들의 web site등에 개인적으로 접근하기 위한 customer에 의해 사용되는 "guest"계정을 만#든다. 여기서 useradd로 등록한 cust1의 계정을 설정하는 부분이다.
<Anonymous ~cust1>
User cust1
Group cust1
#패스워드를 확인한다.
AnonRequirePassword on
<Limit LOGIN>
AllowAll
</Limit>
#숨기고자하는 사용자와 그룹
HideUser root
HideGroup root
#사용자가 접근하기를 원하지 않는 private directory
<Directory logs>
<Limit READ WRITE DIRS>
DenyAll
</Limit>
</Directory
</Anonymous>
</virtualHost>
#primary address에서 작동을 하지만 port는 4000번을 사용하는 또 다른 가상 호스트이다. acess는 하#나의 anonymous login만 된다.
<virtualHost our.ip.address>
ServerName "Our private FTP server"
Port 4000
Umask 027
<Limit LOGIN>
DenyAll
</Limit>
<Anonymous /usr/local/ftp/vitual/a_customer>
User ftp
Group ftp
UserAlias anonymous ftp
<Limit LOGIN>
AllowALL
</Limit>
<Limit WRITE>
DenyAll
<Limit>
<Directory incoming>
<Limit WRITE>
AllowAll
</Limit>
</Directory>
<Anonymous>
</VirtualHost>
:wq!
음 이제 proftpd.conf 파일들을 보았다..사용자의 입맛에 맛에 수정하였으면 꼭 proftpd데몬을 꼭 재실행 해야한다..
# etc/rc.d/init.d/proftpd restart
이제 proftpd.conf파일들을 보았다.그러면 이제 ftp서버를 관리하는 부분을 보도록 하자.
ftp도 보안을 위해서는 일정한 모니터링이 피요하고, 그것의 가장 단순하고 유용한 작업은 로그 파일을 읽는 것과 현재의 접속 상태를 점검해 보는 것이다. 그러므로 ftp서버를 관리하기 위한 명령어등을 알아보기로 한다.
[proftp의 중요 파일들]
/usr/sbin/proftpd : proftpd는 전문적인 File Transfer Protocol (FTP) server daemon이다. server는 FTP service가 이루어지기 위해 접속 될 때마다, 또는 stand-alone daemon으로서 실행되는 것을 대체로 될 떄, Internet "super-server" inetd에 의하여 시작된다. proftp 가 standalone mode로 작동할 때, 그리고 SIGHUP를 받을 떄 proftp는 config file을 다시읽을 것이다.
/usr/sbin/ftpwho : 이 명령을 내리면 ftp유저들의 현재 process정보를 보여준다. 그래서 모든 proftpd에 연결되어 있는 process의 정보를 보야주며, 각 server의 접속되어 있는 수를 보여준다. inetd로부터 생성된 proftpd session들은 standalone server에 의해 생성된 것들과는 구분하여 count된다.
/usr/bin/ftpcount : 이것은 각 proftpd server설정에 접속되어 있는 user의 수를 보여준다. 이것은 proftpd.conf file에 정의 되어 있는 각 server와 virtualhost/anonymos 설정에 접속해 있는 현재 숫자를 보여준다. inetd에 의해 생성된 접속은 proftpd standalone server에 의해 생성된 것들로부터 구분되어 카운트된다.
/usr/sbin/ftpshut : 지 정한 시간에 모든 proftp server들을 shutdown한다. 이 명령은 자동으로 shutdown 진행을 준비하고,자동으로 현재 proftpd connection을 끊을 수 있으면 새로은 연결을 거부하도록 할 수 있다. 명령은 shutdown이 임박함을 proftpd process에 알리기 위하여 /etc/shutmsg와 같은 컨트롤을 사용할 수 있다. 주의할점은 proftpd server는 master demon이 standalone mode로 동작할 때 ftpshut을 통해서만 shutdown을 할 수가 있다.Server가 inetd mode로 실행이 된다면 ftpshut에 의해 생성된 shutdown message file을 사용할 수 있다.하지만 현재 동작중인 server는 chroot될 것이면 , shutdown message control file을 읽지 못한다.
/var/log/xferlog : xferlog file은 FTP server daemon(ftpd(8))의 logging 정보를 포함한다. 이 file은 보통 /usr/adm에서 볼 수 있으나, ftpd(8)의 option을 사용함에 따라 어디든지 위치될 수 있다.실제로그 파일의 예를 들겠다.
SUN NOV 14 00:27:54 2000 0 166.104.37.130 3495 /usr/local/apache/htdocs/h3.htm a_ir webmaster ftp 0 *
Mon Nov 15 20:42:19 2000 0 166.104.53.121 304422 /home/xenus/a.zip b_ir xenus ftp 0 *
설명: Mon Nov 15 20:42:19 2000 =>current-time : "DDD MMM dd hh:mm:ss YYYY"형식의 local시간이다. DDD는 주중의 요일을 ,MMM은 월을,dd는 날짜를, hh는 시를,mm 은 분을, ss는 초를 ,그리고 YYYY는 연도를 나타낸다.
0 => transfer-time : 전송을 위한 총 시간을 말하며 초 단위로 표시한다.
166.104.37.130=> 원격host이름이다.
304422 => byte 단위의 전송된 file size이다.
/home/xenus/a.zip=> 전송된 파일 이름이다.
a 는 ascii ,b는 binary전송들 뜻한다.
special-action-flag : 어떤 특정한 action이 발생하는 것을 나타내는 하나 또는 그 이상의 character flag 이다. 아래에 나열된 것 중의 하나 또는 그 이상으로 사용할 수 있다.
C file 은 압축되어 있다. U file은 압축이 되어 있지 않다. T file이 tar로 묶여 있다. _ 아무런 동작이 발생하지 않았다.
direction 전송의 지시다.
The Discussion Continues
Trackback Address | http://hisfy.kr/trackback/11