Proftpd에서 버추어호스팅등으로 한 사용자의 홈디렉을 바꾸려고 합니다.

mirr의 이미지

proftpd를 이용하여 한 계정의 접속 홈 디렉토리를 버쳐호스팅에 따라 다르게 설정하고 싶습니다.
만약 test 라는 계정이 aaa.com 으로 접속할 경우 /home/aaa 가 그 계정의 루트디렉토리가 되고,
bbb.com으로 접속할 경우 /home/bbb로 접속되도록 설정을 하려고 하는데,
VirtualHost라는 항목에 대한 검색으로는 홈디렉토리를 설정하는게 찾기 힘드네요...

혹시 방법을 알고 계시거나 다른 방법을 알고계시는분은 알려주시면 정말 고맙겠습니다.
미리 감사합니다 :)

mirr의 이미지

흑...갖은 방법을 다 해보다가 결국 다른방법을 합니다.
원래 하려고 했던것이, ftp서버에 하드가 두개 있는데, 그중 한개만 쓰게 되있습니다.
왜냐면 ftp에 접속해서 서비스되는 계정이 한개고, 그 계정의 홈디렉토리는 1번 하드에 있으니까요..
그런데 그 나머지 하드도 마냥 놀려둘수가 없어서 사용하려고 하는데 한 계정에 두개의 홈디렉토리를
각각 설정해야 하는 겁니다.
버츄어 호스팅을 통해 서버가 마치 두개인듯 해볼려고 했지만 passwd에 있는 홈을 우선적으로 선택하는듯 합니다.
아니면 버츄어호스팅이 도메인으로는 안먹는 것이겠지요..

어쨋든 각종 설정들을 뒤지며 적용해 보다가 포기하고 하드 2번을 기존 1번 하드 FTP계정 홈디렉토리에 마운트하여
처리했습니다만 왠지 가능한걸 못했다는 생각이 드는군요....

proftpd버젼은 1.2.2rc3입니다. 혹시 버젼이 낮아서 그런걸까요?

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

wariua의 이미지

