서버/Linux III 2016. 3. 16. 10:46

Linux III - 07. FTP 서버

 

 

 

login as: root
root@192.168.1.100's password:
Last login: Tue Mar 15 14:40:21 2016 from 192.168.1.1
[root@main /root]#

login as: root
root@192.168.1.101's password:
Last login: Tue Mar 15 14:40:33 2016 from 192.168.1.1

[root@clone1 /root]#

 

login as: root
root@192.168.1.102's password:
Last login: Tue Mar 15 14:42:37 2016 from 192.168.1.1
[root@clone2 /root]#

 

 - main 서버에서 SELinux를 비활성화하고, 재부팅을 실시한다.

 

[root@main /root]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

 

 

[root@main /root]# vi /etc/selinux/config

 

  1 # This file controls the state of SELinux on the system.
  2 # SELINUX= can take one of these three values:
  3 #     enforcing - SELinux security policy is enforced.
  4 #     permissive - SELinux prints warnings instead of enforcing.
  5 #     disabled - No SELinux policy is loaded.
  6 SELINUX=enforcing <- disabled 수정
  7 # SELINUXTYPE= can take one of these two values:
  8 #     targeted - Targeted processes are protected,
  9 #     mls - Multi Level Security protection.
 10 SELINUXTYPE=targeted

 

: wq!

 

 

[root@main /root]# reboot

 

 

 - 재부팅이 완료되었다면, 재접속을 실시하여 SELinux 비활성화 상태를 확인한다.

 

login as: root
root@192.168.1.100's password:
Last login: Wed Mar 16 10:44:30 2016 from 192.168.1.1
[root@main /root]#
[root@main /root]# sestatus
SELinux status:                 disabled


[root@main /root]#

 

 

 

 

1. FTP 서버 유형

 

 vsftpd

  가장 널리 사용하는 FTP 서버이며, 보안성이 우수하다.

 proftpd

  다양한 옵션과 설정들이 지원되지만, 다른 FTP 서버에 비해서 설정 문법이 복잡하다.

 pureftpd

  잘 사용하지 않는 FTP 서버이며, 간단하게 FTP 서버를 운영할 경우 사용한다.

 

 

 

 

2. FTP 동작 모드

 

 Passive Mode(수동)

 

  - FTP 연결 및 메세지 교환은 21번 포트를 이용한다.

  - 파일 및 디렉토리 목록 전송은 임의의 포트를 이용한다.

  - 클라이언트가 서버쪽으로 TCP 연결를 실시한다.

 

  1. 서버가 클라이언트에게 포트 번호(Ex : 50901)을 알려준다.

  2. 클라이언트는 출발지 X번, 목적지 50901로 TCP 연결을 실시한다.

  3. 서버는 출발지 50901번, 목적지 X번으로 데이터를 전송한다.

 

 Active Mode(능동)

 

  - FTP 연결 및 메세지 교환은 21번 포트를 이용한다.

  - 파일 및 디렉토리 목록 전송은 20번 포트를 이용한다.

  - 서버가 클라이언트쪽으로 TCP 연결을 실시한다.

   

  1. 클라이언트가 서버에게 포트 번호(Ex : 1503)를 알려준다.

  2. 서버는 출발지 20번, 목적지 1503으로 TCP 연결을 실시한다.

  3. 서버는 출발지 20번, 목적지 1503번으로 데이터를 전송한다.

 

 

@FTP(Passive Mode-수동 모드) 캡처 내용.pcap

@FTP(Active Mode-능동 모드) 캡처 내용.pcap

 

 

[참고] 서버측 방화벽 구성

 

@ Passive mode

 

서버측 방화벽에서는 Passive 포트 번호 범위를 허용해야한다.

 

[root@main /root]# vi /etc/vsftpd/vsftpd.conf

 

pasv_enable = YES
pasv_min_port = 50000
Pasv_max_port = 51000 

 

:wq!



[root@main /root]# iptables -A INPUT -p tcp --dport 50000:51000 -j ACCEPT

 

@ Active mode

 

서버측 방화벽에서 포트 번호 21, 20번이 허용되어야 한다.

 

[root@main /root]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

[root@main /root]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

 

 

 

