FTP 서버 만들기 for NAS

You are currently viewing FTP 서버 만들기 for NAS

FTP 는 파일공유를 위한 가장 기본적인

프로토콜 중 하나이다.

윈도우 든 리눅스 든 기본적으로 제공하기때문에

쉽게 사용할 수 있다.

기본으로 제공되는 FTP 서비스 외에도

파일질라, vsftp 등 은 더 다양한 기능을 제공한다.

다만 생각보다 환경 구축 과정이 초보에게는

어렵거나 귀찮을 수 있다.

그런 사람들을 위해 docker로 FTP 서버

만드는 방법을 소개하겠다.

우선 사용할 이미지를 골라야한다.

fauria/vsftpd라는 이미지를

많은 사람들이 사용하고 있다.

vsftpd는 Very Secure FTP Daemon의

약자에 나와있듯이 보안이 강화되었다.

pure-ftpd도 많은 유저들이 사용중이니

살펴보고 골라서 사용하면 된다.

사실 둘다 워낙 유명한 데몬이다보니

어떤 이미지를 골라도 크게 차이 나지 않는다.

이를 기반으로 docker-compose.yml을

작성해보면 다음과 같다.

version: '3'
services:
    vsftpd:
        image: fauria/vsftpd
        container_name: vsftpd
        environment:
            - FTP_USER=아이디
            - FTP_PASS=비밀번호
            - PASV_MIN_PORT=21100
            - PASV_MAX_PORT=21110
            - PASV_ADDRESS=접속주소
            - PASV_ADDR_RESOLVE=YES
        ports:
            - 0.0.0.0:ftp포트:20
            - 0.0.0.0:ftp포트2:21
            - 0.0.0.0:21100-21110:21100-21110
        volumes:
            - 공유경로:/home/vsftpd/아이디:rw
            - ./log/vsftpd:/var/log/vsftpd

한글로 적은 것은 직접 입력해야한다.

Active모드에서 21포트로 연결되면 서버측에서

클라이언트로 20포트로 데이터를 전송한다.

보안측면에서는 더 안전할 수 있지만

클라이언트 방화벽에 의해 차단될 가능성이 있다.

Passive모드에서는 데이터를 받을 때도

클라이언트가 서버에 접속하기때문에

방화벽 문제가 생기지 않는다.

PASV_ADDRESS는 서버의 IP를 적어도 되고

본인이 사용중인 도메인을 적어도 된다.

ftp포트는 많은 해커들이 노리고 있기때문에

꼭 20,21 이외의 포트번호를 지정하길 바란다.

내부 20포트에 해당하는 포트는 서버에서 클라이언트로

접속하는 것이기때문에 포트포워딩 하지 않아도 된다.

volume에 절대경로를 사용해도 되고

상대경로를 사용해도 상관없다.

예를들어 외장하드에 Transmission으로 받은 파일을

공유하기 위해 /mnt/xxx 로 지정했다.

FTP 주의사항

이전글에도 적었듯이 Transmission Docker와

FTP docker는 동시에 사용할 수 없다.

오늘 소개한 이미지의 단점은

멀티유저사용이 까다롭다.

다음과 같은 방법으로 멀티유저 사용이 가능하다.

docker exec -i -t vsftpd bash
mkdir /home/vsftpd/아이디
echo -e "아이디\n비밀번호" >>/etc/vsftpd/virtual_users.txt
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
exit
docker restart vsftpd

vsftpd의 bash에 들어가서 수동으로 virtual user를

추가하는 방법이다.

다만 위의코드대로 수행하면 원본 아이디와

별도의 폴더를 공유하게 된다.

같은 폴더를 공유하게 하려면 다음과 같은 경로를

docker-compose.yml의 volume에 추가하면 된다.

공유경로:/home/vsftpd/추가아이디:rw

잘 추가되었는지 보려면 다시 bash에 들어가

db_dump -d a /etc/vsftpd/virtual_users.db | grep len

라는 명령어를 쳐보면 된다.

추가한 사용자를 삭제하기 위해서는 virtual_users.txt에서

추가아이디와 비밀번호를 삭제한후 db_load 해주면 된다.

이해가 잘 안간다면 멀티유저를 지원하는

다른 이미지를 사용하길 바란다.

이런 종류의 방범은 db가 볼륨에 저장되지 않기때문에

docker-compose.yml을 이용해 다시 켤 경우

virtual_users.db가 원복된다는 점이 문제다.

이런 경우 유저를 추가하기보단 yml 파일에서

아이디와 비번을 공용으로 바꾸는것이 더 간편하다.


관련글

Leave a Reply