본문 바로가기
I T/Linux

vsftp 설정 및 config 정리

by 루솨 2015. 8. 30.

SFTP (Very Secure File Transfer Protocol)  보안 부분을 강조한 FTP로 리눅스 용으로 쓰이고 있습니다.
vsftp 는 보안 부분을 특히 강조한 데몬으로 Redhat, Suse, Open-BSD 에서 기본 FTP 로 채택하고 있으며 보안, 
빠른 퍼모먼스, 안정성을 주요 특징으로 소개하고 있고 그 성능도 여느 ftp 서버 보다 탁월하며 config 파일의 설정 문법도 
아주 간단해서 FTP 서버 관리를 쉽게 할 수 있는 


openBSD = NetBSD에서 파생된 BSD 계열의 오픈소스 운영체제입니다. openBSD 는 컴퓨터 보안쪽으로 특화되어 개발되고 있으며, 현재 프로젝트는
                 Theo de Raadt가 이끌고 있습니다. OpenBSD 의 개발자들은 보안을 위해 소스코드를 한줄 한줄 검사하는 것을 마다하지 않으며, 보안이 문제가 


                되는 부분들은 자체적인 구현으로 대체 하기도 합니다. 유명한 예로 openSSH와, openSSL , openNTPD 등이 있습니다


Sesulinux = 리눅스 배포판은 리눅스 커널, GNU 소프트웨어 및 여러 가지 자유 소프트웨어로 구성된 유닉스 계열 운영체제이다



500 illegal(일리걸) port command 서버가 방화벽 내지 공유기 밑단에 있을 경우 볼 수 있는 에러메세지이다. 공유기를 사용 할 경우 자체 방화벽으로 인하여


Active 모드로 접근을 할 수 없다. 이러한 경우에는 Passive 모드로 접근 할 수 있도록 허용을 해야한다.


# FTP 동작모드 #
- Port Mode (Active Mode)  와  Passive Mode 두 가지가 있다.
*Active 모드
- Active 모드는 클라이언트가 보내중 정보를 기준으로 서버에서 클라이언트의 Data 포트에 접속을 시도한 후 클라이언트의 요청에 따라 데이터를 전송하는


방식이다. 
하지만 Ip 공유기등 사설 IP에서 접속을 시도할 경우 클라이언트의 Data 포트가 막힐 가능성이 있기 때문에 500 Illegal PORT command 와 같은 오류를 출력할


수 있다. 
즉 명령은 전달이 되었지만 실제적으로 전송을 담당하는 데이터 포트가 막혀서 데이터를 전송 못할 가능성이 있다. 
- 실제로 포트 번호는 정해진것이 아닌 1023포트 이상에서 서버나 클라이언트가 정함


# FTP서버가 Active mode 로 설정되어있을때 Client 측의 data session 에 
연결될 포트번호는 방화벽에서 풀어주셔야 data 전송이 가능해 집니다.


*Passive 모드
- Passive 모드는 데이터 포트와 명령포트 전부 클라이언트에서 서버로 연결을 하는 방식이다. 즉 클라이언트의 공유기의 간섭없이 서버와의 통신이 가능하


다.
하지만 클라이언트에서 접속하는 데 있어서 열어둔 포트가 서버의 방화벽에서 막혀 있지 않아야 한다. 
- 포트의 범위는 서버의 서비스에 간섭이 없는 범위내에서 적당히 설정한다. 여기서 적당히는 클라이언트의 접속량에 따라 다르다. 또 웹 서비스의 경우 8080


포트 등으로 운영이 될 수 있고 또 IRC 나 기타 서비스의 간섭이 없는 범위내에서 포트를 설정 하고 열어두면된다.


# FTP서버가 Passive mode로 설정되어있을때 server 측에서 사용될 FTP포트 범위를
방화벽에서(firewall or iptables)  설정 해주셔야 data 전송이 가능해 집니다.


▷ active mode연결 과정
1. FTP 서버 IP xxx.xxx.xxx.xxx 포트 21 번으로 접속
2. FTP 서버의 21 포트 -> 클라이언트 1023(n) 이상의 포트 (서버에서 클라이언트의 Command 포트로 응답)
3. FTP 서버의 20번 포트 -> 클라이언트 n+1 번 포트 (서버에서 클라이언트의 data포트로 접속)
4. FTP 서버의 20번 포트 <- 클라이언트 n+1 번 포트 (클라이언트에서 서버의 data포트로 응답)


▷ Passive mode 연결과정
1. FTP 서버 IP xxx.xxx.xxx.xxx 포트 21번에 접속
2. FTP 서버의 21포트 -> 클라이언트 1023(n) 이상의 포트(서버에서 클라이언트의 Command 포트로 응답)
3. FTP 서버의 Passive 설정된 범위의 포트 -> 클라이언트 n+1 포트(클라이언트에서 접속)
4. FTP 서버의 Passive 설정된 범위의 포트 -> 클라이언트 n+1 포트(클라이언트에서의 데이터 전송)



