- PR -

自作SecurityManagerについて

投稿者投稿内容
づか
会議室デビュー日: 2007/06/26
投稿数: 15
お住まい・勤務地: Tokyo, Japan
投稿日時: 2007-06-26 00:37
はじめまして。

自作で、Servletコンテナ上で動くアプリケーションサーバーを作っているのですが、バーチャルホスト向けにセキュリティーマネージャーを実装しようとしています。

UNIXのセキュリティーではプロセスごとに実行権限が決まってアクセスのポリシーが変わるので、そこをなんとか、スレッド(リクエストされたURL)ごとにアクセスポリシーを変えたいと考えています。デフォルトでは、どうにもならなさそうなので、java.lang.SecurityManagerクラスを拡張したクラスを作り、無理やり改造していこうと考えているのですが、何か、Javaではそういうスレッドごとのセキュリティーを考えた、もっとスマートなやりかたはありますでしょうか?

どなたか、JAVAのエキスパートの方がいらっしゃったら教えてください。
お願いいたします。

_________________
Alinous-Core SQL-HTML Language commiter
Tomohiro Iizuka
http://jp.alinous.org
https://sourceforge.jp/projects/alinous-core/
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-06-26 07:46
通常のロール指定ではだめなのですか?
づか
会議室デビュー日: 2007/06/26
投稿数: 15
お住まい・勤務地: Tokyo, Japan
投稿日時: 2007-06-26 10:06
杏さん、こんにちは

実は、僕の作っている言語には、JavaConnectorという機能があって、そこで、Jarファイルをホットデプロイ形式で読み込んで実行できるという仕様があります。そこで、読み込ませたJarファイル内でのファイルアクセスに対してセキュリティーをかけようと思っています。

もっと、詳しく言いますと、実は、レンタルサーバー用のアプリケーションサーバーとして開発しようとしていまして、


バーチャルホストA:ドキュメントルート=/usr/home/usrA/ALINOUS_HOME/
バーチャルホストB:ドキュメントルート=/usr/home/usrB/ALINOUS_HOME/

という感じでアパッチのようなドキュメントルートを設置できるようにして、バーチャルホストAの中のJARをHTTP経由でCGIみたいによんだときに、バーチャルホストAのドキュメントルートの外のファイルにアクセスをさせるのをとめたいと考えています。

これが出来れば、FTPだけあれば、共有サーバーでJavaのプログラムを動かせるようになるのですが、これが最後の砦になりそうです。

nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-06-26 10:42
興味深いことをされていますね。
環境はTomcatでしょうか?
実際の運用を考えると、VM全体でのセキュリティポリシーを設定した上で、かつ、個別の設定をするという形になるのでしょうか。

参考までにTomcatのセキュリティポリシーについてです。
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/security-manager-howto.html

私の場合はサーバを人に貸し出したりはしていないのでこのあたりの設定でとりあえず不満はないのですが、どういう部分をカスタマイズする必要性がでているのでしょう?
づか
会議室デビュー日: 2007/06/26
投稿数: 15
お住まい・勤務地: Tokyo, Japan
投稿日時: 2007-06-26 11:11
nagiseさんこんにちは

まず、Alinous-Coreサーバーの正体ですが、これは、alinous.warという普通のwarファイルで出来ています。
HPから、更新サイトを使ってEclipseプラグインで開発環境をダウンロードできるようにしてあるのですが、この環境ではWinstoneという、超軽量サーブレットコンテナをalinous.warをデプロイした状態で起動させています。

ちなみに、alinous.warのなかには、

・SQLコンパイラ+Alinous-Scriptコンパイラ
・HTMLコンパイラ
・属性コンパイラ
・サーバーサイドのデバッグ用エンジン

が乗っていて一式全部が一つのwarに入っています。

自分自身、本番運用は、warファイルをTomcatであれ、JBOSSであれ、なにかしらのサーブレットコンテナにデプロイして使ってもらえればよいと思っていました。ちなみに、この時、Alinous-CoreサーバーはHTTPサーバーで、ALINOUS_HOMEというアパッチでいうところの、ドキュメントルートであるpublic_htmlを、ALINOUS_HOMEという環境変数でつければ、そこの中のHTMLとAlinous-Scriptが動くし、その中の「ALINOUS_HOME/lib」には、Jarファイルをホットデプロイ形式でデプロイ出来るのですが、そのセキュリティーに関してはTomcatのセキュリティーにまかせればよいと思っていました。


ところが、想定外な要求があって、ホスティングを行う業者は、Tomcatのプロセスを何百本も立てたくないのです。一つのプロセスで複数のドキュメントルートを扱えるようにしてあげないと、使ってもらえないのです。

