※ 요약


FTP를 이용하는 분들은 아시겠지만 ftp는 Active모드와 Passive모드가 존재한다. 일반적으로 사용할 때는 무엇이 더 좋다할 정도는 아니며 필자가 사용중인 CentOS7에는 기본적으로 액티브 모드가 기본 값이라 이번 포스트에서는 패시브 모드를 설정하는 방법을 알아보도록 하겠다.


※ Active 모드 방식 및 특징


- 모든 클라이언트에서 서버측 21번 포트로 접속을 시도하고 클라이언트가 사용할 두번째 포트를 서버에 통보

- 서버는 클라이언트에게 ack를 보내고 서버의 20번 포트는 클라이언트가 알려준 두번째 포트로 접속을 시도

- TCP/IP에서는 보통 클라이언트가 서버에 접속을 시도하는데 액티브모드에서는 서버가 클라이언트로 접속을 시도

- 만약 클라이언트 PC등에 방화벽이나 공유기가 있어 외부에서 접속을 허용하지 않는다면, 서버(20번포트) -> 클라이언트(1024~65535포트)의 접속이 정상적으로 되지 않아 FTP 로그인은 되지만 데이터 전송 및 디렉토리, 파일 리스트를 받지 못하는 문제가 발생


※ Passive 모드 방식 및 특징


- 모든 클라이언트에서 서버측 21번 포트로 접속(login)을 시도

- 서버는 클라이언트에게 서버에서 사용할 두번째 포트(1024~65535포트)를 통보

- 클라이언트는 다른 포트를 열어 서버가 알려준 이 포트로 접속을 시도하고 데이터를 전송

- 서버에서 클라이언트가 접속할 수 있도록 1024~65535 사이의 포트를 개방해야 하는 문제점이 발생할 수 있지만 접속 범위를 설정하므로써 문제 해결



※ 설정 방법


vi /etc/vsftpd/vsftpd.conf 라고 입력하여 vsftpd의 설정 파일을 열도록 한다.


설정 파일 제일 아래에 다음 항목을 추가 입력한뒤 저장하고 나오면 된다.

#pasv mode enable

pasv_enable=YES


#pasv port range

pasv_min_port=30000

pasv_max_port=30001



참고로 min 포트와 max 포트는 원하는 포트로 설정 가능하며 같은 값을 줄 경우 포트 고정이 가능하다. 설정을 저장하였으면 vsftpd 서비스를 재시작해주거나 재부팅해주면 설정이 적용되며, 시스템에 따라 방화벽 설정을 추가로 해줘야 하는 경우도 있다. 필자는 방화벽은 안해줘도 되서 여기까지만 작성하도록 하겠다.



※ 요약


필자는 리눅스(CentOS7) 서버를 운영중이고, 이 서버에 FTP를 구축하여 처음 연결을 시도하였는데 아래와 같이 500 OOPS vsftpd: refusing to run with writable root inside chroot()라는 메시지와 함께 Critical error가 뜨면서 연결이 되지를 않았다. 원인은 chroot내에 쓰기 권한이 없어서 발생한 문제로써, 설정을 바꿔주면 해결되는 문제다.



※ 해결 방법


참고로 필자는 CentOS7 배포판을 이용중이다. 우분투나 기타 다른 배포판은 설정 방법이 조금 다를 수 있으므로 참고바란다. 먼저 vi로 /etc/vsftpd/vsftpd.conf 파일을 열도록 한다.



vi 내에서 찾기로 allow_writeable_chroot를 찾으면 아래와 같이 설정 값 하나를 찾을 수 있는데, 값을 YES로 바꿔준뒤 저장하고 빠져나온다. 찾기는 /를 누르고 찾을 검색어를 입력한후 엔터를 누르면 된다.


설정을 저장하였다면 서비스를 재시작하여 변경된 설정 값이 적용되도록 한다. 서비스 재시작은 service vsftpd restart라고 입력하면 된다.



※ 요약
530 Permission denied가 뜨는 이유는 접속 거부 리스트에 있는 계정으로 ftp에 접속하려고 하기 때문인다. 리눅스의 vsftp는 보안을 위해 접속 거부 리스트를 가지고 있고, 강력한 권한을 가진 root 계정도 기본적으로 접속 거부 리스트에 포함되어 있어서 "530 Permission denied" 메시지가 뜨면서 접속이 안된다. 이번 포스트에서는 접속 거부 리스트에서 root 계정을 없애는 방법을 알아보도록 하겠다.

※ 수정해야 하는 파일 목록
수정해야 하는 파일은 아래 2개다.

/etc/vsftpd/ftpusers

/etc/vsftpd/user_list

위 2개 파일의 차이점은 아래와 같다.

ftpusers : 차단할거지만 패스워드는 물어봄, 맞든 틀리든 거부

user_list : 비번 조차 묻지 않고 거부



※ 방법

먼저 vi /etc/vsftpd/ftpusers 입력하여 파일을 연다.


root 계정이 있는데, 제거하고 저장한다.

혹시나 해서 남기는데, 삭제하는 방법은 삭제하려는 행에 커서를 놓고 "dd"를 입력하면 해당 행이 삭제된다.

저장하는 방법은 ":q"를 입력하면 된다.


이번에는 vi /etc/vsftpd/user_list를 입력하여 user_list 파일을 오픈한다.



먼저와 마찬가지로 root 계정을 제거한뒤 저장한다.


수정된 접속 차단 리스트를 적용하기 위해 서비스를 재시작한다.

service vsftpd restart



+ Recent posts