별로 가능하지 않을 겁니다. 웹 서버에서 호스트 이름으로 구분하는 가상 호스트 기능이 동작하는 건 웹 브라우저가 HTTP 프로토콜을 이용해 웹 서버에게 문서를 요청할 때 프로토콜 헤더의 내용(Host 필드)에서 웹서버의 호스트 이름을 명시해 주기 때문에 가능합니다. (http://web-sniffer.net/ 같은 곳에서 확인하실 수 있습니다.) 그런데 제가 알기론 FTP 프로토콜에는 그런 식으로 서버의 호스트 이름을 명시하는 메커니즘이 없습니다. 따라서 서버 입장에서는 클라이언트가 aaa.com 주소로 자신에게 접속했는지 bbb.com으로 접속했는지 구별할 방법이 없습니다. 인즉, 잘 선택하신 겁니다 :)
----
$PWD `date`

$PWD `date`

mirr의 이미지

음...저도 그 문서를 보긴 했습니다. 그래도 방법이 있지 않을까 했었는데 역시 그렇군요...
마운트를 해서 해결했긴 한데, 이상한게 심볼릭링크를 걸면 안되는군요.
디렉토리 구조는 /home/aaa/111 이라는 폴더가 있고, /usr2/aaa/222/(다른 하드)라는 폴더가 있는데
/home/aaa에 심볼릭 링크로 222를 /home/aaa/222로 연결해 줬더니 222로의 진입이 안됩니다.
ftp로 접속하면 디렉토리를 찾을 수 없다고 나오네요...chmod와 chown을 모두 풀어놨어도 안되더군요..
umask관련 문제일까 싶어서 umask를 000으로두 줘보고, 022로도 줘봤는데 안되네요...
심볼릭 링크로써의 디렉토리 연결또한 FTP에선 불가능한걸까요??

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

wariua의 이미지

$PWD `date`

dormael의 이미지

그냥 생각만 해본건데 proftpd도 네트웍 인터페이스별로 바인드하고 구성을 분리할 수 있나요?
만일 가능하다면 될것도 같은데..
유저는 alias시키면 될 듯 하구요.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

wariua의 이미지

여러 개의 네트워크 인터페이스, 즉 여러 개의 IP 주소가 있는 경우의 가상 호스트 운영은 가능한 걸로 보입니다. (http://www.proftpd.org/localsite/Userguide/linked/c503.html) 다만 미르님의 질문은 FAQ: "Can I run more that one VirtualHost on a single IP?"에 가까운 것 같아서요.

& dormael님, 성능 개선해 주신 것에 대해 KLDP 접속할 때마다 (음... 솔직히 '때마다'는 아니고 두 번 접속에 한번씩은 꼭꼭 :) ) 감사하고 있습니다~
----
$PWD `date`

$PWD `date`

dormael의 이미지

아, 감사합니다.^^
더 빨라졌으면 좋을텐데 좀 아쉽습니다.
뭐 저도 그랬지만 항상 도움만 받다가 조그만 것이라도 도움이 되고자 할때가 생기는것 같습니다.

저의 꿈은 결혼해서 아내가 돈을 잘 벌고 저는 집에서 살림하면서 오픈소스에 조그만 참여라도 하는거였습니다. 물론 정말 많이벌지 않으면 살림이 그리 쉬운게 아니란걸 알게 되어서 쉽지 않은 꿈이라걸 알게 됐습니다. ㅡ,.ㅡ

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

mirr의 이미지

음... 더 이상한건 ftp서버들중에 이전 관리자분께서 셋팅해 놓으신 것들이 있는데
여기선 심볼릭링크가 걸려있는 디렉토리도 문제 없이 들어가지는 것입니다....
Proftpd버젼은 동일한데 말이죠.......어떻게 그게 가능한건지 궁금합니다.
AllowLogsymlink인가 옵션도 온으로 해봤어도 역시 안되는군요...

설정과 Proftpd 버젼이 완전 동일한데도 한 서버에선 되고 한 서버에서 안됩니다..
혹시 커널상의 차이점이 있는걸까요?
되는것은 레드햇 7.3에 2.4.26이고 안되는것은 레드 햇 9에 2.4.26입니다.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

dormael의 이미지

상위 디렉토리들의 권한과 유저:그룹 모두가 일치하는데도 그런건가요?

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

mirr의 이미지

예 맞춰줬습니다만 그러는군요 아예 없는 디렉토리로 나옵니다..
링크에 뭔가 다른 옵션이 붙는건가......알쏭달쏭 입니다...

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

dormael의 이미지

권한, 유저:그룹, 프로세스 오너, 설정에 모두 문제가 없다면 커널이나 proftpd의 문제일 가능성도 있을텐데 이건 해결이 쉽지 않은 상황이겠네요. ㅡ,.ㅡ

혹시

#DefaultRoot 해보시거나
심볼릭 링크가 아닌 실제 유저의 홈을 /usr2밑으로 만든후에 접속한 경우도 잘 되나요?

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

mirr의 이미지

심볼릭링크만 아니면 다 되요 ^^
마운트로는 해결했지만 결국 커널쪽이라고 미심쩍게 확정지어야 하는거군요
감사합니다 ^^

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

wariua의 이미지

"mount --bind"로 일단 해결을 보셨다니... 심심풀이용 잡담을 달아봅니다.

proftpd 사용자 길라잡이 문서의 Symlinks and chroot() 페이지가 말씀하신 문제에 대한 내용입니다. 페이지 아래쪽에 운영체제별 해결법이 나와 있는데, 리눅스에서는 "mount --bind"를 사용하라고 되어 있습니다.

문서의 내용 대로 proftpd 서버는 DefaultRoot에 지정된 경로에 사용자를 '가둡니다'. 여기에 쓰이는 것이 chroot() 시스템 호출인데, 이를 이용하면 (이름 그래로) root(/) 디렉터리를 바꿀 수 있습니다. 그게 어떤 건지 알아보려면 다음과 같은 장난을 한번 해보실 수 있습니다.

1. 적당한 곳에 테스트용 디렉터리를 만듭니다. (이하 root 계정을 가정합니다.)

# mkdir chroot_test

2. 쉘과 간단한 프로그램(ls를 해보죠)을 그 안으로 복사합니다.

# mkdir chroot_test/bin
# cp /bin/{bash,ls} chroot_test/bin/

3. 두 프로그램이 어떤 라이브러리를 사용하는지 확인한 후,

# ldd chroot_test/bin/bash
        linux-gate.so.1 =>  (0x00923000)
        libtermcap.so.2 => /lib/libtermcap.so.2 (0x007f5000)
        libdl.so.2 => /lib/libdl.so.2 (0x007db000)
        libc.so.6 => /lib/libc.so.6 (0x00689000)
        /lib/ld-linux.so.2 (0x0066b000)
# ldd chroot_test/bin/ls
        linux-gate.so.1 =>  (0x00cef000)
        librt.so.1 => /lib/librt.so.1 (0x00101000)
        libacl.so.1 => /lib/libacl.so.1 (0x00d2a000)
        libselinux.so.1 => /lib/libselinux.so.1 (0x0096b000)
        libc.so.6 => /lib/libc.so.6 (0x00689000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x007f5000)
        /lib/ld-linux.so.2 (0x0066b000)
        libattr.so.1 => /lib/libattr.so.1 (0x00bf4000)
        libdl.so.2 => /lib/libdl.so.2 (0x007db000)
        libsepol.so.1 => /lib/libsepol.so.1 (0x00933000)

(ldd 실행 결과는 배포판 및 버전에 따라 달라질 수 있습니다.)

4. 라이브러리들도 복사해 줍니다.

# mkdir chroot_test/lib
# cp /lib/{ld-linux.so.2,libc.so.6,libpthread.so.0,libselinux.so.1,libdl.so.2,...중략} chroot_test/lib/

5. 테스트를 위해 심볼릭 링크를 하나 만들어 보죠.

# ln -s /usr/bin chroot_test/root_usr_bin

cd chroot_test/root_usr_bin 이라고 명령을 주면 /usr/bin/으로 이동하겠지요.

6. 이제 문제의 디렉터리로 chroot 해봅니다.

# chroot chroot_test
# pwd
/
# ls -l
total 8
drwxr-xr-x 2 0 0 4096 Jun 17 11:11 bin
drwxr-xr-x 2 0 0 4096 Jun 17 11:16 lib
lrwxrwxrwx 1 0 0    4 Jun 17 11:19 root_usr_bin -> /usr/bin
# cd root_usr_bin
bash: cd: root_usr_bin: No such file or directory
#

새로운 세상입니다. 그리고 그 상자속 세상에는 /usr/bin이라는 경로가 존재하지 않습니다.

심볼릭 링크가 가리키고 있는 DefaultRoot '외부'의 경로로 이동이 되지 않는 건 이런 식입니다. chroot 한 후의 디렉터리 구조에는 그 외부 경로 자체가 존재하지 않는 것이죠.

다른 서버에서는 동일한 버전의 서버와 동일한 설정으로 됐다고 하셨는데, 그 이유는... 저도 잘 모르겠습니다. (도망...도망...) 참, chroot 상태에서 빠져나오는 건 exit 하시면 됩니다.
----
$PWD `date`

$PWD `date`

mirr의 이미지

음...chroot와 심볼릭링크의 관계는 물론 알지용~^^
근데 한놈은 되고 한놈은 안된다는게 의문인겁니다 ㅎㅎ
거참 희한하네~ :)

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

