- FTP (File Transfer Protocol) 파일 전송 프로토콜
-Anonymous FTP (anonymous File Transfer Protocol) ; 익명 FTP
인터넷에서 FTP를 사용할 때 anonymous FTP는 사용자들이 서버에 자신을 식별시키지 않고서도 파일에 접근할 수 있는 방법을 제공한다.Anonymous FTP 서버에 접속한 뒤 사용자 아이디로 "anonymous" 라고 입력하고, 패스워드에는 자신의 이메일 주소를 입력하면 로그인이 허용된다 (이때, 패스워드를 넣지 않거나 어떤 내용을 넣더라도 로그인 하는데 문제가 없지만, 대개 자신의 이메일 주소를 쳐 넣는 것이 통신상의 예의로 되어있다).
- FTP 프로그램의 종류
- vsFTP ( Very Secure FTP )
|
파일종류 |
설명 |
|
|
|
/etc/vsftpd/vsftp.conf |
vsftp 프로그램의 주 설정 파일 |
|
|
|
/etc/vsftpd/ftpusers |
vsftpd 서버에 접속할 수 없는 사용자 정의 |
|
|
|
/etc/vsftpd/user_list |
vsftpd 서버에 접속할 수 없는 사용자 정의 |
|
|
|
/var/ftp |
Anonymous FTP 사용자를 위한 디렉토리 |
|
|
/etc/vsftp/ftpusers 와 /etc/vsftpd/user_list 둘중 한곳이라도 적힌 사용자는 접속할 수 없다.
- /etc/vsftpd/vsftp.conf 파일 분석
1 # Example config file /etc/vsftpd/vsftpd.conf 2 # 3 # The default compiled in settings are fairly paranoid. This sample file 4 # loosens things up a bit, to make the ftp daemon more usable. 5 # Please see vsftpd.conf.5 for all compiled in defaults. 6 # 7 # READ THIS: This example file is NOT an exhaustive list of vsftpd options. 8 # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's 9 # capabilities. 10 # 11 # Allow anonymous FTP? (Beware - allowed by default if you comment this out). 12 13 anonymous_enable=YES /* 익명 사용자의 접속을 가능하게 설정한다. */ 14 #anonymous_enable=NO 15 16 # 17 # Uncomment this to allow local users to log in. 18 local_enable=YES /* 로컬 사용자의 접속을 가능하게 설정한다. */ 19 #local_enable=NO 20 # 21 # Uncomment this to enable any form of FTP write command. 22 write_enable=YES /* 로컬 사용자의 쓰기 기능을 가능하게 설정한다. */ 23 # 24 # Default umask for local users is 077. You may wish to change this to 022, 25 # if your users expect that (022 is used by most other ftpd's) 26 local_umask=022 /* 로컬 사용자의 파일 생성시 적용될 umask 값을 설정한다. */ 27 # 28 # Uncomment this to allow the anonymous FTP user to upload files. This only 29 # has an effect if the above global write enable is activated. Also, you will 30 # obviously need to create a directory writable by the FTP user. 31 #anon_upload_enable=YES /* 익명 사용자의 파일 업로드를 가능하게 설정한다. */ 32 33 anon_upload_enable=YES 34 35 # 36 # Uncomment this if you want the anonymous FTP user to be able to create 37 # new directories. 38 #anon_mkdir_write_enable=YES /* 익명 사용자의 디렉토리 생성을 가능하게 설정한다. */ 39 40 anon_mkdir_write_enable=YES 41 42 # 43 # Activate directory messages - messages given to remote users when they 44 # go into a certain directory. 45 dirmessage_enable=YES /* 특정 폴더에 접속시 .message 파일의 메시지를 보여줄 것인지를 지정 하는 설정이다. */ 46 # 47 # Activate logging of uploads/downloads. 48 xferlog_enable=YES /* 업로드/다운로드 로그를 xferlog에 기록하겠다는 설정이다. */ 49 # 50 # Make sure PORT transfer connections originate from port 20 (ftp-data). 51 connect_from_port_20=YES /* ftp 데이터 전송시 20번 포트 사용을 설정한다. */ 52 # 53 # If you want, you can arrange for uploaded anonymous files to be owned by 54 # a different user. Note! Using "root" for uploaded files is not 55 # recommended! 56 #chown_uploads=YES /* 익명 사용자가 업로드한 파일의 소유권을 변경할 때 설정한다. */ 57 #chown_username=whoever /* chown_uploads=YES일 경우 지정한 사용자 이름으로 익명 사용자가 업로드한 파일의 소유자가 지정된다. */ 58 # 59 # You may override where the log file goes if you like. The default is shown 60 # below. 61 #xferlog_file=/var/log/vsftpd.log /* 업로드/다운로드 로그파일을 지정한다. */ 62 # 63 # If you want, you can have your log file in standard ftpd xferlog format 64 xferlog_std_format=YES /* xferlog를 표준 로그포맷으로 기록한다. */ 65 # 66 # You may change the default value for timing out an idle session. 67 #idle_session_timeout=600 /* ftp접속의 타임아웃시간을 지정한다. (단위: 초) */ 68 # 69 # You may change the default value for timing out a data connection. 70 #data_connection_timeout=120 /* 데이터 전송의 타임아웃시간을 지정한다. (단위: 초) */ 71 # 72 # It is recommended that you define on your system a unique user which the 73 # ftp server can use as a totally isolated and unprivileged user. 74 #nopriv_user=ftpsecure /* vsftpd 데몬을 루트가 아닌 시스템에 존재하는 일반 사용자의 비특권 권한으로 동작시킨다. */ 75 # 76 # Enable this and the server will recognise asynchronous ABOR requests. Not 77 # recommended for security (the code is non-trivial). Not enabling it, 78 # however, may confuse older FTP clients. 79 #async_abor_enable=YES /* async_abor_enables 기능을 사용하겠다는 설정이다. */ 80 # 81 # By default the server will pretend to allow ASCII mode but in fact ignore 82 # the request. Turn on the below options to have the server actually do ASCII 83 # mangling on files when in ASCII mode. 84 # Beware that on some FTP servers, ASCII support allows a denial of service 85 # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd 86 # predicted this attack and has always been safe, reporting the size of the 87 # raw file. 88 # ASCII mangling is a horrible feature of the protocol. 89 #ascii_upload_enable=YES /* ASCII 모드로 업로드를 허락하겠다는 설정이다. */ 90 #ascii_download_enable=YES /* ASCII 모드로 다운로드를 허락하겠다는 설정이다. */ 91 # 92 # You may fully customise the login banner string: 93 #ftpd_banner=Welcome to blah FTP service. /* ftp 서버 접속시 안내메세지를 출력한다. */ 94 # 95 # You may specify a file of disallowed anonymous e-mail addresses. Apparently 96 # useful for combatting certain DoS attacks. 97 #deny_email_enable=YES /* 익명사용자 접속시 패스워드를 e-mail형식으로 받겠다는 설정이다. */ 98 # (default follows) 99 #banned_email_file=/etc/vsftpd/banned_emails /* 허용하지 않을 e-mail 주소를 파일에 넣어두면 접 속이 안된다. (banned_emails파일 생성시) */ 100 # 101 # You may specify an explicit list of local users to chroot() to their home 102 # directory. If chroot_local_user is YES, then this list becomes a list of 103 # users to NOT chroot(). 104 105 chroot_local_user=YES /* 전체 사용자가 chroot 기능을 사용하도록 설정한다. */ 106 107 #chroot_list_enable=YES /* chroot_list에 등록된 사용자만 chroot 기능을 사용하도록 설정한다. */ 108 # (default follows) 109 #chroot_list_file=/etc/vsftpd/chroot_list /* chroot 기능을 사용할 사용자 리스트 파일을 지정한다. */ 110 # 111 # You may activate the "-R" option to the builtin ls. This is disabled by 112 # default to avoid remote users being able to cause excessive I/O on large 113 # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume 114 # the presence of the "-R" option, so there is a strong case for enabling it. 115 #ls_recurse_enable=YES /* ls -R(서브디렉토리 파일 목록 출력) 명령 사용여부를 설정한다. */ 116 # 117 # When "listen" directive is enabled, vsftpd runs in standalone mode and 118 # listens on IPv4 sockets. This directive cannot be used in conjunction 119 # with the listen_ipv6 directive. 120 listen=YES /* 단독 데몬일 경우 listen 을 YES로 지정한다. */ 121 # listen=NO /* xinetd 로 설정할 경우 NO로 지정한다. */ 122 # 123 # This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6 124 # sockets, you must run two copies of vsftpd whith two configuration files. 125 # Make sure, that one of the listen options is commented !! 126 #listen_ipv6=YES 127 128 pam_service_name=vsftpd /* pam 사용자 인증 설정 */ 129 userlist_enable=YES /* userlist 사용을 허가하겠다는 설정이다. */ 130 # userlist_deny=NO /* userlist 에 등록된 사용자만 허가하겠다는 설정이다. */ 131 tcp_wrappers=YES /* tcp_wrappers 기능을 사용하겠다는 설정이다. (host, ip 차단) */ |
- gftp 툴 사용
- ftp 명령어 사용
[설정]
/etc/vsftpd/user_list 와 /etc/vsftp/ftpusers 에 root를 지워 root 접속을 허용한다. ( 보안상 좋지 않지만 실습을 위해 )
FTP Server 192.168.17.220 FTP Client 192.168.17.120
각 서버에 ftp 서비스 실행 ( # service vsftpd restart )
[작업순서]
1. 업로드 / 다운로드 포인터 맞추기
2. 편리한 기능 설정
3. 업로드 / 다운로드
4. 확인 / 해제
- Upload
Client
# cd /test
# cp /etc/passwd ftptest
# ftp 192.168.17.220 /* 220 서버에 접속 */
- vsFTP 서버 설정
|
.........중략........... banner_file=/etc/vsftpd/banner.txt |
|
-> 마지막 줄에 추가한다.
-> 배너파일을 /etc/vsftpd/banner.txt 로 설정한다. banner.txt는 새로 만들어야 한다.
# vi /etc/vsftpd/banner.txt / * 예시 파일 */
|
==== Welcome to FTP.EXAMPLE.COM ==== 1. Site Goal FTP(vsftpd) Program Test FTP 2. Site Function (1). FTP for Real User (2). FTP for Anonymous User 3. Warnning - 이 사이트를 해킹하면 모종의 그룹에 의해 보복 공격이 가해질것입니다. - 이 사이트에서 얻은 지식을 악의적인 목적으로 절대 사용하지 않을 것을 약속하여야 합니다. |
+====================================================+ | | Welcome to linux220.example.com | | | This is the linux220.example.com test server. | | If you have not already done so, make sure | you have read the Downloading/Installation, | FAQ, and Disclaimer links on | http://www.solaris254.example.com. | | This is a restricted access system. All | tranfers are logged. If you disagree | with this practice, log off now. | | Questions go to SeoungChan Baik at | the address given on linux220.example.com | | +====================================================+ |
|
-> 한글 내용 깨져서 나오면 언어 변경 ( # export LANG=ko_KR.UTF-8)
# service vsftpd restart
# ftp localhost
|
Connected to linux.example.com. 220-+====================================================+ 220-| 220-| Welcome to linux220.example.com 220-| 220-| 220-| This is the linux220.example.com test server. 220-| 220-| If you have not already done so, make sure 220-| you have read the Downloading/Installation, 220-| FAQ, and Disclaimer links on 220-| http://www.solaris254.example.com. 220-| 220-| This is a restricted access system. All 220-| tranfers are logged. If you disagree 220-| with this practice, log off now. 220-| 220-| Questions go to SeoungChan Baik at 220-| the address given on linux220.example.com 220-| 220-| 220-+====================================================+ 220 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type |
|
- (보안 설정) Greeting Message 출력
|
....중략.... # You may fully customise the login banner string: ftpd_banner=Welcome to blah FTP service. ....중략.... |
|
-> 주석 제거
# service vsftpd restart
# ftp localhost
|
Connected to linux.example.com. 220 Welcome to blah FTP service. 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (localhost:root): |
|
-> banner_file /etc/vsftpd/banner.txt 는 주석 처리 합니다.
-> banner_file 또는 greeting 메시지를 설정하지 않으면 ftp 버전 정보가 노출되니 둘중 하나는 해놓는 것이 보안상 좋다.
-> 두개의 설정이 모두 설정 되어있으면 banner_file에 저장된 정보가 출력된다.
- (보안 설정) chroot 구성
# vi /etc/vsftpd/vsftp.conf
|
.....중략...... chroot_local_user=YES |
|
-> 마지막 줄에 추가
# service vsftpd restart
# ftp localhost
-> 일반 유저로 서버에 접속하면 그 유저의 홈디렉토리 이상으로 이동할 수 없다. ( ftp > cd /etc -> 안됨 )
-> 이 설정은 root 사용자에게도 적용이 된다.
- (보안 설정) 익명사용자의 FTP
vsFTP 프로그램이 설치 되어 있으면 기본적으로 익명사용자 FTP가 구성되어 있다.
익명 FTP 서버는 보통 다운로드는 가능하지만 업로드는 가능하지 않다.
익명 FTP 서버에서 익명 사용자가 파일을 업로드 할 수 있도록 설정하기 위해서는 vsftpd.conf 파일에 설정에 다음과 같은 설정이 필요하다
# cat /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
.....
anon_mkdir_write_enable=YES
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
-> 보안상 권장하지 않는다.
# cd /var/ftp/pub /* 익명사용자의 홈디렉토리 */
# touch test
# ftp localhost
id : anonymous passwd : 자신의 이메일
ftp > dir
ftp > cd /etc
-> 익명 사용자는 chroot 구성이 되어있다.
[참고] 익명 사용자의 업로드 퍼미션 설정
# cd /var/ftp/pub
# mkdir incoming
# chmod 603 incoming
( -rw-----wx root root )
# useradd -d /var/ftp/pub/incoming -r -s /sbin/nologin ftpupload
-> incoming 이 홈 디렉토리 파일이고 로그인 하지 않는 사용자 생성
# vi /etc/vsftpd/vsftp.conf
|
..... (중략) ..... anon_upload_enable=YES ..... (중략) ..... chown_uploads=YES chown_username=ftpupload ..... (중략) ..... |
|
# service vsftpd restart
# ftp localhost
ftpupload 사용자로 로그인
ftp > ls /* 확인 안됨 */
ftp > cd pub/incoming
ftp > put /* 업로드는 잘됨 */
(local-file) /etc/passwd /* 로컬에 있는 파일 선택 */
(remote-file) passwd /* ftp 서버에 올릴 파일 이름 */
ftp > quit
# ls /var/ftp/pub/incoming /* passwd 파일이 있는것을 확인 할 수 있다. */
- (보안 설정) FTP 포트 변경
-> 포트를 아는 사람들만 그 서버에 접속할 수 있도록 설정하기 위한 방법이다. 외부에서는 접속을 하지 못하고 포트번호를 아는 회사나 그룹 내에서 정해진 사람들만 접속 할 수 있다.
-> 기본 21
# vi /etc/vsftpd/vsftpd.conf
|
....중략.... listen_port=2121 |
|
# service vsftpd restart
# ftp localhost
-> 접속안됨 ( 숫자를 안쓰면 기본 값인 21 )
# ftp localhost 2121
- (관리 설정) MAX client 제한
-> 서버에 들어올 수 있는 사용자의 수를 제한한다. 너무 많은 사람들이 접속하면 서버가 느려질 수 있다. 그럼 그 누구도 사용하지 못할 수 있다.
-> 서버가 감당할 수 있는 사람의 수를 정해 사람들이 할 일을 하고 나가면 다른 사람들이 사용할 수 있게 하는 것이 좋다.
-> 서버의 환경이 다르므로 사람의 수는 관리자가 적당히 정해야한다.
# vi /etc/vsftpd/vsftpd.conf
|
....중략.... max_clients=3 |
|
-> 마지막 줄에 추가, 최대 3명 접속 가능
# service vsftpd restart
/* 각각 다른 터미널에서 확인 */
# ftp localhost
# ftp localhost
# ftp localhost
# ftp localhost /* 접속 안됨 */ /* root 사용자라도 접속 안된다 */
|
.....중략..... max_per_id=3 |
|
-> 마지막 줄에 추가
-> 값은 2/3/4 값정도를 사용하는 것을 권장한다.
# service vsftp restart
/* 각 터미널에서 확인 */
# ftp localhost
# ftp localhost
# ftp localhost
# ftp localhost /* 접속 안됨 */ /* root 사용자라도 접속 안된다. */
[참고] 파일 이름을 정확이 알아야만 다운 받을 수 있도록 설정
디렉토리의 퍼미션을 751로 설정한다. other 권한에 r 권한이 없으면 디렉토리의 파일 목록을 볼수 없기 때문에 다운로드를 할때 mget 명령어를 사용할 수 없다. 즉 파일의 정확한 이름을 알고 있는 사용자만 파일을 다운받을 수 있게 된다.
- xferlog 파일 분석
Mon Apr 14 03:40:45 2014 1 127.0.0.1 2084 /test/file1 b _ o r root ftp 0 * c | |
Mon Apr 14 03:40:45 2014 | 전송 날짜 및 시간(2014년 4월14일 월요일 03시40분 45초) |
1 | 전송 소요 시간(1초) |
127.0.0.1 | 원격호스트 주소(127.0.0.1) |
2084 | 전송 파일 크기(2084 bytes) |
/test/file1 | 전송 파일명(/test/file1) |
b
| 전송 파일 종류(Transfer mode) : binary mode a : ascii b : binary |
_
| 액션 플래그/FTP 서비스내 적용 내용: 액션 없음 _ : 아무 액션 없음 C : 압축 파일 U : 압축되지 않은 파일 T : tar로 묶여 있는 파일 |
o | 전송 방향(Direction) i : incoming(파일을 업로드) o : outgoing(파일을 다운로드) d : delete(파일을 서버에서 삭제) |
r | 사용자 파일 접근 방식 r : real(인증된 사용자) a : anonymous(익명사용자) |
root | 로그인 사용자명(root) |
ftp | 서비스명 |
0 | 사용자 인증 방법(0 : 없음) |
* | 인증 사용자 ID(Authentication User ID) : 인증 방법에 의해 되돌려 지는 User ID * 표시는 인증된 사용자 ID를 사용할 수 없다는 의미이다. |
c | 파일 전송 상태: c : complete(전송완료) i : incomplete(전송 실패) |
Sep 12 16:04:45 linux220 vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=root rhost=localhost.localdomain user=root | |
Sep 12 16:04:45 | 로그 기록 시간 9월 12일 16시 04분 45초 |
linux220 | 로그가 생성된 서버 |
vsftpd | 로그를 생성한 주체 |
pam_unix ...... | 로그 메시지 |
'Linux > Linux Network' 카테고리의 다른 글
Web Mail Server (0) | 2017.09.13 |
---|---|
MAIL Server (0) | 2017.09.13 |
WEB Server ( Apache ) (0) | 2017.09.11 |
DNS_2 ( Master DNS / Slave DNS ) (0) | 2017.09.11 |
DNS_1 ( 도메인 부하분산, 도메인 위임 ) (0) | 2017.09.08 |