Learning Linux/AdminCourse 2009. 7. 27. 23:14
출처 : 대전국제IT교육센터 정성재 강사
1. 개요
리눅스에서 FTP서버를 사용하기 위해서는 FTP서버 프로그램을 설치해야 하는데, 대표적인 프로그램
이 두가지가 있다. 하나는 Wu-ftpd라는 프로그램으로 원래 리눅스에서 전통적으로 사용하던 프로그램
이다. 또 다른 하나는 Pro-FTPd라는 프로그램으로 보안상 안전하고 설정이 아파치 웹서버 프로그램이
랑 유사하다. 여기서는 레드햇 8.0에 기본으로 설치되어 있는 Wu-ftpd에 대해 알아본다.
2. Wu-ftpd서버 데몬 작동시키기
(1) 설명: Wu-ftp는 슈퍼데몬인 xinetd에 속해 있다. xinetd에 속해있는 데몬들이 위치해 있는 디렉
토리인 /etc/xinetd.d에서 wu-ftpd라는 파일의 설정을 바꿔주면 된다.
(2) 방법
1) 파일을 직접 변경하기
ㄱ. 기본 설정예
[root@www root]# cat /etc/xinetd.d/wu-ftpd
# default: on
# description: The wu-ftpd FTP server serves FTP connections. It uses \
# normal, unencrypted usernames and passwords for authentication.
service ftp
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l -a
log_on_success += DURATION
nice = 10
}
=> 데몬 작동과 관련된 항목이 disable 항목인데 이 값이 yes라서 wu-ftp가 작동하지 않는
다. 이 값을 no 라고 바꾼다.
ㄴ. 변경후에 xinetd 데몬을 다시 구동한다.
service xinetd restart
2) chkconfig 명령어 이용하기
ㄱ. [root@www root]# chkconfig wu-ftpd on
=> 이 명령을 시행하면 /etc/xinetd.d/wu-ftpd라는 파일의 disble항목값이 no로 바뀐다.
ㄴ. 변경후에 xinetd 데몬을 다시 구동한다.
service xinetd restart
3. Wu-ftp서버 작동 유무 테스트하기
(1) 설명: 기본 FTP 포트인 21번 포트로 접속을 해본다.
(2) 방법
[root@www root]# telnet localhost 21
Trying 127.0.0.1...
Connected to www (127.0.0.1).
Escape character is '^]'.
220 www FTP server (Version wu-2.6.2-8) ready.
=> FTP서버가 작동중임을 알 수 있다. 'quit'라고 치면 접속에서 빠져나온다.
4. Wu-ftp서버 관련파일
(1) /usr/sbin/in.ftpd: 실제 wu-ftp 서버의 데몬으로 기본적으로 xinetd에 의해 관리된다.
(2) /etc/ftpaccess: FTP서버에 접근 관련 설정파일이다.
(3) /etc/xinetd.d/wu-ftpd: xinetd 데몬관련 서비스 파일이다.
(4) /etc/ftpusers: FTP서버를 이용할 수 없는 유저의 목록파일이다. 기본적으로 root 계정도 이용
불가이므로 root계정자가 ftp를 사용하려면 이 파일목록에서 삭제해야 한다.
(5) /etc/ftphosts: 특정호스트의 FTP서버 접근 허용 유무를 설정하는 파일이다.
5. Wu-ftp서버 환경 설정
(1) /etc/ftpaccess
1) 설명: Wu-ftp의 주 환경설정 파일이다.
2) 기본설정과 주요항목 설명
[root@www root]# cat /etc/ftpaccess
This file controls the behavior! of the wu-ftpd
# ftp server.
#
# If you're looking for a graphical frontend to
# editing it, try kwuftpd from the kdeadmin
# package.
# Don't allow system accounts to log in over ftp
deny-uid %-99 %65534-
deny-gid %-99 %65534-
allow-uid ftp
allow-gid ftp // 접근을 허가할 사용자와 거부할 사용자를 지정하는 부분이다. 현재
//설정은 uid값이 처음부터 99까지와 65534가 넘어가는 사용자는 접속
//을 거부한다는 뜻이고, gid도 같은 설정이다. 위에 속해있는 uid/gi
//d에서 ftp사용자는 허가한다는 뜻이다.
# Chroot all users to their home directory by default
# (comment this out if you don't want to chroot most of your users)
guestuser * // 모든 사용자를 guest취급한다. 즉 anonymous처럼 자기 홈디렉토리가
//최상위 root디렉토리로 된다.
# If you wish to allow user1 and user2 to access other
# directories, use the line below:
# realuser user1,user2 // 실제 유저로 인정할 계정을 적는다.
# The ftpchroot group doesn't exist by default, this
# entry is just supplied as an example.
# To chroot a user, modify the line below or create
# the ftpchroot group and add the user to it.
#
# You will need to setup the required applications
# and libraries in the root directory (set using
# guest-root).
#
# Look at the anonftp package for the files you'll need.
guestgroup ftpchroot // 게스트그룹으로 인정할 그룹명을 적는다.
# User classes...
class all real,guest,anonymous *
// FTP서버에 접속하는 사용자와 방법, 접속자의 주소를 지정한다. 기본 형식은 아래와 같다.
// class <class> <typelist> <addrglob> [ <addrglob> ...]
//<typelist>는 'anonymous','guest','real'이라는 keyword가 존재하며 이 3개의 키
//워드는 콤마(comma)로 구분하고, 각각의 사이에 공백을 넘어서는 안된다.. 'real'은 실제
//사용자계정을 말하며, anonymous는 anonymous FTP를 위한 사용자(anonymous, ftp)를 말하고,
//guest는 손님사용자로 처리되는 사용자를 말한다. addrglob는 ftp서버에 접속하는 사용자의
//주소를 적는다. 도메인 이름이나 IP주소로 지정하며, 와일드문자와 여러 개의 주소도 지원
//한다.
// 위의 예는 all이라는 class를 지정하는 것이다. typelist에 real,guest,anonymous 라고
//지정되어 있는데, real값이 가장 먼저 나왔으므로 ftp접속사용자와 실제 계정사용자와 일치
//하는 지를 구별한 뒤에 해당 계정의 홈 디렉토리로 접속시킨다.
# Set this to your email address
email root@localhost // ftp서버의 관리자 이메일 주소를 설정한다.
# Allow 5 mistyped passwords
loginfails 5 // 지정한 로그인회수 만큼 실패하면 FTP연결을 끊는다.
# Notify the users of README files at login and when
# changing to a different directory
readme README* login
readme README* cwd=* // 이 설정은 안내파일인 README파일이 존재할 경우 README
//파일을 존재한다고 알려주는 역할을 한다. login은 로그인
//할 때 알려준다는 뜻이고, cwd는 특정디렉토리로 이동시에
//알려준다는 뜻이다.
# Messages displayed to the user
message /welcome.msg login
message .message cwd=* // 로그인시나 디렉토리이동시에 해당 파일의 내용
//을 보여준다. 여기서 참고할 점은 /welcome.msg
//이다. 만약 해당 사용자를 realuser로 등록하면
//로그인 경로가 '/home/사용자계정명'이 되므로
//realuser설정과 비교하면서 설정해야 한다.
# Allow on-the-fly compression and tarring
compress yes all
tar yes all // compress와 tar사용을 가능하게 한다. 실제전환은
//외부파일인 /etc/ftpconversions에 의해 정의되어
//진다.
# Prevent anonymous users (and partially guest users)
# from executing dangerous commands
chmod no guest,anonymous
delete no anonymous
overwrite no anonymous
rename no anonymous // 특정한 명령에 대한 사용자들의 사용
//허가여부를 지정한다.
# Turn on logging to /var/log/xferlog
log transfers anonymous,guest,real inbound,outbound
// FTP사용자들의 자료전송과정을 /var/log/xferlog'에 기록하도록 하는 설정이다. 현재 설정의
//예는 'anonymous,guest,real 사용자들의 inbound(서버안으로 파일을 전송하는 것), outbound
//(서버에서 밖으로 파일이 전송되는 것)를 기록한다.
# If /etc/shutmsg exists, don't allow logins
# see ftpshut man page
shutdown /etc/shutmsg // shutdown 명령뒤에 있는 해당파일이 존재하면 ftp접속허가를
//불허하고 그 안의 메시지를 보여준다. 참고로 이 메시지는
//realuser로 등록된 사용자에 한하여 적용된다.
# Ask users to use their email address as anonymous
# password
passwd-check rfc822 warn // 익명사용자에 대한 패스워드 점검 방법을 지정한다.
6. Wu-ftp서버 환경 응용예
(1) root사용자 허가하기
1) /etc/ftpusers 에서 root 계정을 삭제하거나 주석처리한다.
2) /etc/ftpaccess에서 allow-uid 및 allow-gid로 root계정을 설정한다.
예) allow-uid root
allow-gid root
=> 다른 계정사용자를 추가로 지정하려면 한 칸 띄우고 계정명을 입력한다.
예)
allow-uid ftp root
allow-gid ftp root
3) xinetd 데몬을 재시작한다.
service xinetd restart
(2) 일반사용자를 실제사용자로 인식시키기
1) 설명: wu-ftp의 기본 설정은 모든 사용자를 guest로 유저로 본다. 즉, 자기 계정으로 접속한다
고 하더라도 자기 홈디렉토리가 '/'로 인식한다. 특정한 사용자를 실제사용자로 인식시키
면 자기가 실제 접속한 디렉토리로 확인가능하고 상위의 디렉토리로 이동이 가능하다.
2) 방법: /etc/ftpaccess 파일항목에서 realuser라는 부분이 주석처리 되어 있는데, 주석처리를
없애고, 사용할 계정을 적는다.
ㄱ. vi /etc/ftpaccess 파일을 연다.
ㄴ. 'realuser 계정명' 을 적는다.
예) realuser posein
ㄷ. xinetd 데몬을 재가동한다.
(3) /etc/ftpaccess의 class 사용예
1) class all anonymous *
=> 모든사이트(*)에서 접속하는 모든 사용자는 all이라는 클래스로 정의되어 익명으로 접속할
수 있다.
2) class member real 203.247.xxx.100 203.247.xxx.101 210.184.xxx.241
=> 203.247.xxx.100 203.247.xxx.101 210.184.xxx.241라는 네트워크 주소로 접속하는 사용자
들은 member라는 클래스로 정의되고, 모든 실제 계정으로만 접속가능하고, anonymous접속
및 guest접속은 허가하지 않는다.
3) class member real,anonymous *
=> 모든 사이트로부터 접속하는 사용자들은 member라는 클래스로 정의되고, 계정접속을 시도
하면 계정으로 접속을 처리하고, 계정이 없으면 익명 접속으로 처리한다.
(4) /etc/ftpaccess의 readme 사용예
1) 기본설정예
readme README* login
readme README* cwd=*
=> 현재 기본 설정상태이다. 이 상태에서 개인 홈디렉토리에 README파일을 생성해보자.
(접속예) Please read the file README
it was last modified on Tue Feb 18 00:47:20 2003 - 0 days ago
2) 응용예
readme /home/posein/README login
readme /home/posein/pds/README cwd=*
=> /home/posein이라는 디렉토리로 접속했을 때 README파일이 존재하면 존재한다는 메시지를
보여주고 또한 /home/posein/pds 디렉토리로 이동시 README파일이 존재하면 존재한다는 메
시지를 보여준다.
(5) /etc/ftpaccess의 message 사용예
1) 기본설정예
message /welcome.msg login
message .message cwd=*
=> 이 설정상태에서 개인 사용자의 홈디렉토리에 welcome.msg파일을 만들고 안에 메시지글을
작성하면 로그인시에 보이고, 또한 특정디렉토리에서 .message라는 파일을 생성하고 그 파일
안에 메시지글을 작성하면 디렉토리 이동시에 글이 보인다.
2) Magic Cookies
ㄱ. 설명: 메시지파일 작성시에 지원하는 특별한 형태의 값이다. 다른 FTP서버 프로그램인 Pro-
FTP도 같이 지원한다.
ㄴ. 종류
%T : 현재 시간을 출력한다.
%F : 사용가능한 하드 디스크 공간을 출력한다. (모든 시스템을 지원하지는 않는다.)
%C : 현재 작업 디렉토리를 출력한다.
%R : 원격 호스트 이름을 출력한다.
%L : 로컬 호스트 이름을 출력한다.
%u : ident프로토콜에 의해 확인된 사용자명을 출력한다.
%U : 로그인시 사용된 사용자명을 출력한다.
%M : 접속 가능한 최대 사용자수를 출력한다.
%N : 현재 접속되어 있는 사용자수를 출력한다.
%E : 서버 관리자의 메일 주소를 출력한다.
%x : 사용자 클래스의 이름을 출력한다.
%y : 사용자 클래스의 현재 접속 개수를 출력한다.
%z : 사용자 클래스의 최대 접속 개수를 출력한다.
ㄷ. 설정예
--------------------------------------------------------------
환영합니다.
마이베스트 입니다.
- 시스템 정보 -
현재 당신이 접속한 서버는 %L입니다.
현재 접속자수는 %N / %M 입니다. (현재인원/총접속가능한 인원)
당신은 %R에서 %U라는 사용자명으로 접속하였습니다.
현재시각은 %T 입니다.
문의하실 사항은 %E로 보내주세요.
ㄹ. 접속 결과
--------------------------------------------------------------
환영합니다.
마이베스트 입니다.
- 시스템 정보 -
현재 당신이 접속한 서버는 mybestone.com입니다.
현재 접속자수는 1 / 10 입니다. (현재인원/총접속가능한 인원)
당신은 203.247.40.248에서 movie라는 사용자명으로 접속하였습니다.
현재시각은 Thu Oct 10 03:06:36 2002 입니다.
문의하실 사항은 root@mybestone.com로 보내주세요.
(6) /etc/ftpaccess의 shutdown 사용예
1) 기본설정예
shutdown /etc/shutmsg
=> /etc/shutmsg 파일을 생성하여 설정하면 된다.
2) 메시지파일 : 전달메시지부분에 magic cookies를 사용할 수 있다.
ㄱ. 기본형식
year month day hour minute deny_offset disc_offset
text
=> (설명)
year: 1970년이후의 값을 적는다.
month: 0 ~ 11로 표시한다. 주의할 점은 0이 1월이라는 것이다.
day: 날짜를 입력한다.
hour: 0 ~ 23의 값을 입력한다.
minute:0 ~ 59의 값을 입력한다.
deny_offset: 셧다운 되기 전에 새로운 접속을 거부할 시간을 지정한다. HHMM이 기본형
식이다.
disc_offset: 현재 접속중인 연결을 끊을 시간을 지정한다. HHMM이 기본형식이다.
text: 사용자에게 보여줄 메시지를 기록한다. magic cookies의 사용이 가능하다.
ㄴ. magic cookies
%s : 셧다운이 될 시간
%r : 새로운 접속을 거부할 시간
%d : 현재 연결을 차단할 시간
ㄷ. 사용예
2003 01 19 17 30 0100 0001
System will be shutdown at 17:30. You connection will connected at %d
=> 2003년 2월 19일 오후 5시 30분에 FTP서버를 종료할 것이고, 새로운 접속자는 종료시간
1시간 이전부터 접속이 금지되며, 현재 연결된 사용자는 종료 1분전에 차단된다는 메시지
가 보여진다.
(7) /etc/ftpaccess의 passwd-check 사용예
1) 기본형식
passwd-check 조건 action
2) 조건
none : anonymous접속자들의 패스워드 체크를 하지 않는다.
trivial : 패스워드에 @(at)문자가 포함되어 있는지만 체크한다.
rfc822 : rtc822에 정의한 내용대로 체크한다. rfc822설정은 정확한 이메일을 기입하라는 뜻이
라고 생각하면 된다.
3) action
warn : 접속자가 '조건'을 지키지 않았을 때 경고메시지를 보내고 접속은 허가한다.
enforce: 접속자가 '조건'을 지키지 않았을 때 접속을 허가하지 않는다.
4) 기본설정예
passwd-check rfc822 warn
=> rfc822와 일치하는 지를 검사하고 warn 수준으로 처리한다.
5) 응용예
passwd-check rfc822 enforce
=> 틀린 이메일주소를 입력하면 접속이 허가되지 않는다.
7. /etc/ftphosts
(1) 설명: 이 파일은 특정호스트 및 특정 사용자의 접속을 허가할 것인지 거부할 것인지를 지정하는
파일이다.
(2) 기본형식
allow 사용자계정 주소
deny 사용자계정 주소
(3) 사용예
ㄱ. allow * *
=> 모든 호스트의 모든 사용자를 허가한다.
ㄴ. deny * 203.247.100.*
=> 203.247.100.0 네트워크대역을 갖는 모든 사용자의 접속을 거부한다.
8. Wu-FTP관련 명령어
(1) ftpcount
1) 설명: ftp서버를 이용하고 있는 사용자 수를 보여주는 명령이다.
2) 사용법
ftpcount
3) 사용예
[root@www root]# ftpcount
Service class all - 1 users (no maximum)
(2) ftpwho
1) 설명: ftpcount와 유사한 명령으로 서버에 접속한 사용자 정보를 보여준다.
2) 사용법
ftpwho
3) 사용예
[root@www root]# ftpwho
Service class all:
18847 ? S 0:00 ftpd: 203.247.40.247: posein: IDLE
- 1 users (no maximum)
(3) ftpshut
1) 설명: ftp서버를 셧다운 시킬 때 사용하는 명령이다.
2) 사용법
ftpshut [options] time [warning-message]
3) options
-l 분 : 새로운 접근을 거부할 시간을 정한다.
-d 분 : 현재접속중인 접근을 끊을 시간을 정한다.
4) time: ftp서버를 다운시킬 시간을 말한다.
now : 즉시 shutdown시킨다.
+number : 분(number값)으로 셧다운 시간을 지정한다.
HHMM : 24시간형식으로 셧다운 시간을 지정한다.
5) warning-message : 경고메시지를 적는다. 75문자의 길이 형식을 취한다. magic cookies의 사용
이 가능하다.
6) 사용예
ftpshut now
=> 지금 즉시 ftp서버를 중지시킨다.
7) 참고
ftpshut 명령을 사용하여 셧다운이 되면 /etc/shutmsg파일이 생성된다. 따라서, 계속적으로 ftp
서버로의 접속이 불가능해지므로 이 파일을 삭제해야 한다.