3. vsftpd 서버(Very Secure FTP Daemon)

 

 - 안정적이고 속도가 빠르며, 보안이 우수하다. 그리고 레드헷 리눅스에서 기본으로 채택하는 FTP 서버이다.

 - 기본적으로 Standalone 방식으로 동작한다.

 

[root@main /root]# service vsftpd stop

vsftpd 종료 중:                                                 [  OK  ]

 

[root@main /root]# service vsftpd start
vsftpd
에 대한 vsftpd을 시작 중:                            [  OK  ]

 


[root@main /root]# rpm -qa | grep vsftpd
vsftpd-2.2.2-14.el6.x86_64

 


[root@main /root]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/rc.d/init.d/vsftpd
/etc/vsftpd  

/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf  <- vsftpd 설정 파일
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-2.2.2
~ 중간 생략 ~

 

 

[root@main /root]# ls /etc/init.d/vsftpd
/etc/init.d/vsftpd   <- Standalone 방식이기 때문에 '/etc/init.d'에 스크립트 파일이 있음

 

 

[root@main /root]# pgrep -fl vsftpd
2176 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf


 

 

 

4. 'vsftpd.conf' 설정 파일

 

 - 'vsftpd.conf' 설정 파일은 '/etc/vsftpd' 디렉토리에서 관리한다. 설정 파일을 알아보기 이전에 백업을 실시한다.

 

[root@main /root]# cd /etc/vsftpd
[root@main /etc/vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

 

 

[root@main /etc/vsftpd]#
[root@main /etc/vsftpd]# cp vsftpd.conf vsftpd.conf.bak


[root@main /etc/vsftpd]# vi vsftpd.conf

[root@main /etc/vsftpd]# cat vsftpd.conf


# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES   <- 익명 사용자 접속 가능
#
# Uncomment this to allow local users to log in.
local_enable=YES   <- 로컬 사용자 접속 가능
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES   <- 로컬 사용자 쓰기 기능 가능
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022   <- 로컬 사용자 파일 생성시 적용될 umask 값
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES   <- 익명 사용자 파일 업로드 가능, 현재 주석 처리라 안됨
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES   <- 익명 사용자 디렉토리 생성 가능, 현재 주석 처리라 안됨
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES   <- 특정 폴더 접속시 .message 파일의 메세지를 보여줌
#
# The target log file can be vsftpd_log_file or xferlog_file.
# This depends on setting xferlog_std_format parameter
xferlog_enable=YES   <- 업로드 및 다운로드 로그를 xferlog에 기록함
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES   <- FTP 파일 전송시 20번 포트를 사용함
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES   <- 익명 사용자가 업로드한 파일의 소유권을 변경할 수 있음, 주석 처리라 안됨
#chown_username=whoever   <- 익명 사용자가 업로드한 파일의 소유자가 사용자 이름으로 지정됨, 주석 처리라 안됨
#
# The name of log file when xferlog_enable=YES and xferlog_std_format=YES
# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
#xferlog_file=/var/log/xferlog   <- 업로드 및 다운로드 로그 파일을 지정함, 주석 처리라 안됨
#
# Switches between logging into vsftpd_log_file and xferlog_file files.
# NO writes to vsftpd_log_file, YES to xferlog_file
xferlog_std_format=YES   <- xferlod를 표준 로그 포맷으로 기록함
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600   <- FTP 접속 타임 아웃 시간을 지정함, 주석 처리라 안됨
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120   <- 파일 전송 타임 아웃 시간을 지정함, 주석 처리라 안됨
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure   <- vsftpd 데몬을 root가 아닌 다른 사용자의 비특권 권한으로 동작함, 주석 처리라 안됨
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES   <- ABOR 기능(현재 전송중인 파일 전송 중단) 사용함, 주석 처리라 안됨
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES   <- ASCII 모드로 업로드를 허용함, 주석 처리라 안됨
#ascii_download_enable=YES   <- ACSII 모드로 다운로드를 허용함, 주석 처리라 안됨
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.   <- FTP 서버 접속시 안내 메세지를 출력함, 주석 처리라 안됨
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES   <- 익명 사용자 접속시 패스워드를 E-Mail 형식으로 입력 받음, 주석 처리라 안됨
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails  <- 허용하지 않은 E-Mail 주소를 파일에 넣어두면 접속 안됨주석 처리라 안됨
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_local_user=YES   <- 전체 사용자가 chroot 기능을 사용하도록 함주석 처리라 안됨
#chroot_list_enable=YES   <- chroot_list에 등록된 사용자만 chroot 기능을 사용함주석 처리라 안됨
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list   <- chroot 기능을 사용할 사용자 리스트 파일을 저장함주석 처리라 안됨
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES   <- ls -R 명령어 사용할 수 있음주석 처리라 안됨
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES   <- 단일 데몬으로 지정함, 만약, xinetd 방식으로 할경우 'NO'로 설정함
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd with two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES

pam_service_name=vsftpd   <- pam 사용자 인증 설정
userlist_enable=YES   <- userlist 사용을 허가함

# userlist_deny=NO <- userlist에 등록된 사용자만 허가함
tcp_wrappers=YES   <- tcp_wrappers 기능을 사용하여 특정 호스트, IP를 차단함


 

 

 

5. vsftpd 서버 운영 방법

 

 1) 배너 설정

 

 - vi 편집기를 이용하여 배너로 사용할 내용을 생성한다.

 

