윈도우PC를 FTP 서버로 만들어 주는 filezilla server 를 이용해서
공유기내에서 정상작동하도록 설정해본다.

1. filezilla server 다운로드
http://filezilla-project.org/download.php?type=server

2. 설치후에 server 설정
 User 설정 에서 사용자를 등록하고, Shared Folder 를 설정한다.(자세한 설명은 생략)
  Setting 에서 General settings 에서 기본 포트 21 대신에 다른 포트를 지정해준다.
  보통 ISP 에서 기본 FTP 포트를 막아놓는다.
  예를 들어 2221 포트등을 지정한다. 이 포트는 나중에 공유기 세팅에서 포트포워딩 해줄 것이다.

Passive mode settings 부분에서 Retrieve external IP address from  부분을 체크해준다.(Default 로 해도 되긴하는데 특정 client 에서 접속이 되지만, ftp data port 접속이 안되는 경우가 있다.)
포트범위도 지정해준다. (이 포트 범위를 공유기에서 설정해 줄 것이다.)

여기까지하면 FTP 서버 설정은 끝났다. 로컬에서 접속해보면 이상없이 접속이 되어야 한다. 접속이 안되면 접속port 확인, User 설정, 공유폴더 설정 등을 다시 확인한다.

3. 방화벽 설정 해제.
 윈도우XP SP2 이상에서는 방화벽이 작동한다. 방화벽에서 FTP 접속을 할 수 있도록 FileZilla Server 를 등록해준다.
  제어판 -> Windows 방화벽 -> 예외  항목에서
프로그램 추가 로 FileZilla Server 폴더로 찾아들어가서 FileZilla Server.exe 를 직접등록해준다.
기본으로 나와 있는 FileZilla Server Interface 라는 것을 선택하면 안된다.

여기까지 하면 공유기 내부의 다른PC 에서 접속할 수 있다. 접속이 안된다면 방화벽 설정을 다시 확인한다.

4. 외부 접속 가능하도록 공유기의 포트포워딩 설정.
 공유기관리 접속을 한다. (보통 192.168.0.1 이지만, 공유기 마다 다를수 있으니 매뉴얼참조)

FTP 서버를 설치한 IP 주소와 설정에서 포트범위를 적고 포트포워드 설정을 추가한다. (프로토콜 부분을 tcp ,udp 모두 지정해주는 것이 좋을 듯 하다)
(공유기에 따라 범위지정이 안되고, 하나씩 추가해줘야 하는 경우도 있다.그런경우 범위를 좀 줄여서 설정한다. 20~25 정도)


여기까지 하면 외부접속이 가능해진다. 1,2,3 까지 다 접속이 되는데, 4번에서 안된다면 포트지정이 잘못된 것이다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
현재 사용자용 다운로드를 FTP + filezilla 를 사용하고 있다.
물론 전용프로그램을 제작하면 좋겠지만, 개발여건이 좋지 않아 공개프로토콜/어플 을 사용하고 있다.

현재 사용상의 지장은 없는데, 약간 부족한 부분이 있다.
1. filezilla 설치의 어려움(사용자가 거의 컴퓨터에 익숙하지 않아 이마저도 어려워한다)
2. 다운로드 파일의 심볼릭링크 문제.(mount --bind )

그래서 다른 프로토콜을 알아보고 있다.
일단 WebDAV 가 눈에 띈다. 어느정도 활용이 가능할까?
현재의 구성을 바꿀 경우 어떤 이득이 있고, 문제가 있는지 알아봐야 겠다.

조건은
1. 파일관리(사용자관리) 가 쉬워야한다(현재 심볼릭링크 처리문제)
2. 사용자가 별다른 노력없이 바로 사용해야 한다.


WebDAV 로 해결가능하면 좋겠는데, 안되면 전용어플을 개발해야 할지도...


ftp + mysql 인증 까지는 가능한듯 하다.
문제는  각 계정별 chroot 인데. WebDAV 혹은 apache 에서 지원할까?

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
FTP 를 운영할때 이런 경우가 있다.

Data / userA / dirA / fileA , fileB
                     dirB / fileC , fileD
         userB / dirC / ...
         userC /
위 처럼 구성되어 있다고 할때.

다운로드는 심볼링링크로 처리한다고 해보자.
(각 파일은 DownA -> userA 의 파일들이 링크된다-지정된 몇몇 파일들)
DownA / data / dirA / fileA -> symbolic link (/Data/userA/dirA/fileA)
                       dirB ..
DownB / data / dirC ..
이렇게 외부로 빼서 하는 경우 FTP 의 chroot 상태에서는 링크가 깨져 다운로드 할 수 없다.
(userA 의 경우 접속시 DownA 가 chroot 되어 /data/ ... 부분만 접속이 가능하기 때문이다)

그럼 어떻게 해결하는가?

1. chroot 를 풀어버린다.
  chroot 를 사용하지 않고, 그냥 절대경로로 사용한다.

 proftpd
DefaultRoot                    ~
의 옵션을 해제한다.
 vsftpd
chroot_local_user=YES
를 YES -> No 로 바꿔준다.

 그런데, 저렇게 바꿔버리면 사용자가 상위디렉토리로 접근할 수 있게 되어 보안 위험에 노출 된다. 물론 퍼미션을 잘 조정하면 괜찮지만, 아무래도 꺼림직하다.

2. mount bind 를 이용한다.

접근하려는 사용자 디렉토리를 mount -o bind 옵션으로 마운트해서 사용한다.
위와 같은 경우 (userA)
mount -o bind  /Data/userA  /DownA/UserData

이런식으로 마운트한후에 링크는
/UserData/dirA/fileA
으로 해주면 된다.  여기서
/DownA/UserData/dirA/fileA
가 아닌 이유는 chroot 시에 /DownA 가 / 로 바뀌기 때문이다.

이 경우 사용자가 늘어나면 매번 mount bind 명령을 해줘야 한다.
소수의 사용자야 그냥 하면 되지만, 늘어나는 경우 정말 귀찮아 진다.
cron 으로 자동처리하면 되기는 하는데, 좀 깔끔하게 처리하는 방법이 없을까?


위 방법이 한계가 있다면, FTP 이외에 다른 방법을 찾아야 할지도 모르겠다.
서버, 클라이언트의 부담이 가장 적은 방법에 무엇이 있을까?

# 관련자료
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Chroot.html

http://www.proftpd.org/docs/howto/Chroot.html
반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,