そこで、一番問題になるのが、ホットデプロイ形式でJavaのメソッドをそのままAlinous-Scriptに組み込めるJavaConnectorという機能が癌になりました。というのは、一つのTomcatで複数ユーザー(ホスト)で同じポリシーだと他のユーザーのファイルにまで触れてしまうというセキュリティーホールが出来てしまいます。

Tomcatのこのご紹介いただいたセキュリティーポリシーで、いけるかどうか、僕自身も調べてみます。アドバイスありがとうございます。

でも、なんだか、中途半端にサーブレットコンテナを使っているのと、わたし自身が結構、J2EEに関して素人なのと、要求されている機能が想定外なのが癌なような気がしてきました。「Tomcatを再起動しなくても、バーチャルホストの追加が出来るようにして欲しい」とか言われそうなので、もうちょっとその辺も考慮して考えてみたいと思います。

ほかにも、何か参考になりそうな情報がありましたら、お願いします。




朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-06-26 12:44
コンテキストの設定で可能かと
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-06-26 13:06
引用:

杏さんの書き込み (2007-06-26 12:44) より:
コンテキストの設定で可能かと



私の記憶ではそのようなことは出来ないと思っていましたので確認して見たのですが
http://tomcat.apache.org/tomcat-5.0-doc/config/context.html
Contextの設定でSecurityManagerについて設定する項目は存在しません。
可能なのであれば有用な情報ですので是非情報ソースを提示いただきたい。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-06-26 13:25
引用:

づかさんの書き込み (2007-06-26 11:11) より:
まず、Alinous-Coreサーバーの正体ですが、これは、alinous.warという普通のwarファイルで出来ています。
HPから、更新サイトを使ってEclipseプラグインで開発環境をダウンロードできるようにしてあるのですが、この環境ではWinstoneという、超軽量サーブレットコンテナをalinous.warをデプロイした状態で起動させています。

ちなみに、alinous.warのなかには、

・SQLコンパイラ+Alinous-Scriptコンパイラ
・HTMLコンパイラ
・属性コンパイラ
・サーバーサイドのデバッグ用エンジン

が乗っていて一式全部が一つのwarに入っています。



ホームページのほうも拝見させていただきました。
Alinous自身がJ2EEコンテナ上に配備されて動くWebアプリケーションになるのですよね?
この前提はプラットホームを選ばない反面、やれることに大きな制約が付きますので以下の要件は難しいかもしれません。


引用:

ところが、想定外な要求があって、ホスティングを行う業者は、Tomcatのプロセスを何百本も立てたくないのです。一つのプロセスで複数のドキュメントルートを扱えるようにしてあげないと、使ってもらえないのです。



運用側の方の視点は随分と違いますよね。私もよく勉強させられます。
まず、「一つのプロセスで〜」の部分なのですが、
顧客別にJ2EEコンテナレベルでのコンテキストを作る前提ですか?
それとも単一コンテキストで複数の顧客を扱う前提でしょうか?

Javaが扱えるホンティング業者は私はよく知らないのですが、
管理上の理由から1顧客1コンテキストとしているのかなと思っています。
というのはデプロイメントディスクリプタの扱いの関係からなのです。
動的部分がJSPのみであればまだしも、Servletを扱わせるのであれば
web.xmlの編集は通常必須になるところですから。
(InvokServletによる呼び出しならweb.xmlはいじらなくても動きますが…)

もし、コンテキストが分かれるのであれば、比較的手を打ちやすいと思います。
ファイルリソースの読み込みはClassLoaderから行わせることで
該当コンテキスト配下のみを参照範囲と出来ますし、一時ファイルなどの書き出しは
File.createTempFile()に制約する方策が考えられますので。

同一コンテキストで複数顧客を扱いたいとなると、より上位で提供されている
機構を利用することが出来ないわけですから、権限制約は非常に難しくなるのではないでしょうか。

引用:

そこで、一番問題になるのが、ホットデプロイ形式でJavaのメソッドをそのままAlinous-Scriptに組み込めるJavaConnectorという機能が癌になりました。というのは、一つのTomcatで複数ユーザー(ホスト)で同じポリシーだと他のユーザーのファイルにまで触れてしまうというセキュリティーホールが出来てしまいます。


このあたり、同一コンテキストならではの問題ですよね?

引用:

「Tomcatを再起動しなくても、バーチャルホストの追加が出来るようにして欲しい」とか言われそうなので、もうちょっとその辺も考慮して考えてみたいと思います。


こちらは無理ではないでしょうか。Tomcatの場合ですとTomcat自身の動作を設定するserver.xmlの編集ということになりますので、再起動なしには不可能では?
(AdminのマネージャでWeb上から設定できましたっけ?場合によっては可能性がある?)
いずれにせよ、どのJ2EEコンテナでも動くように、とはいかないでしょう。
Apache - Tomcat連携している環境なら、なお無理だと思います。

[ メッセージ編集済み 編集者: nagise 編集日時 2007-06-26 13:25 ]

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