배너(소).txt

 

 

[root@main /etc/vsftpd]# vi banner.txt 

 

  1                  _---------.
  2              .' #######   ;."
  3   .---,.    ;@             @@`;   .---,..
  4 ." @@@@@'.,'@@            @@@@@',.'@@@@ ".
  5 '-.@@@@@@@@@@@@@          @@@@@@@@@@@@@ @;
  6    `.@@@@@@@@@@@@        @@@@@@@@@@@@@@ .'
  7      "--'.@@@  -.@        @ ,'-   .'--"
  8           ".@' ; @       @ `.  ;'
  9             |@@@@ @@@     @    .
 10              ' @@@ @@   @@    ,
 11               `.@@@@    @@   .
 12                 ',@@     @   ;
 13                  (   3 C    )
 14                  ;@'. __*__,."
 15                   '(.,...."/

: wq! 

 

 

 

 - 'vsftpd' 설정 파일에서 다음과 같은 설정을 맨 마지막 라인에 추가하고, 서비스를 재시작한다.

 

[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

121 banner_file=/etc/vsftpd/banner.txt

 

: wq!

 

 

 

[root@main /etc/vsftpd]# service vsftpd restart
vsftpd 종료 중:                                            [  OK  ]
vsftpd에 대한 vsftpd을 시작 중:                            [  OK  ]

 

 

 - clone1에서 'user1' 계정으로 main FTP 접속 실시

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220-                 _---------.
220-             .' #######   ;."
220-  .---,.    ;@             @@`;   .---,..
220-." @@@@@'.,'@@            @@@@@',.'@@@@ ".
220-'-.@@@@@@@@@@@@@          @@@@@@@@@@@@@ @;
220-   `.@@@@@@@@@@@@        @@@@@@@@@@@@@@ .'
220-     "--'.@@@  -.@        @ ,'-   .'--"
220-          ".@' ; @       @ `.  ;'
220-            |@@@@ @@@     @    .
220-             ' @@@ @@   @@    ,
220-              `.@@@@    @@   .
220-                ',@@     @   ;
220-                 (   3 C    )
220-                 ;@'. __*__,."
220-                  '(.,...."/
220
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - 배너 설정 주석 처리 실시

 

[root@main /etc/vsftpd]# vi vsftpd.conf

 

~ 중간 생략 ~

 

121 # banner_file=/etc/vsftpd/banner.txt

 

: wq!

 

 

 

 

 2) Greeting 메세지 출력

 

 - FTP 데몬 버전을 숨기기 위해서 사용하는 것을 권장한다.

 - 만약, 배너 설정(banner_file)이 있다면, Greeting 메세지 설정은 출력되지 않는다.

 

 

 - clone1에서 'user1' 계정으로 main FTP 서버로 접속을 실시하여, Greeting 메세지 출력 유무를 확인한다.

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 -  'vsftpd' 설정 파일에서 다음과 같은 설정을 맨 마지막 라인에 추가하고, 서비스를 재시작한다.

 

[root@main /etc/vsftpd]# vi vsftpd.conf

 

~ 중간 생략 ~

 

122 ftpd_banner=Welcome to main FTP service.

 

: wq!

 


[root@main /etc/vsftpd]# service vsftpd restart
vsftpd 종료 중:                                            [  OK  ]
vsftpd에 대한 vsftpd을 시작 중:                            [  OK  ]

 

 

 - clone1에서 'user1' 계정으로 main FTP 접속 실시

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 Welcome to main FTP service.
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - Greeting 메세지 출력 설정 주석 처리 실시

 

[root@main /etc/vsftpd]# vi vsftpd.conf

 

~ 중간 생략 ~

 

122 # ftpd_banner=Welcome to main FTP service.

 

: wq!

 

 

 

 

 3) 'chroot' 기능 

 

'chroot'는 특정 디렉토리를 최상위 디렉토리로 보이도록 해주는 기능/명령어이다.

 

Ex) /a/b/c

 

chroot /a/b

 

최상위 디렉토리가 '/c' 로 처리됨, 그렇기 때문에 '/c'의 상위 디렉토리인 '/a', '/a/b' 디렉토리로 접근 불가능

 

 

일반 계정으로 FTP 서버를 접속하면, 다른 디렉토리로 이동이 가능하다. 이때, chroot 기능을 이용하면, 일반 계정으로 접속시 디렉토리가 상위 디렉토리로 처리되기 때문에 다른 디렉토리로 이동이 불가능해진다.

 

 - clone1에서 'user1' 계정으로 main FTP 접속 실시 (chroot 기능이 없는 경우)

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> pwd
257 "/home/user1"
ftp>
ftp> cd /etc/sysconfig
250 Directory successfully changed.
ftp>
ftp> pwd
257 "/etc/sysconfig"
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

-  'vsftpd' 설정 파일에서 다음과 같은 설정을 맨 마지막 라인에 추가하고, 서비스를 재시작한다.

 

[root@main /etc/vsftpd]# vi vsftpd.conf

 

~ 중간 생략 ~

 

123 chroot_local_user=YES

 

: wq!

 

 

[root@main /etc/vsftpd]# service vsftpd restart
vsftpd 종료 중:                                            [  OK  ]
vsftpd에 대한 vsftpd을 시작 중:                            [  OK  ]

 

 

 - clone1에서 'user1' 계정으로 main FTP 접속 실시

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> pwd
257 "/"
ftp>
ftp> cd /etc/sysconfig
550 Failed to change directory.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - 'chroot' 기능 주석 처리 실시

 

[root@main /etc/vsftpd]# vi vsftpd.conf

 

~ 중간 생략 ~

 

123 # chroot_local_user=YES

 

: wq!

 

 

 

 

 4) 'root' 계정 FTP 접속 방법 (보안상 권장 X)

 

 - clone1에서 'root' 계정을 이용하여 main FTP 서버로 접속이 가능한지 확인하도록 한다.

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): root
530 Permission denied.
Login failed.
ftp> quit
221 Goodbye.

 

 

 - 'root' 계정으로 FTP 접속은 기본적으로 불가능하지만, 다음과 같이 사용자 관련 파일을 수정하면 가능하다.

 

[root@main /etc/vsftpd]# ls
banner.txt  ftpusers  user_list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh

 

 

[root@main /etc/vsftpd]# vi ftpusers

  1 # Users that are not allowed to login via ftp
  2 root <- 삭제
  3 bin
  4 daemon
  5 adm
  6 lp
  7 sync
  8 shutdown
  9 halt
 10 mail
 11 news
 12 uucp
 13 operator
 14 games
 15 nobody
 

: wq!

 

 

 

[root@main /etc/vsftpd]# vi user_list

  1 # vsftpd userlist
  2 # If userlist_deny=NO, only allow users in this file
  3 # If userlist_deny=YES (default), never allow users in this file, and
  4 # do not even prompt for a password.
  5 # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
  6 # for users that are denied.
  7 root <- 삭제
  8 bin
  9 daemon
 10 adm
 11 lp
 12 sync
 13 shutdown
 14 halt
 15 mail
 16 news
 17 uucp
 18 operator
 19 games
 20 nobody
 

: wq!

 

 

[root@main /etc/vsftpd]#
[root@main /etc/vsftpd]# service vsftpd restart
vsftpd 종료 중:                                            [  OK  ]
vsftpd에 대한 vsftpd을 시작 중: 

 

 

 - clone1에서 'root' 계정으로 main FTP 접속 실시

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): root
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> pwd
257 "/root"
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 

 

 5) FTP 서버 접속 사용자 제한

 

'userlist_deny=YES'인 경우, 다음과 같이 2개의 파일 중 한개의 파일에도 사용자가 설정되어 있다면 FTP 접속이 불가능하다.

 

[root@main /etc/vsftpd]# ls
banner.txt  ftpusers  user_list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh

 

 

'userlist_deny=NO'인 경우, 'user_list' 파일에 정의된 사용자만 FTP 접속이 가능하다.

 

[root@main /etc/vsftpd]# ls
banner.txt  ftpusers  user_lis vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh

 

 

 - 'user_list' 파일에 'user1'을 추가한다.

 

[root@main /etc/vsftpd]# vi user_list

~ 중간 생략 ~

 

20 user1

 

: wq! 

 

 

 

-  'vsftpd' 설정 파일에서 다음과 같은 설정을 맨 마지막 라인에 추가하고, 서비스를 재시작한다.

 

[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

124 userlist_deny=NO

 

: wq!

 

 

[root@main /etc/vsftpd]# service vsftpd restart
vsftpd 종료 중:                                            [  OK  ]
vsftpd에 대한 vsftpd을 시작 중:                            [  OK  ]

 

 

 - clone1에서 'user1' 계정으로 main FTP 접속 실시

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - clone1에서 'user2' 계정으로 main FTP 접속 실시


[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user2
530 Permission denied.
Login failed.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - clone1에서 'root' 계정으로 main FTP 접속 실시

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): root
c530 Permission denied.
Login failed.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - 'userlist_deny=NO' 주석 처리 실시

 

[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

124 # userlist_deny=NO

 

: wq!

 

 

 - 'user_list' 파일 'user1' 삭제

 

[root@main /etc/vsftpd]# vi user_list

~ 중간 생략 ~

 

20 user1 <- 삭제

 

: wq! 

 

 

 

 

 6) 익명 사용자(anonymous) FTP 구성

 

 - vsftpd 서버는 기본적으로 익명 사용자가 접속하는 것을 허용한다. 단, 파일 다운로드만 가능하다.

 - 익명 사용자가 FTP 서버로 접속하면, 기본적으로 '/var/ftp/pub' 디렉토리를 사용한다.

 

[root@main /etc/vsftpd]# ls /var/ftp
pub

 

 

 -  clone1에서 'anonymous' 계정으로 main FTP 서버 접속 실시

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): anonymous
331 Please specify the password.
Password: <- 엔터
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> pwd
257 "/"
ftp>
ftp> cd /etc/sysconfig
550 Failed to change directory.
ftp>
ftp> dir
227 Entering Passive Mode (172,20,1,1,204,175).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Jul 24  2015 pub
226 Directory send OK.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 - 만약, 익명 사용자도 업로드를 가능하게 하려면 'vsftpd' 설정 파일에서 다음과 같은 설정을 추가한다.

 

[root@main /etc/vsftpd]# cd /var/ftp/pub

[root@main /var/ftp/pub]# mkdir test

[root@main /var/ftp/pub]# chmod 603 test

[root@main /var/ftp/pub]# useradd -d /var/ftp/pub/test -r -s /sbin/nologin ftpupload

[root@main /var/ftp/pub]# cd -

/etc/vsftpd

[root@main /etc/vsftpd]#

[root@main /etc/vsftpd]# vi vsftpd.conf

 

~ 중간 생략 ~

 

125 anon_upload_enable=YES

126 chown_uploads=YES

127 chown_username=ftpupload

 

: wq!

 

 

 

[root@main /etc/vsftpd]# service vsftpd restart

 

 

 - clone1에서 익명 접속 실시 및 파일 업로드 확인 실시

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): anonymous
331 Please specify the password.
Password: (엔터)
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> cd pub/test
250 Directory successfully changed.
ftp>
ftp> put
(local-file) /root/download/issue
(remote-file) issue
local: /root/download/issue remote: issue
227 Entering Passive Mode (172,20,1,1,204,111).
150 Ok to send data.
226 Transfer complete.
47 bytes sent in 0.000158 secs (297.47 Kbytes/sec)
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - main에서 업로드 파일 내용 확인

 

[root@main /etc/vsftpd]# ls /var/ftp/pub/test
issue

 

 

 

 7) FTP 포트 변경

 

 - FTP는 기본적으로 TCP 21번 포트를 이용하여 연결한다. clone1에서 main FTP 서버로 접속하도록 한다.

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root):

 

 

 - main에서 TCP 연결 상태를 확인하도록 한다.


[root@main /etc/vsftpd]# netstat | grep tcp
tcp        0     52 192.168.1.100:ssh           192.168.1.1:59611           ESTABLISHED
tcp        0      0 main:ftp                    clone1:41651                ESTABLISHED


[root@main /etc/vsftpd]# netstat -n | grep tcp
tcp        0     52 192.168.1.100:22            192.168.1.1:59611           ESTABLISHED
tcp        0      0 172.20.1.1:21               172.20.1.101:41651          ESTABLISHED

 

 

- clone1에서 'user1' 계정으로 FTP 로그인 이후, 로그 아웃을 실시한다.

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - 'vsftpd' 설정 파일에서 다음과 같은 설정을 맨 마지막 라인에 추가하고, 서비스를 재시작한다.

 

[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

128 listen_port=2121

: wq!

 

 

[root@main /etc/vsftpd]# service vsftpd restart
vsftpd 종료 중:                                            [  OK  ]
vsftpd에 대한 vsftpd을 시작 중:                            [  OK  ]

 

 

 - clone1에서 main FTP 접속 실시

 

[root@clone1 /root]# ftp main
ftp: connect: 연결이 거부됨
ftp> quit
[root@clone1 /root]#


[root@clone1 /root]# ftp main 2121
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root):

 

 

 - main에서 TCP 연결 상태를 확인하도록 한다.

 

[root@main /etc/vsftpd]# netstat -n | grep tcp
tcp        0     52 192.168.1.100:22            192.168.1.1:59611           ESTABLISHED
tcp        0      0 172.20.1.1:2121             172.20.1.101:32972          ESTABLISHED

 

 

- clone1에서 'user1' 계정으로 FTP 로그인 이후, 로그 아웃을 실시한다.

 

[root@clone1 /root]# ftp main 2121
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - FTP 포트 변경 주석 처리 실시

 

[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

129 # listen_port=2121

 

: wq!

 

 

 

 

 8) FTP 서버 접속 사용자수 제한

 

 - FTP 서버로 접속할 수 있는 사용자수는 기본적으로 무제한이다. clone1과 clone2에서 main FTP 서버로 접속을 확인한다.

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root):
[root@clone1 /root]#

 

[root@clone2 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root):
[root@clone2 /root]#

 

 - clone1, clone2에서 'ctrl+c'를 실시하여 FTP 서버 접속을 종료한다.

 

 

 - 'vsftpd' 설정 파일에서 다음과 같은 설정을 맨 마지막 라인에 추가하고, 서비스를 재시작한다.

 

[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

130 max_clients=1

 

: wq!

 

 

[root@main /etc/vsftpd]# service vsftpd restart
vsftpd 종료 중:                                            [  OK  ]
vsftpd에 대한 vsftpd을 시작 중:                            [  OK  ]

 

 

- clone1에서 main FTP 접속 실시


[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root):

 

 

- clone2에서 main FTP 접속 실시

 

[root@clone2 /root]# ftp main
Connected to main (172.20.1.1).
421 There are too many connected users, please try later.
ftp>
ftp> quit
[root@clone2 /root]#

 

 

- clone1에서 'user1' 계정으로 FTP 로그인 이후, 로그 아웃을 실시한다.

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - FTP 접속 사용자 수 제한 주석 처리 실시

 

[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

131 # max_clients=1

 

: wq!

 

 

 

 

 9) 동일한 IP 주소로 여러개 접속 차단

 

 - clone1에서 Putty 2개를 이용하여 main FTP 서버로 동시 접속을 확인한다.

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root):

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root):

 

 

 - clone1, clone2에서 'ctrl+c'를 실시하여 FTP 서버 접속을 종료한다.

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): ctrl+c

[root@clone1 /root]#

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): ctrl+c

[root@clone1 /root]#

 

 

 - 'vsftpd' 설정 파일에서 다음과 같은 설정을 맨 마지막 라인에 추가하고, 서비스를 재시작한다.

 

[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

132 max_per_ip=1

: wq!

 

 

[root@main /etc/vsftpd]# service vsftpd restart
vsftpd 종료 중:                                            [  OK  ]
vsftpd에 대한 vsftpd을 시작 중:                            [  OK  ]

 

 

- clone1에서 Putty 2개를 이용하여 main FTP 서버로 동시 접속하면, 2번째로 접속한 clone1는 연결이 거부 된다.


[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root):

 

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
421 There are too many connections from your internet address.
ftp>
ftp> quit
[root@clone1 /root]#

 

 

- clone1에서 'user1' 계정으로 FTP 로그인 이후, 로그 아웃을 실시한다.

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> quit
221 Goodbye.
[root@clone1 /root]#

 

 

 - 동일한 IP 주소로 여러개 접속 차단 주석 처리 실시

 

[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

133 # max_per_ip=1

 

: wq!

 

 

 

 

 10) 로그 저장

 

  - FTP 접속 및 파일 전송시 로그를 저장한다.


[root@main /etc/vsftpd]# vi vsftpd.conf

~ 중간 생략 ~

 

39 xferlog_enable=YES

 

~ 중간 생략 ~

 

: wq!

 

 

[root@main /etc/vsftpd]# cat /var/log/xferlog


Tue Mar 15 15:20:39 2016 1 172.20.1.101 0 /etc/issue* a _ o r user1 ftp 0 * i
Tue Mar 15 15:21:01 2016 1 172.20.1.101 47 /etc/issue a _ o r user1 ftp 0 * c
Tue Mar 15 15:21:16 2016 1 172.20.1.101 46 /etc/issue.net a _ o r user1 ftp 0 * c
Tue Mar 15 15:28:55 2016 1 172.20.1.101 122872 /bin/cp b _ o r user1 ftp 0 * c
Tue Mar 15 15:28:55 2016 1 172.20.1.101 49384 /bin/mkdir b _ o r user1 ftp 0 * c
Tue Mar 15 15:30:21 2016 1 172.20.1.101 49384 /bin/mkdir b _ o r user1 ftp 0 * c
Tue Mar 15 15:30:42 2016 1 172.20.1.101 122872 /bin/cp b _ o r user1 ftp 0 * c
Tue Mar 15 15:30:42 2016 1 172.20.1.101 49384 /bin/mkdir b _ o r user1 ftp 0 * c
Tue Mar 15 15:31:59 2016 1 172.20.1.101 122872 /bin/cp b _ o r user1 ftp 0 * c
Tue Mar 15 15:32:00 2016 1 172.20.1.101 49384 /bin/mkdir b _ o r user1 ftp 0 * c
Tue Mar 15 15:32:51 2016 1 172.20.1.101 122872 /bin/cp b _ o r user1 ftp 0 * c
Tue Mar 15 15:32:51 2016 1 172.20.1.101 49384 /bin/mkdir b _ o r user1 ftp 0 * c

 a : ACSII Mode 전송

 b : Binary Mode 전송

 o : 다운로드

 i : 업로드

 

 

 

 11) FTP 프로세스 권한

 

 - main에서 vsftp 프로세스 권한을 확인한다.

 

[root@main /etc/vsftpd]# ps -ef | grep vsftpd | grep -v grep
root     22614     1  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 

 

 - clone1에서 main FTP 접속 실시

 

[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root):

 

 

 - main에서 FTP 프로세스 소유자(nobody) 확인

 

[root@main /etc/vsftpd]# ps -ef | grep vsftpd | grep -v grep
root     22614     1  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root     22657 22614  0 13:40 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody   22658 22657  0 13:40 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 

 

 - clone1에서 'user1' 계정으로 main FTP 접속 실시


[root@clone1 /root]# ftp main
Connected to main (172.20.1.1).
220 (vsFTPd 2.2.2)
Name (main:root): user1
331 Please specify the password.
Password: centos
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

 

 

 - main에서 FTP 프로세스 소유자(user1) 확인

 

 

[root@main /etc/vsftpd]# ps -ef | grep vsftpd | grep -v grep
root     22614     1  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody   22657 22614  0 13:40 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
user1    22663 22657  0 13:40 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 

 

-  'user1' 계정 로그 아웃 실시


ftp>
ftp> quit
221 Goodbye.

 

 

 - main에서 FTP 프로세스 확인

 

[root@main /etc/vsftpd]# ps -ef | grep vsftpd | grep -v grep
root     22614     1  0 13:38 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 

 

Posted by 김정우 강사(카카오톡 : kim10322)
,


Q