FTP 를 운영할 때 chroot 상에서 심볼릭링크 처리
알아둘일
2009. 1. 23. 17:43
FTP 를 운영할때 이런 경우가 있다.
다운로드는 심볼링링크로 처리한다고 해보자.
(각 파일은 DownA -> userA 의 파일들이 링크된다-지정된 몇몇 파일들)
(userA 의 경우 접속시 DownA 가 chroot 되어 /data/ ... 부분만 접속이 가능하기 때문이다)
그럼 어떻게 해결하는가?
1. chroot 를 풀어버린다.
chroot 를 사용하지 않고, 그냥 절대경로로 사용한다.
proftpd
vsftpd
그런데, 저렇게 바꿔버리면 사용자가 상위디렉토리로 접근할 수 있게 되어 보안 위험에 노출 된다. 물론 퍼미션을 잘 조정하면 괜찮지만, 아무래도 꺼림직하다.
2. mount bind 를 이용한다.
접근하려는 사용자 디렉토리를 mount -o bind 옵션으로 마운트해서 사용한다.
위와 같은 경우 (userA)
이런식으로 마운트한후에 링크는
/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
Data / userA / dirA / fileA , fileB
dirB / fileC , fileD
userB / dirC / ...
userC /
위 처럼 구성되어 있다고 할때.dirB / fileC , fileD
userB / dirC / ...
userC /
다운로드는 심볼링링크로 처리한다고 해보자.
(각 파일은 DownA -> userA 의 파일들이 링크된다-지정된 몇몇 파일들)
DownA / data / dirA / fileA -> symbolic link (/Data/userA/dirA/fileA)
dirB ..
DownB / data / dirC ..
이렇게 외부로 빼서 하는 경우 FTP 의 chroot 상태에서는 링크가 깨져 다운로드 할 수 없다.dirB ..
DownB / data / dirC ..
(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
반응형
'알아둘일' 카테고리의 다른 글
파란호스팅과 zend framework , mysql (0) | 2009.03.01 |
---|---|
인터넷 브라우저의 암호저장하기를 쓰는데, 암호가 뭐였더라? (0) | 2009.02.19 |
국내 이동통신사의 돈버는 방법. (0) | 2009.01.15 |
노트북 LCD 수리 - 모르면 당해야 하나? (0) | 2009.01.10 |
virtualbox 2.1 는 따로 브리지(bridge) 설정을 안해줘도 된다. (0) | 2009.01.07 |
WRITTEN BY
- 1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.
,