vsftpd 설치 및 활용법 > 기술자료 | 해피정닷컴

vsftpd 설치 및 활용법 > 기술자료

본문 바로가기

사이트 내 전체검색

vsftpd 설치 및 활용법 > 기술자료

Linux vsftpd 설치 및 활용법

페이지 정보


본문

리눅스의 ftp 로 vsftpd 가 있습니다. 


1. 시스템에 설치되 있는지 확인

1-1. yum 으로 확인
[root@localhost ~]# yum list installed ftp
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.daumkakao.com
 * epel: ftp.riken.jp
 * extras: ftp.daumkakao.com
 * updates: ftp.daumkakao.com
 * webtatic: sp.repo.webtatic.com
Error: No matching Packages to list

[root@localhost ~]# yum list installed vsftp
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.daumkakao.com
 * epel: ftp.riken.jp
 * extras: ftp.daumkakao.com
 * updates: ftp.daumkakao.com
 * webtatic: sp.repo.webtatic.com
Error: No matching Packages to list


1-2. rpm 으로 확인
[root@localhost ~]# rpm -qa | grep vsftpd 
vsftpd-3.0.2-22.el7.x86_64

1-3. rpm 설치파일 삭제
[root@localhost ~]# rpm -e vsftpd
warning: /etc/vsftpd/vsftpd.conf saved as /etc/vsftpd/vsftpd.conf.rpmsave
[root@localhost ~]# rpm -qa | grep vsftpd

 
2. 설치되있지 않을 경우 2가지 방법중 선택해서 설치 합니다.
2-1. yum 자동설치
[root@localhost ~]# yum install ftp
[root@localhost ~]# yum install vsftpd