rpm -qa | grep vsftpd 로 패키지 확인


/etc/vsftpd/vsftpd.conf 가 환경설정파일


/etc/vsftpd/ftpusers 파일에서 적혀진 user account 는  ftp 접속을 못하게 설정하는 부분임니다. 
    - root 아이디로 FTP 를 이용하실분은 위 ftpusers 에서 root 부분을 주석처리 하면 접근가능합니다.


FTP 설정이 끝나고 데몬실행후 접속이 잘 되는지 테스트를 해보았습니다/   
실험 서버는 재 테스트서버이며 계정은 재 아이디로 계정을 하나 생성후  FTP 프로그램을 이용하여 접속하여 
업로드,다운로드, 디렉토리 를 만들어봤습니다. 업,다운로드,파일생성,디렉토리 생성에 대해 뭐 문제는 업었습니다.


두번째 테스트는 윈도우익스플로러 를 이용하여 FTP 접속해봤습니다. 접속 방법은 익스플로러창 주소란에 
FTP://해당FTP서버아이피 를 치시면
보는거와 같이 사용자 이름과 암호를 요구 하는데  서버의 사용자 계정과 암호를 입력하면 
보시는거와 같은 페이지가 떠야 정상입니다. 


anonymous  어나니머스


FTP://ID:비밀번호@IP주소:포트번호
FTP 서비스 시작 : /etc/init.d/vsftpd start
FTP 서비스 종료 : /etc/init.d/vsftpd stop
부팅시 자동 시작 : chkconfig vsftpd on
conf 파일 수정 후 xinetd 재실행 : /etc/rc.d/init.d/xinetd restart



/etc/vsftp/vsftp.conf 에 관한 명령어 요약
anonymous_enable=YES
익명연결을 허용에 대한 부분입니다. YES는 허용 NO는 허용하지 않습니다.
local_enable=YES
local account user들이 접속할 수 있도록 하는 부분입니다.
write_enable=YES
FTP에 접속한 user들이 write 명령어를 사용가능/불가능 하게 하는 부분입니다.
local_umask=022
local account user들이 파일을 생성할 때 파일에 대란 권한을 설정하는 부분입니다.
022 => 644로 보시면 됩니다.    *참고 ( -rwxr-xr--  , user 읽기(4)+쓰기(2) ,그룹읽기(4) ,other 읽기(4)   )
anon_upload_enable=YES
anonymous user들의 파일 Upload 권한을 설정하는 부분입니다.
anon_mkdir_write_enable=YES
anonymous user들의 디렉토리 생성 권한을 설정하는 부분입니다.
dirmessage_enable=YES
FTP에 접속한 user가 디렉토리를 이동할 때 알림 message로 지정된 파일을 설정하고 보여주는 부분입니다.
xferlog_enable=YES
FTP에 접속한 user들이 upload download에 대한 기록을 log 파일로 남길 것인지 설정하는 부분입니다.
Log는 /var/log/xferlog에 남습니다.
connect_from_port_20=YES
Standalone mode로 FTP를 운영할 때 Date를 전송할 포트를 사용하는 설정을 하는 부분입니다.
chown_uploads=YES
anonymous user가 upload한 파일의 소유권을 자동으로 변경하는 부분입니다.
chown_username=whoever
anonymous user가 upload한 파일의 소유권을 자동으로 변경하고 그 소유권을 변경할 user를 설정하는 부분입니다,
xferlog_file=/var/log/xferlog
log를 남길 디렉토리를 설정하는 부분입니다. 항상 log를 남기실 때는 logrotate를 이용하여 log를 잘라서 보관해야 합니다
 그렇지 않는 경우 system에 많은 부하를 줘서 문제가 생길 수 있습니다.