mirr의 이미지

아하하하하핫 해결했씁니다...
wariua님의 마지막 답글대로 chroot관련 글을 보는데 문득 들어오는생각이
ftp계정의 그룹이였습니다....

다른 FTP서버에는 wheel그룹으로 묶여있었는데 지금 변경해야 할 그룹에선 안묶여 있었습니다...
묶여주니 바로 엑세스가 되는군요....

proftp에보면 defaultroot가 그룹으로 묶여있었거든요....결국 proftpd설정은 여전히 같지만
오에스설정에서 문제가 있었던 겁니다.....

저에게 영감을 떠올르게 해주셔서 감사합니다 ^^

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

wariua의 이미지

해결하셨다니 축하 드립니다! 영감을 떠올리시는 데에 도움이 되었다 하시니 뿌듯한 마음을 안고서, 괜한 잡담을 했다는 생각에 북그러움으로 상기된 얼굴을 하고서 도망가도록 하겠습니다. 역시 뭔가 막힐 때는 잡담 읽기나 산책 하기, 지뢰찾기 기록 깨기 같은 게 최고라지요 :)

& 그나저나 오늘 KLDP 사이트의 상태는 마치 DoS 공격이라도 받고 있는 듯한 느낌이네요. 무진장 느려지다가 괜찮아지고, 접속에 실패했다가 재시도 하면 곧 접속이 되고, 익명 사용자가 500명까지 올라가 있기도 하고, ...
----
$PWD `date`

$PWD `date`

mirr의 이미지

ㅎㅎ 그렇죠....오늘 KLDP사이트 오는게 너무 싫습니다.......
회선의 문제일까요? 아님 그동안 월드컵에 심취해 계셨던 모든 개발자 및 엔지니어분들 혹은 학도들께서
이렇다할 경기가 없으니 온통 몰려들었던것이든지요 :)

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.