2-2. 최신버전 다운로드 후 설치 : vsftpd 2.2.0 ( http://vsftpd.beasts.org )
[root@localhost ~]# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.2.1.tar.gz

 
3. 주요 설정
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
 
# anonymous 사용자의 접속 허용 여부  ( YES -> NO )
anonymous_enable=NO

# 로컬 계정 사용자의 접속 허용여부  ( YES -> NO )
local_enable=NO

# ftp로 접속이 된 상태에서 사용가능한 ftp 전용 명령어들을 허용 20
write_enable=YES

# ftp 로그파일의 위치  ( 활성화 )
xferlog_file=/var/log/vsftpd.log

# 아스키모드로 설정할려면  ( 활성화 )
ascii_upload_enable=YES
ascii_download_enable=YES

# FTP 접속환영 문구 변경 및 활성화
#ftpd_banner=welcome to blah FTP service.
ftpd_banner=welcome to FTP service.

# 홈 디렉토리 상위로 이동금지 ( 활성화 )
# 설정 후 /etc/vsftpd/chroot_list 파일이 없다는 오류가 발생하게 되면, 해당파일을 자동생성해줌
chroot_local_user=YES 
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list

# 추가하지 않으면 FTP 접속시도하면 500 OOPS 에러가 발생  ( 추가 )
# 응답:    500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES

# 숨김파일을 보이게하기
force_dot_files=YES

# FTP 접속시 소유권숨기기
hide_ids=YES

# ls-R 명령어 허용하기  ( 활성화 )
ls_recurse_enable=YES

# openssh 에 chroot 패치된것을 같이 사용하기
passwd_chroot_enable=YES

# 전송속도를 제한할 때 (숫자의 단위는 Bytes/Sec)
local_max_rate=300000

# 동시 접속자수 제한 (숫자만큼 제한)
max_clients=10

# IP당 접속자수 제한 (수자만큼 제한)
max_per_ip=2

#listen=NO
# 21번 port 다른 것으로 변경하기 https://www.happyjung.com/lecture/2233 

listen_ipv6=YES

# 확장자의 업로드 금지
deny_file={*.확장자,*.확장자}

# 특정파일 숨기기
hide_file={*.확장자,.hide,hide*.h?} 

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


# 마지막에 내용 추가  ( 추가 )
# specify root directory ( if don't specify, users' home directory become FTP home directory)
# local_root=public_html
use_localtime=YES 


4. root 등 특정 유저 FTP 접속을 차단
/etc/vsftpd/userlist  는 vsftpd 에서 기본으로 사용하는 계정 별 접속제어 파일로 파일에 등록된 사용자들은 ftp 에서 접속을 거부하게 된다
이때, /etc/vsftpd/vsftpd.conf 파일에서 'userlist_deny=NO' 로 설정 되어있을 경우에는 userlist 에 등록된 사용자들은 접속을 허용하는 사용자들이며 'userlist_deny=YES' 로 설정 되어있을 경우에는 userlist 에 등록된 사용자들은 접속 거부하는 사용자들 임을 뜻한다

[root@localhost ~]# vi /etc/vsftpd/ftpusers
[root@localhost ~]# vi /etc/vsftpd/user_list


5. 홈 패스보다 위에 액세스 시키지 않는 유저 일람
vsftpd 기본 설정에서는 자신의 홈디렉토리 이외에도 root 디렉토리까지 상위 폴더로 이동이 가능합니다.
상위 디렉토리 이동을 막는 방법입니다.
chroot_list 파일 생성 및 상위 폴더 접근을 허용할 ID를 한줄에 하나씩 등록

[root@localhost ~]# vi /etc/vsftpd/chroot_list
jung


6. 방화벽 설정
OS 버전 확인
[root@localhost ~]# rpm -qa | grep release
centos-release-7-4.1708.el7.centos.x86_64
CentOS7 부터 방화벽 제어가 iptables 에서 firewall 로 변경되었습니다.

[ CentOS 6.8 ]

7-1. iptables 설정
[root@localhost ~]# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

7-2. iptable 재시작
[root@localhost ~]# /etc/init.d/iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   


8. SE LINUX 설정
[root@localhost ~]# getsebool -a | grep ^ftp_home_dir
ftp_home_dir --> off
[root@localhost ~]# setsebool -P ftp_home_dir on


9. 부팅시 FTP 자동실행 및 재시작
[root@localhost ~]# chkconfig --level 2345 vsftpd on
[root@localhost ~]# service vsftpd restart
Shutting down vsftpd:                                      [FAILED]
Starting vsftpd for vsftpd:                                [  OK  ]


[ CentOS 7.3 / 7.4 ] 

7. 방화벽
# firewall 실행여부 확인
실행 중이면 running , 실행 중이 아니면 not running 을 출력합니다.
[root@localhost ~]# firewall-cmd --state
running

# 사용 가능한 서비스/포트 출력하기
[root@localhost ~]# firewall-cmd --list-all
[ 샘플1 ]
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources: 
  services: dhcpv6-client ssh
  ports: 80/tcp 3306/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 

[ 샘플2 ]
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp3s0f0
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

# ftp 서비스 추가
[root@localhost ~]# firewall-cmd --add-service=ftp
success

# 21 tcp 포트를 추가
[root@localhost ~]# firewall-cmd --add-port=21/tcp
success

# trusted 존에 ftp 서비스 추가
[root@localhost ~]# firewall-cmd --zone=trusted --add-service=ftp
success

# 시스템 재부팅 또는 방화벽 재시작 후에도 작동되도록 옵션 추가
[root@localhost ~]# firewall-cmd --permanent --add-service=ftp
success

# 방화벽 재실행
[root@localhost ~]# firewall-cmd --reload

# 사용 가능한 서비스/포트 재확인
[root@localhost ~]# firewall-cmd --list-all
[ 샘플1 ]
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources: 
  services: dhcpv6-client ftp ssh
  ports: 3306/tcp 80/tcp 21/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 

[ 샘플2 ]
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp3s0f0
  sources: 
  services: dhcpv6-client ssh
  ports: 21/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


8. SE LINUX 설정
[root@localhost ~]# getsebool -a | grep ^tftp_home_dir
tftp_home_dir --> off
[root@localhost ~]# setsebool -P tftp_home_dir on


9. 부팅시 FTP 자동실행 및 재시작
[root@localhost ~]# systemctl enable vsftpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@localhost ~]# systemctl restart vsftpd.service


[ 공통 ]

10. 프로세스 확인 및 포트확인
[root@localhost ~]# ps -ef | grep vsftpd
root     16352     1  0 17:36 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root     16376 13974  0 17:41 pts/0    00:00:00 grep --color=auto vsftpd


11. FTP 접속
[root@localhost ~]# ftp
ftp> open
(to) 1.2.3.4
connected to 1.2.3.4 (1.2.3.4).
220 (vsFTPd 2.2.2)
Name (1.2.3.4:root) :  happyjung
password:
230 Login successsful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>


12. 문제해결
12-1. 530 Login incorrect.
  - 계정 아이디와 비밀번호를 확인 후 passwd 계정명 명령으로 비밀번호를 다시 설정합니다. 
  - /etc/vsftpd.ftpusers 에 등록된 사용자라면 ftp 접속이 안되므로 이 파일에서 삭제합니다.

12-2. 업로드 파일크기 제한하기
  - 1.2.1 버전까지는 vsftpd 자체에 설정하는 방법이 없습니다. 
  - 현재 2.2.0 까지 업그레이드가 되었으니 혹시 되려나요?

12-3. FTP 업로드시
응답: 553 Could not create file.
오류: 치명적 오류

ls -l 했을때 나타나는 소유권과 그룹이 login id와 다르면 위와 같은 에러가 발생합니다.
# cd /home
# ls -al
# chown -R 유저명.그룹명 폴더명

12-4. 530 Login incorrect.
  - 계정 아이디와 비밀번호를 확인 후 passwd 계정명 명령으로 비밀번호를 다시 설정합니다. 
  - /etc/vsftpd.ftpusers 에 등록된 사용자라면 ftp 접속이 안되므로 이 파일에서 삭제합니다.

12-5. 업로드 파일크기 제한하기
  - 1.2.1 버전까지는 vsftpd 자체에 설정하는 방법이 없습니다. 
  - 현재 2.2.0 까지 업그레이드가 되었으니 혹시 되려나요?

12-6. 500 OOPS: vsftpd: both local and anonymous access disabled!
local 관련 옵션 변경
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
local_enable=YES
chroot_local_user=YES
[root@localhost public_html]# systemctl restart vsftpd.service

12-7. 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list
chroot_list 관련 주석처리
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
[root@localhost public_html]# systemctl restart vsftpd.service

12-8. 500 Illegal PORT command
Active mode에서 IP공유기등 사설IP에서 접속을 시도할 경우 클라이언트 Data포트가 막힐 가능성이 있기 때문에 오류합니다.


참고자료 
http://cafe.naver.com/swingme/248
http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-ko-4/s1-server-ftp.html 
http://cafe.naver.com/junixrhce/28
http://kldp.org/node/54059 
https://www.cmsfactory.net/node/11421 
http://egloos.zum.com/guswl47/v/6390557 
http://luckyyowu.tistory.com/286 
http://blog.iotinfra.net/?p=734 
https://www.conory.com/note_linux/42477 
http://blog.ivps.kr/50 
https://forum.ubuntuusers.de/topic/vsftpd-500-oops%3A-vsftpd%3A-both-local-and-anony/
http://c8korea.blogspot.kr/2012/12/vsftpd.html
http://woosa.tistory.com/48

댓글목록

등록된 댓글이 없습니다.


Total 124건 5 페이지
  • RSS
기술자료 목록
44
Linux   17584  2009-08-03 10:27  
43
Linux   40012  2009-08-03 10:10 ~ 2012-05-15 00:00  
42
Linux   14628  2009-07-14 00:07  
41
Linux   31758  2009-06-04 14:32 ~ 2009-08-19 00:00  
40
Linux   13565  2009-06-03 12:52 ~ 2009-11-03 00:00  
39
Linux   12904  2009-05-01 18:15  
38
Linux   14732  2009-03-24 18:08  
37
Linux   19912  2009-03-06 02:13  
36
Linux   11004  2009-01-03 12:37 ~ 2009-01-08 00:00  
35
Linux   14077  2008-12-24 16:57 ~ 2009-08-18 00:00  
34
Linux   12621  2008-07-08 18:09  
33
Linux   20882  2008-06-12 09:21 ~ 2010-02-27 00:00  
32
Linux   9554  2008-05-20 08:10 ~ 2021-09-09 09:29  
31
Linux   13261  2008-03-31 09:25 ~ 2017-09-21 00:00  
30
Linux   12134  2007-12-28 22:02  
29
Linux   10638  2007-11-10 20:10 ~ 2022-03-23 07:46  
28
Linux   13644  2007-10-27 21:40  
27
Linux   13787  2007-10-16 20:52  
26
Linux   11276  2007-10-16 20:49 ~ 2017-03-08 00:00  
25
Linux   23226  2007-10-09 16:35 ~ 2023-12-24 10:49  

검색

해피정닷컴 정보

회사소개 회사연혁 협력사 오시는길 서비스 이용약관 개인정보 처리방침

회사명: 해피정닷컴   대표: 정창용   전화: 070-7600-3500   팩스: 042-670-8272
주소: (34368) 대전시 대덕구 대화로 160 대전산업용재유통단지 1동 222호
개인정보보호책임자: 정창용   사업자번호: 119-05-36414
통신판매업신고: 제2024-대전대덕-0405호 [사업자등록확인]  
Copyright 2001~2024 해피정닷컴. All Rights Reserved.