- PR -

vsftpでのアクセス管理について

投稿者投稿内容
fourpsk
会議室デビュー日: 2003/06/28
投稿数: 8
投稿日時: 2005-04-18 02:07
vsftpについてご質問です。

■前提

・下記のディレクトリーに各種データがある。

 /var/ftp/a
 /var/ftp/b
 /var/ftp/c

・ユーザー1、ユーザー2、ユーザー3のユーザーがいる。
・各ユーザーは/var/ftpより上位へはアクセス出来ない(chrootの設定アリ)

■ご質問内容

各ユーザーの権限が下記の場合を実現させるには、
どのような設定を行えばよいでしょうか。

 ユーザー1は、/var/ftp配下全てにアクセス可能(rw)。
 ユーザー2は、/var/ftp/a、/var/ftp/bのみ可能。
 ユーザー3は、/var/ftp/aのみ読み書き可能。他のディレクトは表示させない。

 #ユーザー1・2までは、groupのパーミッションで何とかできるのですが、
 #ユーザー3の「ディレクトリを見せない」が実現出来ません。
 
 尚、上記が実現出来るのであればデータの置き場所は
 変更してしまってもOKです。
綾瀬
ぬし
会議室デビュー日: 2002/07/31
投稿数: 393
お住まい・勤務地: どっちも3階
投稿日時: 2005-04-18 10:22
こんにちは。

vsftpdは触ったこと無いので設定方法などはわかりませんが、
単純にユーザ3だけ/var/ftp/aでchrootさせるってのはダメなんでしょうか。
(ユーザ3のホームディレクトリを/var/ftp/aにすることになるんですかね?)
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-04-18 11:52
緻密なアクセス制御をするのであれば、ファイルシステム上に Posix ACL を設定しては如何でしょうか。

2.6系 kernel の機能ではありますが、2.4系にもバックポートされていたと記憶しています。
(実際、RHEL 3 の ext3 ファイルシステムで使用したことがあります)

関連情報としては、mount の acl オプションや、man 5 acl, man 1 getfacl, man 1 setfacl あたりでしょうか。

以上、ご参考まで。
fourpsk
会議室デビュー日: 2003/06/28
投稿数: 8
投稿日時: 2005-04-19 01:04
>>綾瀬様

ご返答有難う御座います。
ちょっと質問の仕方が良くなかったですね。

ユーザー3については、/var/ftp/aでchrootすれば、
var/ftp/aだけのアクセスになるのですが、
ユーザー2において、/var/ftp/a、b「のみ」を
表示される方法がないかなぁと思いまして、
ご質問させて頂いた次第です。

 =>つまり権限がないディレクトリーは表示させない。

ちなみに、WindowsのFTPサーバーソフトだと、
このユーザーは、/var/ftp/a、/var/ftp/bというように、
ユーザーごとに管理が出来たのですが、vsftpdでは、
それと同様な事を実現させるのは難しいのでしょうか・・・。

>>angel様

Posix ACL ですね。調べてみます。

勉強のつもりで、Linux弄っているので
面白そうなのでチャレンジしてみます。

#Kernelは2.6なので問題なさそうです。

でも、これだと権限管理は出来ても、
見えなくする事は難しそうですね。

ちょっと考えて見ます。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-04-19 01:41
不必要な部分は、ディレクトリの存在自体を見せない、という試みなのですね。
非常に面白そうなのですが、パーミッションやACLでの制御は難しそうですね。
ディレクトリの read 権限で調節するにしても、配下のファイル/ディレクトリを、全て見せるか/全て隠すか、の制御しかできないはずですし…

場合によっては、vsftpd本体の機能拡張が必要かもしれませんね。
# 権限の無いファイル/ディレクトリは表示しない、といったオプションがあれば…
# どなたか実装してみませんか?
fourpsk
会議室デビュー日: 2003/06/28
投稿数: 8
投稿日時: 2005-04-19 03:39
ちなみに、元データを一箇所に配置して、
ユーザーのhome(chroot)にシンボリックリンクを
張るという手を考えたのですが、これだとchrootの制限に
引っかかってしまい上手く行きませんでした。

# homeより上の階層にデータがないとシンボリックリンクをを辿れない。

chrootが適用されていても、シンボリックリンクに対しては、
無効に出来るよう(ApacheのFollowSymLinksみたいに)なると、
設定し易いのですが・・・。

引用:

場合によっては、vsftpd本体の機能拡張が必要かもしれませんね。
# 権限の無いファイル/ディレクトリは表示しない、といったオプションがあれば…
# どなたか実装してみませんか?



ぜひぜひ、お願いします。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2005-04-19 07:36
・/var/ftp/直下は読み取り不可
・/var/ftp/a/、/var/ftp/b/への移動は可能
で、特に困ることはないので...
/var/ftp/で/var/ftp/a/、/var/ftp/b/だけが見えるようにしたい、
というのなら「欲しい人が作ればあ?」とゆーことになるのでわ。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-04-19 09:40
引用:
投稿日時: 2005-04-19 07:36 ・/var/ftp/直下は読み取り不可
・/var/ftp/a/、/var/ftp/b/への移動は可能
で、特に困ることはないので...
/var/ftp/で/var/ftp/a/、/var/ftp/b/だけが見えるようにしたい、
というのなら「欲しい人が作ればあ?」とゆーことになるのでわ。


そうですね。必須とは言い難い機能ですから。
ただ、vsftpd の hide_file の延長のような形で、機能があっても面白そうだと思います。

実は、一つ方法は思いついたのですが、柔軟性が無いし、大規模になったときに対応できそうに無いので、言及していませんでした。
参考程度ですが、一応載せます。

# mkdir -p /home/real/{a,b,c}
# mkdir -p /home/x/{a,b,c}
# mkdir -p /home/y/{a,b}
# mkdir -p /home/z/a
# useradd -Md /home/x x
# useradd -Md /home/y y
# useradd -Md /home/z z
# mount -o bind /home/real/a /home/x/a
# mount -o bind /home/real/b /home/x/b
# mount -o bind /home/real/c /home/x/c
# mount -o bind /home/real/a /home/y/a
# mount -o bind /home/real/b /home/y/b
# mount -o bind /home/real/a /home/z/a

※vsftpd.conf では、chroot_local_user を有効にするか、chroot_list_enable を使用して、ユーザ x, y, z それぞれで chroot を有効にする。
※ディレクトリのパーミッションは適宜調節して下さい。

スキルアップ/キャリアアップ(JOB@IT)