xferlog_std_format=YES
upload, download 파일의 log파일의 format을 설정하는 부분입니다.
idle_session_timeout=600
FTP에 접속한 user들이 idle 상태에 있을 경우 600초 이상 유지되는 경우 세션을 종료시키는 부분입니다.
data_connection_timeout=120
파일 upload, download할 때 연결을 유지하는 시간을 설정하는 부분입니다.
nopriv_user=ftpsecure
anonymous user가 접속할 때 여기에 적힌 user로 접속하도록하는 부분입니다.
async_abor_enable=YES
async ABOR 명령어를 사용할 수 있도록 하는지 설정하는 부분입니다.
ascii_upload_enable=YES
ASCII파일을 upload를 가능하게 하는 부분입니다.
ascii_download_enable=YES
ASCII파일을 download가능하게 하는 부분입니다.
ftpd_banner=Welcome to blah FTP service.
vsftpd Service에 접속하는 user에게 보여줄 banner를 설정하는 부분입니다.
deny_email_enable=YES
anonymous user가 FTP에 접속할 때 password 부분에 E-mail Address를 입력하는데 거부할 E-mail Address를 설정하는부분입니다.
banned_email_file=/etc/vsftpd/banned_emails
거부할 E-mail Address를 설정할 파일입니다.
chroot_list_enable=YES
user가 접속시 자신의 home 디렉토리를 /로 인식할 수 있도록 하여 home 디렉토리 안에서만 이동이 가능하게 하는 부분입니다.
chroot_list_file=/etc/vsftpd/chroot_list
위 설정에서 제외할 user를 적어주시면 됩니다.
ls_recurse_enable=YES
user들이 ls -R명령어를 사용하도록 설정하는 부분입니다. 부하가 많이 걸리므로 NO로 설정하는 것이 좋습니다.
listen=YES
Standalone mode로 service를 할 떄 설정하는 옵션입니다.
pam_service_name=vsftpd
user의 account에 대한 접속을 허용할 때 PAM인증으로 여러가지 기능을 설정할 수 있는데 이 부분은 PAM 인증을 통해서 사용할 설정파일의 이름을 지정할


수 있습니다.
userlist_enable=YES
userlist를 사용하여 user를 필터링할 것인지 설정하는 부분입니다.


**접속에러에 간단한 정리**
- 반드시 ftp 유저의 홈디렉토리의 권한을 root.root 로 셋팅해야 익명접속이 문제없이 된다.
- /vsr/ftp/pub 폴더의 권한을 777 로 바꾸면 접속이 안된다.
 vs가 Very Secure 의 약자이다. 쉽게 얘기해서 보안이 강화된 ftp 다. /var/ftp/pub 디렉토리에
모든 권한을 풀어주게 되면 보안상 위험하기 때문에 vsftpd 에서는 접속을 막도록 설정되어 있다.


500 OOPS: cannot open chroot() user list file 에러
vsftpd.chroot_list 주석제거시 해당 파일이 없으면 발생한다.


500 OOPS: cannot change directory:/var/ftp
/var/ftp 디렉토리를 생성해 주면 된다.


550 Permission denied.
write 권한이 없는 경우 발생하는 에러이다. (write_enable=YES 로 지정)
**Explorer 에서 Passive Mode FTP 접속이 잘안될때.
Explorer 에서 "도구"->"인터넷 옵션"->"고급" 탭->"방화벽 및 DSL 모뎀과 호환되는 수동 FTP 사용" 
에 체크 를 해두면 Explorer 에서도 왠만한곳의 FTP 연결이 잘 됩니다./ 
** PASSIVE MODE 설정방법
* 아래 설정 방법에서 시작 끝은 포트 범위를 나타냄 
*LINUX 서버
wu-ftpd  
/etc/ftpaccess 
passive ports 0.0.0.0/0 시작 끝


proftpd
/etc/proftpd/conf/proftpd.conf 
PassivePorts 시작 끝


vsftpd
/etc/vsftpd/vsftpd.conf
pasv_enable=YES
pasv_min_port=시작
pasv_max_port=끝


* 리눅스 서버의 Passive 모드 설정할때는 ip_conntrack 모듈이 필요하다. 이 모듈은 열려있는 포트가 몇번 포트에 의해서 연결이 되었는지 정보를 담고 있다



그 정보를 담고 있는 부분은 /proc/net/ip_contrack 에 존재한다. 커널 모듈을 등록시켜줘야 한다. 
modprobe ip_conntrack
modprobe ip_conntrack_ftp


*Iptable 설정
/etc/sysconfig/iptable-config 파일 내의 IPTABLES_MODULES 항목을 추가 하거나 주석을 제거한다.
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp"


iptables -A INPUT -p tcp --sport 1024:65535 --dport [포트시작]:[포트끝] -m state --state ESTABLISHED,RELATED -j ACCEPT


*Windows 서버
1. 시작 - 제어판 - 관리도구 - 인터넷정보서비스 - 로컬컴퓨터 - 속성 - 메타베이스 직접 편집 허용 체크
2. C:\%SystemRoot%\system32\inetsrv\metabase.xml 열기
3. PassivePortRange="시작-끝" 으로 수정
4. metabase.xml 저장
5. IIS 재시작
6. Ipsec, 또는 방화벽에 설정한 포트 번호 추가 
* Windows 2000 에서는 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msftpsvc\Parameters\ 에 REG_SZ 값으로 PassivePortRange


값을 추가한다.


'I T > Linux' 카테고리의 다른 글

리눅스 서버 점검 항목들  (0) 2015.08.30
vi 명령어 단축키 모음  (0) 2015.08.30
라운드큐브 설치  (0) 2015.08.30
WordPress Memory limit 에러.. 조치 방법  (1) 2015.08.30
php.ini soap 모듈 설치  (0) 2015.08.30