vsftpd
시스템에 설치되 있는지 확인
rpm -qa | grep vsftpd
1. 설치되있지 않을 경우 다음과 같이 설치를 합니다.
yum install vsftpd
2. 설정
FTP 서비스 시작 : /etc/rc.d/init.d/vsftpd start
FTP 서비스 종료 : /etc/rc.d/init.d/vsftpd stop
부팅시 자동 실행 : chkconfig vsftpd on
설정 완료후 xinetd 재실행 : /etc/rc.d/init.d/xinetd restart
3. /etc/vsftpd/vsftpd.conf 주요 설정
# anonymous 사용자의 접속 허용 여부
anonymous_enable=NO
# 로컬 계정 사용자의 접속 허용여부
local_enable=NO
# write 명령어 허용 여부
write_enable=YES
# 아스키모드로 설정할려면
ascii_download_enable=YES
ascii_upload_enable=YES
# 홈 디렉토리 상위로 이동금지
# 설정 후 /etc/vsftpd.chroot_list 파일이 없다는 오류가 발생하게 되면, 해당파일을 자동생성해줌
chroot_list_enable=YES
chroot_local_user=YES
# 숨김파일을 보이게하기
force_dot_files=YES
# FTP 접속시 소유권숨기기
hide_ids=YES
# ls-R 명령어 허용하기
ls_recurse_enable=YES
# openssh 에 chroot 패치된것을 같이 사용하기
passwd_chroot_enable=YES
# 시간이 잘못 표현될 때
use_localtime=YES
# 전송속도를 제한할 때 (숫자의 단위는 Bytes/Sec)
local_max_rate=300000
# 동시 접속자수 제한 (숫자만큼 제한)
max_clients=10
# IP당 접속자수 제한 (수자만큼 제한)
max_per_ip=2
# PASSIVE모드 사용시 포트 범위 제한
# PASSIVE모드는 일반 20번 포트를 방화벽때문에 사용하지 못할때 사용하는 모드(40000 ~ 50000 으로 PASSIVE포트 제한)
pasv_min_port=40000
pasv_max_port=50000
# 확장자의 업로드 금지
deny_file={*.확장자,*.확장자}
# 특정파일 숨기기
hide_file={*.확장자,.hide,hide*.h?}
4. 문제해결
1) 530 Login incorrect.
- 계정 아이디와 비밀번호를 확인 후 passwd 계정명 명령으로 비밀번호를 다시 재 설정해본다.
- /etc/vsftpd.ftpusers 에 등록된 사용자라면 ftp 접속이 안되므로 이 파일에서 삭제를 해준다.
2) 업로드 파일크기 제한하기
- 1.2.1 버전까지는 vsftpd 자체에 설정하는 방법이 없으므로 다음버전에 그런 기능이 생기기를 기원하는 수 밖에 없다.
3. 기본포트 21번 말고 다른 포트를 사용하고 싶을때 (예:2121 포트를 이용하고 싶을때)
- xinetd 를 이용하는 경우
/etc/service 에서
ftp2 2121/tcp
한줄을 추가한다.
그리고 /etc/xinetd.d/vsftpd (vsftpd 가 아니라 ftp 등 다른 이름이 될수 있습니다.) 에서 service ftp 를 service ftp2 로 변경하고
xinetd 를 재실행 합니다.
- standalone 으로 운영하는 경우
/etc/vsftpd.conf 에서 listen_port=2121 를 추가하고 vsftpd 서버를 재 실행합니다.
-----------------------------------------------------------------------------------------
1. 우선 ftp 서비스가 작동되고 있나 확인해봅니다.
(shell)# netstat -ntlp
...(중략)
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 9437/vsftpd
...
만약에 0.0.0.0:21 이라는 항목이 없다면, 현재 서버에서는 ftp 가 동작중이지 않습니다.
2. 다음은 vsftpd가 설치되어 있는지 확인해봅니다.
(shell)#rpm -qa |grep vsftpd
vsftpd-1.1.3-8 <--- 해당 패키지가 설치되어 있을 경우
만약에 아무런 결과가 출력되지 않는다면 vsftpd가 설치되어 있지 않으므로, 설치cd에서 vsftpd 패키지를
찾아서 설치하거나, rpmfind.net에서 검색하여 찾아서 설치하시면 됩니다. (대부분 기본으로 설치되어 있음)
3. 이젠 vsftpd를 동작시킵니다.
* vsftpd 작동
(shell)# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
* vsftpd 데몬 확인
(shell)# ps ax|grep -i vsftpd
9437 pts/1 S 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
* ftp 포트 확인
(shell)# netstat -ntlp
...(중략)
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 9437/vsftpd
...
4. 기본적으로 vsftpd 의 경우 root로의 접속이 금지되어 있습니다. root로 접속하기 위해서는 다음 항목을
수정합니다.
(shell)# vi /etc/vsftpd.ftpusers
...(중략)
#root ; root -> #root 로 주석처리 할 것
...
(shell)# vi /etc/vsftpd.user_list
...(중략)
#root ; root -> #root 로 주석처리 할 것
...
/etc/vsftpd.ftpusers 와 /etc/vsftpd.user_list 에 등록되어진 사용자는 기본적으로 해당 ftp 서버로 접속을
할 수 없습니다. 따라서 여기에 등록된 root 사용자를 주석처리(#)하거나 삭제하여 root 사용자가 접속할 수
있도록 합니다.
5. ftp로 접속하여 성공하면 설정이 적용된 것입니다.
(shell)# ftp localhost
Connected to localhost (127.0.0.1).
220 (vsFTPd 1.1.3)
Name (localhost:root): root
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
-------------------------------------------------------------------------
*** SELINUX
# setsebool -P ftp_home_dir 1
페도라 코어 4 까실때 SELinux 로 설정했다면 디폴트로 사용자의 home 디렉토리에 쓰기를 막아놓는다.
SELinux 설정에서 FTP 부분을 변경하자.
# service vsftpd restart
home 디렉토리의 읽고쓰기를 1(True)로 변경하시고 vsftpd 를 재시작.
# setsebool -P ftpd_disable_trans 1
FTP 에 관하여 SELinux 정책을 아예 적용하지 않는 옵션을 설정
"500 oops: cannot change directory"
Trying to ftp in to a Fedora Core 5 box using a local username. Password is accepted, but the connection is then closed with this error message.
This is because of SELinux's policies. To fix it, issue (as root):
setsebool -P ftp_home_dir=1
The -P flag ensures the value is saved after reboot.
-------------------------------------------------------------------------------
ftp 정상적인 세팅 상태에서 로그인 후
500 OOPS: cannot change directory
와 같은 메세지가 출력되며 접속이 끊어질 경우 다음과 같이 하면 됩니다.
/etc/selinux/config 에서
SELINUX=permissive
와 같이 바꾸면 됩니다. SELINUX의 Deny를 permissive로..
즉 메세지만 로그에 남기고 접근을 허용하는 것이지요.
enforcing이 기본인데 이것은 접근을 차단하는 것입니다.
귀찮아서 필요할때 하렵니다!
[출처] linux vsftpd|작성자 jajubitsky

댓글을 달아 주세요