1. Rad Hat 계열 Linux에 설치
Rad Hat이 설치된 컴퓨터에 ftp server를 설치하기 위한 절차를 기술함
# yum -y install proftpd : ftp daemon을 설치
2. Ubuntu Linux에 설치
Ubuntu가 설치된 컴퓨터에 ftp server를 설치하기 위한 절차를 기술함
# sudo apt-get install proftpd : ftp daemon을 설치
[참고]
● 명령어 앞의 sudo는 root 권한으로 실행하겠다는 의미임
● Ubuntu에서는 root 계정을 별도로 사용하지 않고 # sudo -s 하면 일정시간동안 root 권한으로 실행할 수 있음
● apt-get은 Internet을 통해 package 설치를 할 때 사용하는 명령임
configuration file은 /etc/proftpd/proftpd.conf이며 실행 file은 /etc/init.d/proftpd임
3. 환경설정
Fedora에서의 설정
# vi /usr/local/proftpd/etc/proftpd.conf
웹서비스와 같이 실행 되도록 설정, FTP 서버의 성능과 안정성이 필요하다면 standalone으로 그냥 둠
ServerType inetd MaxInstances 5 # 최대 연결 수 설정 Group nobody # FTP 그룹이 없기 때문에 그룹 설정을 변경 (nogroup -> nobody) DefaultRoot ~ !jhlee # jhlee 그룹 사용자 이외의 사용자에 대한 home 디렉토리 이동 제한 설정 # ~ -> ~ !jhlee #UseIPv6 off # Fatal: UseIPv6: Use of the UseIPv6 directive requires IPv6 support (--enable-ipv6) on line 14 of '/usr/local/proftpd/etc/proftpd.conf' 오류 발생 시 IPV6 관련 옵션제거 # Anonymous 관련 설정 제거 |
Ubuntu에서의 설정
# sudo vim /etc/proftpd/proftpd.conf
[참고]
vim은 UNIX 계열에서 사용하는 editor vi의 improved program이며 vim 대신에 vi 또는 gedit 등을 사용하여도 무방함
##############
# Global 섹션
##############
ServerName "ProFTPD Default Installation-WOW"
# 서버의 이름을 정해서 적어준다.
ServerType inetd
# inetd와 standalone 모드 중에서 선택
DefaultServer on
# 주 IP address 또는 <VirtualHost> 설정 블록에서 지정되어진 address 중의 하나가 아
# 닌 IP address로 들어오는 connection이 있을 때 기본으로 사용되어질 서버 설정 조절
Port 21
# Proftpd가 사용할 기본 포트를 지정
# ADSL이나 케이블 같은 유동 IP 환경에서는 ISP 업체에서 21번 23번 25번 80번 포트 등
# 을 필터링 하기 때문에 ftp 기본 포트를 변경해야 외부에서 접속 가능
Umask 022
# umask를 설정해주는 지시자
# 새로 생성되는 파일이나 디렉토리의 기본 permission을 결정
# umask 022는 644의 permission을 가진 파일과 755의 permission 가진 디렉토리 생성
MaxInstances 30
# proftpd가 standalone 모드로 작동할 때 최대로 생성할 수 있는 자식 프로세스 정의
# DoS 공격에 대한 보호 목적이므로 적당한 값을 설정해서 사용
User nobody
# proftpd가 실행 될 때 User 지시자로 정의된 사용자명으로 실행
# 보안상 절대 root로 실행되게 해서는 안 됨
Group nobody
# User 지시자와 마찬가지이고 proftpd가 실행 될 때 Group 지시자로 정의된 Group 명
# 으로 실행
UseReverseDNS off
# 접속자의 IP 주소를 Reverse Mapping을 하지 않겠다는 설정
# Reserver Mapping이란 IP 주소를 도메인으로 변경하는 것
IdentLookups off
# 일반적으로, 클라이언트가 proftpd로 연결했을 때, ident protocol(RFC1413)은 remote
# username의 확인을 시도되기 위해 사용
# IdentLookups 지시자를 통해 조절
AuthPAMAuthoritative on
# PAM이 인증에 있어서 최종 단계의 권한을 가지게 함
# 즉 PAM 인증이 실패할 경우 클라이언트와의 연결을 거부함
RootLogin off
# ftp로의 root 로그인을 허락 또는 거부하기 위한 지시자
<Directory /*>
AllowOverwrite on
# 모든 디렉토리 내의 파일에 대해 같은 이름의 파일을 전송할 때 overwrite를 허락 또는
# 거부하기 위한 지시자
</Directory>
# 아래부터는 anonymous접속에 대한 설정
##################
anonymous섹션
##################
<Anonymous ~ftp>
# anonymous 설정을 시작
# anonymous 설정은 </Anonymous>까지 임
User ftp
Group ftp
# anonymous접속의 경우 proftpd가 실행 할 때 사용자명 "ftp" 그룹명 "ftp"로 실행
UserAlias anonymous ftp
# anonymous로 ftp에 접속한 사용자들에 대해 접속자명을 ftp로 alias해 줌
# 즉 anonymous로 접속한 사용자들은 사용자명 "ftp"의 권한을 가지게 됨
MaxClients 10 "Sorry, maxium users %m -- try again later"
# 동시 접속자수를 정의하는 지시자
# 정의한 수를 초과할 때 " " 안의 문자열을 사용자에게 출력
MaxClientsPerHost 2 "Sorry, Allow only one client for host"
# 하나의 호스트 당 최대 접속수를 정의하는 지시자
# 정의한 수를 초과 했을 때 " " 안의 문자열을 사용자에게 출력
DisplayLogin welcome.msg
# ftp로그인 때 보여 지는 메시지 파일 이름을 정의
DisplayFirstChdir .message
# 각 서브 디렉토리로 이동할 경우 보여줄 메시지 파일을 정의
RequireValidShell off
# /etc/shells에 없는 shell binary로그인 여부를 결정
# 특별한 이유가 없다면 off로 설정
HideUser root
# HideUser로 설정된 유저 소유의 파일은 보이지 않음
# Anonymous's Uploads Directory
# 업로드 디렉토리 이름을 변경하고 싶으면 아래의 uploads를 적당한 이름으로 변경
<Directory uploads/*>
AllowOverwrite on
# overwrite를 허용
AllowRetrieveRestart on
AllowStoreRestart on
<Limit DELE RMD>
DenyAll
# 디렉토리 삭제(RMD) 권한을 주지 않음
</Limit>
<Limit READ STOR MKD>
# 파일 읽기(READ), 업로드(STOR), 디렉토리 생성(MKD)에 대한 제어
# 읽기(READ)권한은 다운로드를 의미
# 와우 리눅스 7.0에는 MKD가 MDK로 잘못 설정되어 있음
AllowAll
# 읽기(READ), 업로드(STOR), 디렉토리 생성(MKD)에 대해 모두 허락
# 하지만 특정 권한에 DENY 설정을 하지 않는 이상 AllowAll 설정을 하지 않아도 Dney # 설정된 권한을 제외한 나머지 권한을 가짐
</Limit>
</Directory>
# Anonymous's Public Directory
<Directory pub/*>
<Limit READ>
AllowAll
# 읽기(READ)권한을 허락
</Limit>
<Limit STOR DELE RMD MKD>
DenyAll
# 업로드(STOR), 파일 삭제(DELE), 디렉토리 삭제(RMD), 디렉토리 생성(MKD)을 허락
</Limit>
</Directory>
</Anonymous>
● Order를 이용한 권한 제어
위에서 다루었던 proftpd.conf는 단순히 AllowAll 과 DenyAll만을 사용해 권한 제어를 했는데 Order 명령을 이용해서 접근제어와 권한 제어를 할 수 있음
특정 호스트만 로그인을 허용할 때
<Limit LOGIN>
Order allow,deny
Allow from 203.241.205.,.rootman.co.kr
Deny from all
</Limit>
Order 명령에서 Allow 와 Deny는 공백 문자가 아닌 쉼표(,)로 구분함
Allow 와 Deny의 대상을 입력할 때도 대상들의 구분은 공백이 아닌 쉼표(,)로 구분함
위의 설정은 203.241.205의 네트워크 주소를 가지거나 rootman.co.kr을 포함해 하위 호스트들만 접근이 가능하고 그 이외의 호스트에 대해서는 Login을 받아들이지 않음
예)
203.241.205.97 ---> 로그인 가능(203.241.205의 네트워크 주소를 가진다)
203.241.202.16 ---> 로그인 불가(203.241.205의 네트워크 주소를 가지지 않는다)
linux.rootman.co.kr ---> 접속 가능(rootman.co.kr의 하위 호스트이다)
microsoft.com ---> 접속 불가(rootman.co.kr의 하위 호스트가 아니다)
order명령은 LOGIN외에 READ, MKD, DELE, RMD, STOR등에도 적용할 수 있습니다.
● ftp 루트( / ) 디렉토리 지정
DefaultRoot ~
사용자가 fpt로 접속해서 자신의 홈 디렉토리 외에 다른 곳에는 접근하지 못하게 함
~(물결표시)는 사용자의 홈 디렉토리를 가리킵니다. 즉 자신의 홈 디렉토리가 루트(/) 디렉토리가 됨
이 지시자를 설정 하지 않으면 기본적으로 DefaultRoot는 /로 설정되어 있기 때문에 사용자는 최상위 경로(/) 까지 접근 할 수 있음
예)
DefaultRoot ~aaa,bbb,ccc
--> aaa, bbb, ccc 그룹에 속하는 ftp 접속 시 자신의 홈 디렉토리가 루트(/) 디렉토리가 됨
DefaultRoot ~ !aaa
--> aaa 그룹에 속하는 사용자들을 제외한 나머지 접속자들은 자신의 홈 디렉토리가 루트 (/) 디렉토리가 됨
● 심볼릭 링크 파일 보여주기
ShowSymlinks On 또는 Off
디렉토리에서 심볼릭 링크가 된 파일을 보여 주느냐, 보여 주지 않느냐에 대한 설정임
이 설정이 안 되어 있을 때에는 기본적으로 계정 사용자 접속의 경우에는 심볼릭 링크파일이 보이고 anonymous사용자 접속의 경우는 심볼릭 링크 파일을 보여주지 않음
전체 사용자에게 On 또는 Off를 설정하고 싶다면 Global 섹션에 포함 시키면 됨
● 숨김 파일 보여주기
LsDefaultOption "-a"
이 설정을 함으로써 점( . ) 으로 시작하는 파일 또는 디렉토리명을 보여 줌. 즉 숨김 파일에 대한 설정임. 하지만 요즘 사용하는 ftp클라이언트에서도 이 기능을 제공함
● welcome.msg 파일에 사용할 수 있는 유용한 것들
호스트명 : %L
남은 용량 : %f
현재 접속자 수 : %N
최대 접속자 수 : %M
리모트 호스트 : %R
사용자명 : %U
관리자 메일 : %E
# vi /etc/xinetd.d/proftpd
### pro-ftpd ###
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
}
(참고 : http://www.webtoedu.com/gachon_proftp2.php)
4. 실행
Ubuntu에서의 실행
# sudo /etc/init.d/xinetd restart (Ubuntu)
# service xinetd restart 또는 /etc/rc.d/init.d/xinetd restart (Rad Hat)
Fedora에서의 실행
# /etc/init.d/proftpd start
# /usr/local/proftpd/sbin/proftpd (compile을 통해 설치한 경우)
# ps -ef | grep proftpd (process 동작 확인)
nobody 23152 1 0 16:59 ? 00:00:00 [proftpd]
# netstat -an | grep LISTEN | grep 21 (21번 포트 확인)
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
'IT > CISCO' 카테고리의 다른 글
Lock and Key ACL(Dynamic ACL) (0) | 2017.02.18 |
---|---|
CBAC(Context-based Access Control) (0) | 2017.02.18 |
Linux에서 Telnet server 설치 및 운영 방법 (0) | 2017.02.16 |
Linux에서 router 설치 및 운영 방법 (0) | 2017.02.15 |
리눅스 (0) | 2017.02.14 |