서버/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.
: 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
: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 편집기를 이용하여 배너로 사용할 내용을 생성한다.
[root@main /etc/vsftpd]# vi banner.txt
1 _---------. |
- '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 : wq! |
[root@main /etc/vsftpd]# vi user_list
1 # vsftpd userlist : 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_list 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
'서버 > Linux III' 카테고리의 다른 글
Linux III - 09. DNS 서비스 이해 (0) | 2016.03.22 |
---|---|
Linux III - 08. NFS 서버 (0) | 2016.03.18 |
Linux III - 06. FTP 클라이언트 (0) | 2016.03.15 |
Linux III - 05. 리눅스 서비스 운영 방식(Standalone & xinetd) (0) | 2016.03.14 |
Linux III - 04. 방화벽 해지하는 방법 (0) | 2016.03.14 |