본문 바로가기
Technical/System

Linux vsftp 설정 및 config 정리

by (주)이너엔 2024. 4. 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

 

 

* Config 옵션 정리 
/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 
값을 추가한다.

 

댓글