RedHat Linux >> Server Administration for Redhat Linux
|
[목차] |
제6장 FTP 서버
2. ProFTPd 설치하기 1. RPM 으로 설치하기 우선, RPM 패키지는 rpm 명령으로 설치를 한다.
# rpm -Uvh proftpd-1.2.1-1kr.i386.rpm
데비안의 경우 dselect를 이용하거나 apt-get을 이용해 설치한다.
# apt-get install proftpd
위에서 rpm, dselect, apt-get과 make install을 할때는 루트권한으로 작업을 해야 한다. RPM 이나 데비안 패키지는 /usr이 기본 디렉토리이며, 설정파일은 /etc/에 위치한다. 최근의 1.2.0rc이후 버전에서는 /etc/proftpd/conf에 설정파일이 위치하는 경우도 있다.
2. 소스로 설치하기 2.1 환경 설정파일 백업하기 tarball 소스를 컴파일해서 설치하는 경우는 적당한 디렉토리에서 압축을 풀고, 컴파일하고, 설치하면 된다.
소스 설치를 위해 기존의 RPM 패키지를 지워야 한다. 환경설정파일들을 백업하고 지우자. 그래야. 소스설치 후, 환경설정파일 재사용할 수 있다. 환경설정파일을 백업하자. # cd /etc/pam.d # cp ftp ftp.bak
데몬을 런레벨 스트립트로 실행할 때 존재할 것이다. # cd /etc/rc.d/init.d/ # cp proftpd proftpd.bak
데몬을 Xinetd로 실행할 경우에 아래와 같이 백업한다. # cd /etc/xinetd.d/ # cp proftpd proftpd.bak
2.2 RPM 버전 지우기 기존 RPM을 지워야한다. # rpm -qa|grep proftpd proftpd-xinetd-1.2.0rc2-1kr2 proftpd-core-1.2.0rc2-1kr2 # RPM 버전에 따라 다르게 나올 수 있다. # rpm -e proftpd-xinetd # rpm -e proftpd-core
2.3 소스로 설치하기 그리고, 소스를 아래와 같이 설치하자. # gzip -cd proftpd-1.2.1.tar.gz | tar xvf - # cd proftpd-1.2.1 configure의 옵션들에 대해 알아보자.
# ./configure # make # make install
소스를 직접 컴파일해서 설치한 경우엔 기본 설치 디렉토리가 /usr/local/이 된다. 따라서, ProFTPd의 바이너리 실행 파일은 /usr/local/bin 또는 /usr/local/sbin에 위치하며, 설정 파일인 proftpd.conf는 /usr/local/etc에 위치하게 된다.
2.4 환경설정파일 다시 복사하기 환경 설정 파일들을 복사해 놓자.. # cd /etc/pam.d # mv ftp.bak ftp
(1) 런레벨 스크립트로 실행시 # cd /etc/rc.d/init.d/ # mv proftpd.bak proftpd
(2) Xinetd로 실행시 # cd /etc/xinetd.d/ # mv proftpd.bak proftpd
2.5 환경설정파일 수정하기(실행 스크립트) (1) 런레벨 스크립트로 실행시 런레벨 스크립트는 실행파일의 위치가 바뀌었기 때문에 수정해 줘야 한다. # vi /etc/rc.d/init.d/proftpd
#!/bin/sh # # Startup script for ProFTPd # # chkconfig: 345 85 15 # description: ProFTPD is an enhanced FTP server with \ # a focus toward simplicity, security, and ease of configuration. \ # It features a very Apache-like configuration syntax, \ # and a highly customizable server infrastructure, \ # including support for multiple 'virtual' FTP servers, \ # anonymous FTP, and permission-based directory visibility. # processname: proftpd # config: /etc/proftpd.conf # # By: Osman Elliyasa <osman@Cable.EU.org> # $Id: proftpd.init.d,v 1.2 2001/01/26 23:10:55 flood Exp $
# Source function library. . /etc/rc.d/init.d/functions
FTPSHUT=/opt/sbin/ftpshut
# See how we were called. case "$1" in start) echo -n "Starting proftpd: " if [ -x ~ftp-master/bin/advert.sh ]; then echo -n "Adverts " su - ftp-master -c "bin/advert.sh fifo" fi $0 resume daemon /usr/local/sbin/proftpd echo touch /var/lock/subsys/proftpd ;; stop) echo -n "Shutting down proftpd: " if [ -x ~ftp-master/bin/advert.sh ]; then echo -n "Adverts " su - ftp-master -c "bin/advert.sh kfifo" fi $0 suspend killproc /usr/local/sbin/proftpd echo rm -f /var/lock/subsys/proftpd ;; status) status proftpd ;; restart) $0 stop $0 start ;; reread) echo -n "Re-reading proftpd config: " killproc proftpd -HUP echo ;; suspend) if [ -f $FTPSHUT ]; then if [ $# -gt 1 ]; then shift echo -n "Suspending with '$*' " $FTPSHUT $* else echo -n "Suspending NOW " $FTPSHUT now "Maintanance in progress" fi else echo -n "No way to suspend " fi echo ;; resume) if [ -f /etc/shutmsg ]; then echo -n "Allowing sessions again " rm -f /etc/shutmsg else echo -n "Was not suspended " fi echo ;; *) echo -n "Usage: $0 {start|stop|restart|status|reread|resume" if [ "$FTPSHUT" = "" ]; then echo "}" else echo "|suspend}" echo "suspend accepts additional arguments which are passed to f tpshut(8)" fi exit 1 esac
if [ $# -gt 1 ]; then shift $0 $* fi
exit 0
(2) Xinetd로 실행시 Xinetd로 실행시 아래와 같이 바꾸어 주면 된다. # vi /etc/xinetd.d/proftpd
# default: on # description: The proftpd FTP server serves FTP connections. It uses \ # normal, unencrypted usernames and passwords for authentication. service ftp { disable = no flags = REUSE protocol = tcp socket_type = stream instances = 50 wait = no user = root server = /usr/local/sbin/in.proftpd log_on_success = HOST PID log_on_failure = HOST RECORD }
2.6 PAM 설정파일 수정하기 # cd /etc/pam.d # vi ftp #%PAM-1.0 auth required /lib/security/pam_listfile.so item=user sense=deny \ file=/usr/local/etc/ftpusers onerr=succeed auth required /lib/security/pam_pwdb.so shadow nullok # This is disabled because anonymous logins will fail otherwise, # unless you give the 'ftp' user a valid shell, or /bin/false and add # /bin/false to /etc/shells. #auth required /lib/security/pam_shells.so account required /lib/security/pam_pwdb.so session required /lib/security/pam_pwdb.so
# cd /usr/local/etc # vi ftpusers root bin daemon adm lp sync shutdown halt news uucp operator games nobody FTP 로그인을 허용하지 않을 유저 id가 있으면 위에 추가하면 된다. ftpusers파일에 있는 사용자들은 sense=deny에 의해 거부당하게 됩니다. ftpusers에 있는 목록은 일반적으로 UID 500이하의 시스템 계정이 포함되게 됩니다.
[참고] PAM(장착식 인증 모듈) PAM 설정을 간단히 설명하자면 네가지 아이템에 대한 이해만 가진다면 다른 서비스에 대해서도 이를 적용할 수 있다. item=user item은 어떤 것을 기준으로 리스트를 작성할 지 결정한다. 유저로 지정했다면 로그인 할 유저 이름을 기준으로 해당 리스트를 작성하면 된다. sense=deny sense의 값에는 deny와 allow가 있다. 즉, 허락할 것인지, 아니면 거부할 것인지를 결정한다. file=/etc/ftpusers file은 item에서 결정한 리스트를 기록할 파일을 지정한다. 즉 기본으로 wu-ftpd가 /etc/ftpusers이지만 이 파일에서 원하는 곳으로 수정을 할 수 있다는 얘기다. onerr=succeed onerr는 file=에서 지정한 파일이 존재하지 않을 경우에 어떻게 처리할 지 결정한다. success로 지정하면 파일이 존재하지 않을 경우 무조건 로그인을 가능하게하며, fail로 설정돼 있을 경우에는 무조건 로그인에 실패하게 한다. 위의 사항을 잘 이용하면 텔넷이나 다른 로그인 서비스에 대해서 제한을 가하거나 정책을 다르게 설정할 수 있다. -------------------------------------------
2.7 ProFTPd 환경설정 파일(proftpd.conf) 수정하기 # cd /usr/local/etc # vi proftpd.conf
######################################################################### # # # ProFTPD Korea User Groups # # http://proftpd.oops.org # # # ######################################################################### # 번역 : 김정균 < admin@oops.org > # 잘못된 설정이 있으면 연락 주시기 바랍니다. #########################################################################
ServerName "Proftpd FTP Server For Korean"
# ServerType은 Server를 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을 재 실행 해 줘야 한다. # standalone => 런레벨 스크립트로 실행할 경우 # ServerType standalone # inetd => Xinetd 스크립트로 실행할 경우 ServerType inetd DefaultServer on ServerAdmin root@localhost
UseReverseDNS off IdentLookups off
# Server에 접속했을 경우 보내주는 Defualt 메세지를 설정한다. Off로 지정 # 하였을 경우 Porftpd Server Ready ServerName 이 출력된다.
ServerIdent On "LeeLAB & OOPS Account Server ready .. "
# User login을 했을시에 user들이 자신의 홈 상위 디렉토리들을 마음대로 # 돌아다니지 못하게 chroot()를 설정한다. group별로 설정을 하게 되며 # "!"는 제외하라는 의미를 가지게 된다. DefaultRoot ~ !groupname
# ServerType이 standalone이면 이 항목의 주석을 풀어 줘야 한다. # inetd로 작동을 시킬시에는 /etc/services에서 port를 지정한다. #Port 21
# root login을 허락할지의 여부를 지정한다. PAM modules를 사용한다면 # 먼저 /etc/proftpd/conf/ftpusers에서 root를 삭제해야 한다. RootLogin off
# Global section은 proftpd의 전체적인 설정에 모두 적용시킨다. <Global> # group과 world writable로 부터 새로운 dir과 file들을 생성하는 것을 # 막기위하여 기본적으로 umask는 022로 설정을 한다. Umask 022
# ftpusers file을 이용하여 PAM인증을 하기를 원하면 이 지시자의 # 값을 on으로 한다. default 값은 off 이다. AuthPAMAuthoritative on
# service를 시작하고 마칠 시간을 24시간 표기법으로 지정을 한다 # UpTime 10 # DownTime 23
# 1.2.1 이하 버젼에서의 버그를 위한 설정 DenyFilter \*.*/ </Global>
# 회선의 Bandwidth를 특정 속도로 제한을 한다. 단위는 bps이다. #RateReadBPS 256 #RateReadFreeBytes 5120 #RateReadHardBPS on
# 접속 대기 시간을 설정한다. user 가 접속후 아무 작동도 안할때 일정 시간후에 # 접속이 종료되게 한다 TimeoutIdle 600 TimeoutNoTransfer 600 TimeoutLogin 0
# DeferWelcome 는 client가 인증을 하기 전에 servername을 display하는 # 것을 방지한다. DeferWelcome off
# 'welcome.msg는 login시에 보여지고, 'message'는 각 하위 디렉토리에 접속 # 했을때 보여지게 된다. DisplayLogin /usr/local/etc/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 ~ftp> User ftp Group ftp
# Anonymous user가 ftp로 접근하여 shell의 권한을 얻는 것을 # 방지한다. RequireValidShell off
# Anonymous 접근을 할때 특정 password를 지정할수 있다. # 단 위의 User 지시자의 name이 passwd file에 등록이 되어져 # 있어야 한다. 이 지시자가 on일 경우 이메일 주소로 login을 # 할수 없다. # AnonRequirePassword on # ShowSymlinks off
# User name "ftp"로 anonymous login을 할수 있도록 한다 UserAlias anonymous ftp
<Limit LOGIN> AllowAll </Limit>
DisplayLogin welcome.msg DisplayFirstChdir .message
# 최대 접속 인원수를 지정한다. MaxClients 100
# 하나의 호스트로 부터 동시에 접근할수 있는 수를 지정한다. # 아래의 기본 설정으로는 하나의 호스트에서 한번의 접근만 허용한다. MaxClientsPerHost 5 "Sorry, 3 connection allow per one host"
# 하나의 계정ID로 동시에 접근할수 있는 호스트 수를 지정한다. # 아래의 기본 설정으로는 하나의 계정 하나 호스트에서만 접근만 허용한다. # 하나의 계정에 하나의 접근만을 허락하려면 위의 MaxClientsPerHost의 # 값과 MaxHostsPerUser의 값이 둘다 1이면 된다. MaxHostsPerUser 5 "Sorry, one hosts allow per one user"
# 소유권이 root인 file이나 directory들을 보여주지 않는다 #HideUser root
# 그룹권한이 root인 file이나 directory들을 보여주지 않는다 #HideGroup root
# upload/download 비율을 지원한다. # /usr/doc/proftpd-1.2$VERSION/mod_ratio.c를 참조하라 # # Ratios on # HostRatio foobar.net 100 10 5 100000
# 서버를 시간대로 운영하는 것을 지정한다. # 아래의 예는 오후 3시 부터 오후 6시까지만 # 서버의 접속을 가능하게 한다. # # UpTime 15 # DownTime 18
<Limit WRITE> DenyAll </Limit>
# Upload directory, allow upload and mkdir, deny download. # Upload directory 설정이다. upload와 mkdir은 허락하며, # download는 거절한다 # # <Directory incoming> # <Limit READ> # DenyALL # </Limit> # <Limit STOR MKD> # AllowALL # </Limit> # </Directory>
# 사용자가 접근하기를 원하지 않는 private directory # <Directory logs> # <Limit READ WRITE DIRS> # DenyAll # </Limit> # </Directory>
</Anonymous>
로그인시 보여줄 welcome.msg파일을 만들어준다. # vi welcome.msg
################################################################# # # # Open Lecture Project # # # # LeeLAB's ProFTPd Server # # # #################################################################
2.8 Anonymous ftp 설정하기 # cd /usr/local/etc # vi proftpd.conf
생략
<Anonymous ~ftp> User ftp Group ftp
생략
# cd /etc # vi passwd 생략 ftp:x:14:50:FTP User:/home/ftp: 생략
# cd /home # ls -al total 5 drwxr-xr-x 14 root root 4096 Dec 25 01:16 . drwxr-xr-x 24 root root 4096 Jan 9 20:23 ..
생략
drwxr-xr-x 6 ftp ftp 4096 Oct 25 02:50 ftp
생략 만약에 다를 경우 # chown -R ftp.ftp ftp
2.9 데몬 실행하기 (1) 런레벨을 이용한 실행 # /etc/rc.d/init.d/proftpd stop # /etc/rc.d/init.d/proftpd start
(2) Xinetd를 이용한 실행 # /etc/rc.d/init.d/xinetd stop # /etc/rc.d/init.d/xinetd start
런레벨을 이용한 실행시, 리눅스 부팅시 데몬을 실행하기 위해서는 # ntsysv 에서 proftpd를 선택하면 된다.
|
[목차] |