この発明は、利用者端末とCIFSまたはNFSで接続され、利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定するアクセス制御プログラムに関する。
従来より、膨大な電子データを生産する情報社会において、多種多様なクライアントに対してこのような電子データを共有させるNAS(Network Attached Storage)などのファイルサーバが、重要な技術となっている。
また、多種多様なクライアントがNASへアクセスするために利用するファイルアクセスプロトコルとしては、UNIX(登録商標)系クライアント用のNFS(Network File System)と、Windows(登録商標)系クライアント用のCIFS(Common Internet File System)の二種類が主流となっている。
そして、NFSを利用するクライアントと、CIFSを利用するクライアントとの両方のクライアントが存在する環境においてファイルサーバを導入する場合、プロトコルによって利用できるアクセス権限の内容(アクセス制御)が異なるため、それぞれのプロトコルに対応した別々のファイルサーバを導入する必要があり、コストの拡大に繋がっていた。そこで、NFSとCIFSとの両方のプロトコルに対応できるファイルサーバを開発する様々な技術が開示されている。
例えば、特許文献1では、従来のUNIX(登録商標)サーバやWindows(登録商標)サーバなどのソフトウエア資産にとらわれず、新しくファイルサーバを開発する技術が開示されている。この開示された技術では、CIFSを利用するクライアントに対して正しいアクセス制御を実施している。
また、GPL(General Public License)のソフトウエアであるSambaを用いた技術としては、元来NFSプロトコルのみ対応するUNIX(登録商標)系のOS(Operating System)を用いて、CIFSに対応したファイルサーバを開発する技術がある(非特許文献1参照)。具体的には、Sambaは、NFSを利用するクライアントとCIFSを利用するクライアントとの両方のクライアントに対して、標準的なUNIX(登録商標)またはPOSIX−ACL(Portable Operating System Interface for UNIX(登録商標)−Access Control List)に備わっている基本権限「参照権、更新権、実行権」に基づいてアクセス制御を実施する。
しかしながら、上記した従来の技術である特許文献1では、ファイルサーバを開発するまでに非常に多くの工数がかかるという課題があった。具体的には、既存のUNIX(登録商標)サーバとWindows(登録商標)サーバとの両方の機能およびアクセス制御を一つのファイルサーバ内に開発する必要があるので、ファイルサーバを開発するのに非常に多くの工数がかかる。
また、上記した従来の技術である非特許文献1では、正確なアクセス制御を実現できないという課題があった。具体的には、CIFSを用いるWindows(登録商標)系のアクセス権限には、標準的なUNIX(登録商標)またはPOSIX−ACLに備わっている基本権限「参照権、更新権、実行権」に加え「属性更新権、サブディレクトリ作成権」などの細かな権限が存在する。そのため、非特許文献1では、これらの細かな権限を持つCIFS(Windows(登録商標)系)のアクセス制御を、基本権限のみを持つNFS(UNIX(登録商標)系)のアクセス権限に対応付けることでアクセス制御を実現しているので、正確性に欠けることとなり、Windows(登録商標)系のアクセス権限を正確に制御することができない。
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、正確なアクセス制御を備えたファイルサーバを、従来技術に比べ少ない工数で開発することが可能となるアクセス制御プログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、本発明は、利用者端末とCIFSまたはNFSで接続され、前記利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定することをコンピュータに実行させるアクセス制御プログラムであって、前記ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示すアクセス制御情報を記憶するアクセス制御情報記憶手段と、前記NFSで使用されるアクセス要求の基本権限であって、前記CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた前記基本権限が許可されているか否かを、前記アクセス制御情報記憶手段に記憶されるアクセス制御情報それぞれに対して前記基本権限を対応付けたアクセス制御情報を参照して判定する第一のアクセス制御手順と、前記第一のアクセス制御手順により許可された基本権限の元のアクセス要求に対して、前記アクセス制御情報記憶手段に記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定する第二のアクセス制御手順と、をコンピュータに実行させることを特徴とする。
また、本発明は、上記の発明において前記第一のアクセス制御手順は、前記CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた基本権限が、前記基本権限に対応付けたアクセス制御情報の一つ以上の構成要素に許可されていた場合に、当該基本権限を許可すると判定し、全ての構成要素に拒否されていた場合に、当該基本権限を拒否すると判定することを特徴とする。
また、本発明は、上記の発明において、前記アクセス制御情報記憶手段は、前記ファイルシステム上の各オブジェクトに関する情報を記憶するinodeの拡張属性領域に、前記アクセス制御情報を記憶することを特徴とする。
また、本発明は、利用者端末とCIFSまたはNFSで接続され、前記利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定することをコンピュータに実行させるアクセス制御プログラムであって、前記CIFSで接続される利用者端末からファイル作成要求を受け付けた場合に、当該ファイル作成要求に応答してファイル作成を行うシステムコールを発行する前に、前記ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示す当該ファイル用のアクセス制御情報を、当該システムコールとは異なるIOコントロールを介して発行するアクセス制御情報発行手順と、前記アクセス制御情報発行手順によりIOコントロールを介して発行されたアクセス制御情報を、前記ファイルシステム上のinodeの拡張属性領域に格納する格納処理を実行するのに際して、前記ファイルシステムで実施される各メタデータ更新処理のための各ジャーナルと同一ジャーナルセッションで括って、前記格納処理を実行する格納処理手順と、前記CIFSで接続される利用者端末からアクセス要求を受け付けた場合に、前記格納処理手順によってファイルシステムに格納されたアクセス制御情報に基づいて、当該アクセス要求を許可するか否かを判定するアクセス制御手順と、をコンピュータに実行させることを特徴とする。
また、本発明は、上記の発明において、前記CIFSで接続される利用者端末からアクセスされるファイルシステムのボリュームに関して、前記ファイルシステムのルートディレクトリおよびメタデータに関するインターフェースをフックし、当該マウント先のディレクトリに関するインターフェースをフックするのに際して、当該ディレクトリ直下のファイルに関するインターフェースをフックすることで、前記マウントされたボリュームに関するファイルシステムインターフェースを過不足なくフックするフック制御手順をさらにコンピュータに実行させることを特徴とする。
また、本発明は、上記の発明において、前記フック制御手順は、前記CIFSで接続される利用者端末からアクセスされるファイルシステムのボリュームに関して、当該ボリュームをマウントするマウント要求に含まれるマウントオプションにフック対象であることを示す識別子が付加されている場合にのみ、当該ボリュームがフック対象であると判定することを特徴とする。
また、本発明は、上記の発明において、前記フック制御手順は、フック中のボリューム数をフックドライバ内部でカウントし、このカウントが残るうちは、ドライバのアンロードを禁止することを特徴とする。
また、本発明は、上記の発明において、前記格納処理手順は、前記アクセス制御情報をファイルシステム上のinodeの拡張属性領域に格納する場合に、前記IOコントロールにおいて、当該アクセス制御情報と共にコンテキストをカーネル内フックドライバに一時的に格納し、前記システムコールにおいて、当該コンテキストが一致しているかを判定し、当該アクセス制御情報が前記アクセス制御情報受付手順により受け付けられた正当なアクセス制御情報であることを条件として、前記拡張属性領域に格納することを特徴とする。
本発明によれば、ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示すアクセス制御情報を記憶し、NFSで使用されるアクセス要求の基本権限であって、CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた基本権限が許可されているか否かを、記憶されるアクセス制御情報それぞれに対して基本権限を対応付けたアクセス制御情報を参照して判定し、許可された基本権限の元のアクセス要求に対して、記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定するので、正確なアクセス制御を備えたファイルサーバを、従来技術に比べ少ない工数で開発することが可能である。
例えば、UNIX(登録商標)系システムの従来からの内部インターフェース仕様の都合で、アクセス要求を「参照権、更新権、実行権」の三種類でしかチェックすることができないが、Windows(登録商標)系のCIFSで接続される利用者端末から受信したUNIX(登録商標)系のアクセス要求をさらに詳細に分類されたアクセス要求に対しても、一度、UNIX(登録商標)系のアクセス要求に変換し、その後、詳細なアクセス要求を判定することができる結果、UNIX(登録商標)系のアクセス要求に強引に対応付けたまま処理する必要がなく、詳細なアクセス要求のまま処理することができるので、正確なアクセス制御を実現することが可能である。
また、Windows(登録商標)やUNIX(登録商標)に依存することのない独自のファイルサーバを開発する必要がなく、UNIX(登録商標)系のOSを利用してファイルサーバを開発して、両方の利用者端末からのアクセスを制御することができる結果、開発までに要する工数を短縮することが可能である。
また、本発明によれば、CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた基本権限が、基本権限に対応付けたアクセス制御情報の一つ以上の構成要素に許可されていた場合に、当該基本権限を許可すると判定し、全ての構成要素に拒否されていた場合に、当該基本権限を拒否すると判定するので、はじめにアクセス要求を甘めに制御し、次に詳細にアクセス制御することができる結果、より正確なアクセス制御を実現することが可能である。
例えば、UNIX(登録商標)系システムの従来からの内部インターフェース仕様の都合で、アクセス要求を「参照権、更新権、実行権」の三種類でしかチェックすることができないため、Windows(登録商標)系のCIFSで接続される利用者端末から受信した詳細に分類されたアクセス要求をUNIX(登録商標)系に置き換えて、第一のアクセス制御手段で厳しく、強引に判定すると、本当なら許可されるべきであった詳細なアクセス要求を拒否することになる恐れがある。そこで、はじめにアクセス要求を甘めに制御し、次に詳細にアクセス制御することで、このような誤判定を防止することができる結果、より正確なアクセス制御を実現することが可能である。
また、本発明によれば、ファイルシステム上の各オブジェクトに関する情報を記憶するinodeの拡張属性領域に、アクセス制御情報を記憶し、その拡張領域として、データフォーマットがあらかじめ定まっているPOSIX−ACL/LIDS・SELINUXなどを使用せず、USER領域を使用することで、任意のデータフォーマットを使用することができるので、ファイルシステムやVFSの修正を最小限に留めることが可能である。
また、本発明によれば、CIFSで接続される利用者端末からファイル作成要求を受け付けた場合に、当該ファイル作成要求に応答してファイル作成を行うシステムコールを発行する前に、ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示す当該ファイル用のアクセス制御情報を、当該システムコールとは異なるIOコントロールを介して発行し、IOコントロールを介して発行されたアクセス制御情報を、ファイルシステム上のinodeの拡張属性領域に格納する格納処理を実行するのに際して、ファイルシステムで実施される各メタデータ更新処理のための各ジャーナルと同一ジャーナルセッションで括って、格納処理を実行し、CIFSで接続される利用者端末からアクセス要求を受け付けた場合に、ファイルシステムに格納されたアクセス制御情報に基づいて、当該アクセス要求を許可するか否かを判定するので、アトミック性が保証されたアクセス制御情報を用いてアクセス制御を実施することができる結果、UNIX(登録商標)系のアクセス要求に強引に対応付けたまま処理する必要がなく、詳細なアクセス要求のまま処理することができるので、より正確なアクセス制御を実現することが可能である。
また、本発明によれば、CIFSで接続される利用者端末からアクセスされるファイルシステムのボリュームに関してファイルシステムのルートディレクトリおよびメタデータに関するインターフェースをフックし、当該マウント先のディレクトリに関するインターフェースをフックするのに際して、当該ディレクトリ直下のファイルに関するインターフェースをフックすることで、前記マウントされたボリュームに関するファイルシステムインターフェースを過不足なくフックするので、インターフェース関数ベクターを改ざんするのではなく、そのポインタ元(スーパーブロックやinode)のポインタを改ざん版インターフェース関数ベクターへリダイレクトすることができる結果、ボリューム限定のフック設定を実現すると共に、フック対象外ボリュームとのフック設定処理に関する排他制御を不要化することが可能である。
また、本発明によれば、CIFSで接続される利用者端末からアクセスされるファイルシステムのボリュームに関して当該ボリュームをマウントするマウント要求に含まれるマウントオプションにフック対象であることを示す識別子が付加されている場合にのみ、当該ボリュームがフック対象であると判定するので、無関係なボリュームに関するフックの設定を回避することが可能である。
また、本発明によれば、フック中のボリューム数をフックドライバ内部でカウントし、このカウントが残るうちは、ドライバのアンロードを禁止するので、フックの中途離脱(FSインターフェースのリダイレクト先の消滅によるパニック停止)を防止することが可能である。
また、本発明によれば、アクセス制御情報をファイルシステム上のinodeの拡張属性領域に格納する場合に、IOコントロールにおいて、当該アクセス制御情報と共にコンテキストをカーネル内フックドライバに一時的に格納し、システムコールにおいて、当該コンテキストが一致しているかを判定し、当該アクセス制御情報が受け付けられた正当なアクセス制御情報であることを条件として、拡張属性領域に格納するので、IOコントロールとシステムコールの関連を適切に判断することが可能である。
以下に添付図面を参照して、この発明に係るアクセス制御プログラムの実施例を詳細に説明する。なお、以下では、本実施例で用いる主要な用語、本実施例に係るファイルサーバの概要および特徴、ファイルサーバの構成および処理の流れを順に説明し、最後に本実施例に対する種々の変形例を説明する。
本実施例で用いる「ファイルサーバ(特許請求の範囲に記載の「アクセス制御プログラム」に対応する。)」とは、自装置が管理しているデータベースなどをLAN(Local Area Network)やWAN(Wide Area Network)などのネットワーク上の他のコンピュータ装置と共有し、外部からでも当該データベースを利用できるようにするコンピュータ装置であり、例えば、NAS(Network Attached Storage)などがこれに該当する。
「ファイルサーバ」上にファイルを配置することで、ファイルサーバに接続されるコンピュータが自由にファイルを閲覧したり更新したりする操作を行うことができ、以前まで行われていたコンピュータ間でのファイルの移動や更新管理などの煩雑な作業を解消することができ、データ(ファイル)の管理が飛躍的に容易になる。
また、ファイルサーバを利用する利用者端末としては、Windows(登録商標)系のCIFS(Common Internet File System)を利用して接続する端末や、UNIX(登録商標)系のNFS(Network File System)を利用して接続する端末などがある。CIFSやNFSは、ファイルサーバを利用するためのプロトコルであり、これらのプロトコル間では、指定できるアクセス権限が異なる。具体的には、CIFSを利用する場合、NFSに比べてより細かなアクセス権限の制御が可能である。
そのため、これらのプロトコルが混在する環境で「ファイルサーバ」を利用するために、CIFSのアクセス権限にNFSのアクセス権限を当てはめることで、両方のクライアントからのアクセスを制御していた。ところが、CIFSのアクセス権限にNFSのアクセス権限を当てはめることとは、つまり、CIFSの細かなアクセス権限を無理やりNFSのアクセス権限で制御することとなり、CIFSのアクセス権限を正確に制御できていない。具体的には、ファイルサーバは、CIFSのアクセス権限をNFSのアクセス権限の基本権限である「READ、WRITE、EXEC」の三種類に当てはめて制御する必要があった。
このようなことから、CIFSならば「アクセス拒否」となるはずのアクセス要求が、「アクセス許可」と制御されるような事象が起こっていた。そのため、これらのプロトコルが混在する環境で「ファイルサーバ」を利用する場合に、NFSのアクセス権限とCIFSのアクセス権限との両方を正確に制御することができるファイルサーバが切望されている。なお、本実施例では、ファイル作成要求としてディレクトリ作成要求を例にして説明するが、本発明はこれに限定されるものではなく、例えば、デバイスファイル、SOCKETファイルなどのファイル作成要求であっても本実施例を適用することができ、さらに、ファイル作成要求他に一般的なUNIX(登録商標)のシステムコールにも適用することができる。
[ファイルサーバの概要および特徴]
次に、図1を用いて、実施例1に係るファイルサーバの概要および特徴を説明する。
このシステムは、上記したように、ユーザID「3394」が割り振られた利用者端末Aと、ユーザID「2200」が割り振られた利用者端末Bと、ファイルサーバとがネットワークで相互に通信可能に接続されている。また、利用者端末AとファイルサーバとはCIFSで接続されており、利用者端末BとファイルサーバとはNFSで接続されている。
そして、ファイルサーバは、図2に示すように、アクセス要求先となるファイルシステムに対して、利用者端末が様々なアプリケーションから利用できるようにするVFS(Virtual File System)を起動しており、さらに、CIFSを利用したアクセス要求を受け付けるためのプログラム(デーモン)としてSambaのプログラムであるsmbdを起動しており、同様に、NFSを利用したアクセス要求を受け付けるためのnfsdを起動している。また、このファイルサーバは、UNIX(登録商標)系OS(Operating System)で使用されるアクセス制御情報を記憶している。なお、ここで示すアクセス制御とは、VFS/ext3の間に割り込んでNT−ACL制御(アクセス制御)を実施するためのフックドライバである。
このような構成において、このファイルサーバは、上記したように、利用者端末とCIFSまたはNFSで接続され、利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かをファイルシステムの代わりに独自のアクセス制御で判定することを概要とするものであり、特に、正確なアクセス制御を備えたファイルサーバを、従来技術に比べ少ない工数で開発することが可能である点に主たる特徴がある。
この主たる特徴を具体的に説明すると、ファイルサーバは、ファイルシステムの各オブジェクトに対してアクセスを許可するか拒否するかを示すアクセス制御情報をアクセス制御情報DBに記憶する。具体的に例を挙げれば、ファイルサーバは、「ALLOW FILE_WRITE_DATA 3394」、「DENY FILE_WRITE_EA 3394」や「ALLOW FILE_WRITE_EA 2211」などをアクセス制御情報としてアクセス制御情報DBに記憶する。なお、ここで示した「ALLOW FILE_WRITE_DATA 3394」とは、ユーザID「3394」からのデータの書き込み「FILE_WRITE_DATA」を許可する(ALLOW)ことを示し、「DENY FILE_WRITE_EA 3394」とは、ユーザID「3394」からの拡張属性の書き込み「FILE_WRITE_EA」を拒否する(DENY)ことを示し、「ALLOW FILE_WRITE_EA 2211」とは、ユーザID「2211」からの拡張属性の書き込み「FILE_WRITE_EA」を許可する(ALLOW)ことを示している。
このような状態において、ファイルサーバは、CIFSで接続される利用者端末からアクセス要求を受け付けた場合に、当該アクセス要求を、NFSで使用されるアクセス要求の基本権限である参照権、更新権、実行権のいずれかに対応付ける(図1の(1)と(2)参照)。上記した例で具体的に説明すると、ファイルサーバは、CIFSで接続される利用者端末Aからアクセス要求「SETPATHINFO」を受け付ける。すると、ファイルサーバは、当該アクセス要求に対応する権限である「FILE_WRITE_EA」が「拡張属性の書き込み」であることより、当該「FILE_WRITE_EA」をNFSで使用されるアクセス要求の基本権限である参照権、更新権、実行権の「更新権(Write)」に対応付ける。
続いて、ファイルサーバは、アクセス制御情報DBに記憶されるアクセス制御情報それぞれに対して基本権限の対応付けを行い、対応付けられた基本権限が、基本権限に対応付けたアクセス制御情報の一つ以上の構成要素に許可されていた場合に、当該基本権限を許可すると判定し、全ての構成要素に拒否されていた場合に、当該基本権限を拒否すると判定する(図1の(3)参照)。上記した例で具体的に説明すると、ファイルサーバは、アクセス要求「SETPATHINFO」の権限「FILE_WRITE_EA」が基本権限「Write」に対応付けられると、アクセス制御情報DBに記憶されるアクセス制御情報それぞれに対して基本権限の対応付けを行う。例えば、ファイルサーバは、アクセス制御情報DBに記憶される「ALLOW FILE_WRITE_DATA 3394」を「ALLOW Write」と対応付けたり、「DENY FILE_WRITE_EA 3394」を「DENY Write」と対応付けたりする。
そして、ファイルサーバは、対応付けられた基本権限「Write」が対応付けられたアクセス制御情報の一つ以上の構成要素に許可されているか、または、全ての構成要素に拒否されているかを判定する。ここでは、ファイルサーバは、アクセス制御情報を一番初めから参照していき、「ALLOW Write(ALLOW FILE_WRITE_DATA 3394)」が記憶されていることより、対応付けられた基本権限「Write」が許可されていると判定する。
そして、ファイルサーバは、許可された基本権限の元のアクセス要求に対して、アクセス制御情報DBに記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定する(図1の(4)参照)。上記した例で具体的に説明すると、ファイルサーバは、許可された基本権限「Write」の元のアクセス要求「SETPATHINFO」の権限である「FILE_WRITE_EA」に対して、アクセス制御情報DBに記憶されるアクセス制御情報を参照していき、アクセス制御情報に「DENY FILE_WRITE_EA 3394」が含まれていることより、当該権限「FILE_WRITE_EA」を拒否する。そして、ファイルサーバは、当該アクセス要求を拒否したことを示す拒否応答を利用者端末Aに送信する(図1の(5)参照)。
このように、実施例1に係るファイルサーバは、上記した主たる特徴のごとく、正確なアクセス制御を備えたファイルサーバを、従来技術に比べ少ない工数で開発することが可能である。
[ファイルサーバの構成]
次に、図3を用いて、図1に示したファイルサーバの構成を説明する。図3に示すように、このファイルサーバは、smbd11と、nfsd12と、VFS13と、アクセス制御情報DB14と第一アクセス制御部15と第二アクセス制御部16とから構成されるフックドライバと、ファイルシステム17とから構成される。
smbd11は、CIFSで接続される利用者端末からアクセス要求を受け付けた場合に、当該アクセス要求を、NFSで使用されるアクセス要求の基本権限である参照権、更新権、実行権のいずれかに対応付ける。上記した例で具体的に説明すると、smbd11は、CIFSで接続される利用者端末Aからアクセス要求「SETPATHINFO」を受け付ける。すると、smbd11は、当該アクセス要求を「拡張属性の書き込み」として解釈し、VFS13へ要求する。
nfsd12は、NFSで接続される利用者端末からアクセス要求を受け付けた場合に、当該アクセス要求を、後述するVFS13に出力する。具体的に例を挙げれば、nfsd12は、NFSで接続される利用者端末からアクセス要求「mkdir」を受け付けた場合に、当該アクセス要求を後述するVFS13に出力する。
VFS13は、ファイルシステム17の上位に位置する抽象化層であり、利用者端末が様々なアプリケーションを用いてファイルシステムにアクセスできるようにする。上記した例で具体的に説明すると、VFS13は、smbd11から受け付けた「拡張属性の書き込み」をNFSで使用されるアクセス要求の基本権限である参照権、更新権、実行権の「更新権(Write)」に対応付け、この基本権限「Write」のアクセス可否を判定するように後述する第一アクセス制御部15に指示する。そして、VFS13は、後述する第二アクセス制御部16によって実行された結果を受け付けて、当該結果を利用者端末に送信する。
例えば、第二アクセス制御部16によって「mkdir」が実行されると、VFS13は、ファイルが作成されたことを利用者端末に送信し、また、利用者端末から受け付けられたアクセス要求が第二アクセス制御部16によって「拒否」されると、VFS13は、その旨の応答を利用者端末に送信する。
アクセス制御情報DB14は、ファイルシステム17の各オブジェクトに対してアクセスを許可するか拒否するかを示すアクセス制御情報を記憶する。上記した例で具体的に説明すると、図4に示すように、アクセス制御情報DB14は、「ALLOW FILE_LIST_DIRECTORY 3394」、「ALLOW FILE_READ_EA 3394」や「DENY WRITE_OWNER 3394」などを記憶する。なお、ここで示した「ALLOW FILE_LIST_DIRECTORY 3394」とは、ユーザID「3394」からのディレクトリにあるファイル一覧を参照することを「FILE_LIST_DIRECTORY」を許可する(ALLOW)ことを示し、「ALLOW FILE_READ_EA 3394」とは、ユーザID「3394」の拡張属性の読み出し「FILE_READ_EA」を許可する(ALLOW)ことを示し、「DENY WRITE_OWNER 3394」とは、ユーザID「3394」が現在操作しているファイルの所有者になることを「WRITE_OWNER」を拒否する(DENY)ことを示している。
また、ここで記憶されている「ALLOW FILE_READ_EA 3394」などの情報一つ一つをACE(Access Control Entry)と呼ぶ。また、ここで示した各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。また、アクセス制御情報DB14は、特許請求の範囲に記載の「アクセス制御情報記憶手段」に対応する。
第一アクセス制御部15は、対応付けられた基本権限「Write」が対応付けられたアクセス制御情報の一つ以上の構成要素に許可されているか、または、全ての構成要素に拒否されているかを判定する。上記した例で具体的に説明すると、第一アクセス制御部15は、VFS13から判定指示を受け付け、対応付けられた基本権限「Write」がアクセス制御情報DBに記憶されるアクセス制御情報の一つ以上の構成要素に許可されているか、または、全ての構成要素に拒否されているかを判定し、その判定結果をVFS13に出力する。ここでは、ファイルサーバは、アクセス制御情報を一番初めから参照していき、「ALLOW FILE_WRITE_DATA 3394」が記憶されていることより、対応付けられた基本権限「Write」が許可されていると判定する。なお、第一アクセス制御部15は、特許請求の範囲に記載の「第一のアクセス制御手順」に対応する。
第二アクセス制御部16は、許可された基本権限の元のアクセス要求に対して、アクセス制御情報DB14に記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定する。上記した例で具体的に説明すると、第二アクセス制御部16は、VFS13から「FILE_WRITE_DATA」に対応する基本権限「Write」が許可されたことが通知されると、許可された基本権限「Write」の元のアクセス要求の権限「FILE_WRITE_DATA」に対して、アクセス制御情報DB14に記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定する。この場合、第二アクセス制御部16は、アクセス制御情報DB14にACE「FILE_WRITE_DATA 3394」が記憶されていることより、当該アクセス要求を拒否し、拒否した旨をVFS13に出力する。一方、当該アクセス要求を許可した場合、第二アクセス制御部16は、VFS13を介してファイルシステム17にディレクトリ作成の実行を指示する。なお、第二アクセス制御部16は、特許請求の範囲に記載の「第二のアクセス制御手順」に対応する。
ファイルシステム17は、OS(Operating System)が持つコンピュータの資源を操作するためのデータ、デバイス、プロセスやカーネルを備え、データの操作(アクセス、検索など)を実施するものであり、例を挙げると、ext2(second extended filesystem)やext3(third extended filesystem)などである。
[ファイルサーバによる処理]
次に、図5〜7を用いて、ファイルサーバによる処理を説明する。
(アクセス要求判定処理のフローチャート)
図5に示すように、CIFSで接続される利用者端末からアクセス要求を受信すると(ステップS501肯定)、ファイルサーバのsmbd11は、当該アクセス要求に基づくI/O要求をVFS13に発行する。VFS13は、当該I/O要求をNFSで使用されるアクセス要求の基本権限である参照権、更新権、実行権のいずれかに対応付ける(ステップS502)。
そして、VFS13は、対応付けられた基本権限のアクセス可否を判定するように、第一アクセス制御部15に指示する。第一アクセス制御部15は、アクセス制御情報DB14に記憶されるアクセス制御情報それぞれに対して基本権限の対応付けを行い、対応付けられた基本権限が、基本権限に対応付けたアクセス制御情報の一つ以上の構成要素に許可されていた場合に、当該基本権限を許可すると判定し、全ての構成要素に拒否されていた場合に、当該基本権限を拒否すると判定し、判定結果をVFS13に応答する(ステップS503)。
そして、VFS13は、第一アクセス制御部15からの応答がアクセス許可であった場合、(ステップS503肯定)、第二アクセス制御部に対して、許可された基本権限の元のアクセス要求の詳細なアクセス可否の判定を指示する。指示を受けた第二アクセス制御部16は、アクセス制御情報DB14に記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定する(ステップS504)。
当該アクセス要求を許可すると判定すると(ステップS504肯定)、第二アクセス制御部16は、I/O処理結果応答(アクセス許可応答)として、VFS13を介してファイルシステム17に指示したディレクトリ作成処理の結果を、同じくVFS13を介してsmbd11に通知する(ステップS505)。一方、当該アクセス要求を拒否すると判定すると(ステップS504否定)、第二アクセス制御部16は、アクセス拒否応答として、VFS13を介して、当該アクセス要求が拒否されたことをsmbd11に通知する(ステップS506)。
また、ステップS503に戻り、基本権限が拒否されると判定すると(ステップS503否定)、VFS13は、当該アクセス要求に対してアクセス拒否応答を行う(ステップS506)。
(アクセス要求判定処理のシーケンス)
次に、図6を用いて、CIFSでアクセス要求を受信した場合のファイルサーバ内での処理シーケンスについて説明する。また、ここでは、ファイルサーバが、利用者端末より「ディレクトリ作成」のアクセス要求を受信した場合について説明する。
図6に示すように、CIFSでアクセス要求を受信したSambaのプログラムであるsmbd11は、VFS13に対してシステムコール「sys_mkdir」を実行する(ステップS601)。すると、VFS13は、アクセス制御部(フックドライバ)に対してFSIF(File System InterFace)を実行する(ステップS602)。また、ここで示すアクセス制御部(フックドライバ)とは、上記したアクセス制御情報DB14、第一アクセス制御部15、第二アクセス制御部16とから構成されるものとする。
続いて、アクセス制御部は、ファイルシステム17に対してのFSIF「ext3_xattr_user_get」を実行して、拡張属性領域(ユーザ区分)を取得し、VFS13によってシステムコールが対応付けられた基本権限「Read、Write、Exec」を許可するか否かを判定し、その結果をVFS13に通知する(ステップS603〜ステップS606)。ここでは、アクセス制御部により、基本権限が許可されたとする。
そして、基本権限が許可された旨を通知されたVFS13は、アクセス制御部に対してFSIF(mkdir)を実行する(ステップS607)。すると、アクセス制御部は、ファイルシステムに対してのFSIF「ext3_xattr_user_get」を実行して、拡張属性領域(ユーザ区分)を取得するとともに、FSIF(mkdir)が許可されているか否かを判定する(ステップS608〜ステップS610)。
そして、FSIF(mkdir)が許可されていると判定すると、アクセス制御部は、ファイルシステムに「ディレクトリ作成」FSIFである「ext3_mkdir」を実行し、その結果を取得してVFS13に出力し、VFS13は、受け付けた結果をsmbd11を介して利用者端末に送信する(ステップS611〜ステップS614)。
(アクセスリストの評価ルール)
次に、受信したアクセス要求に対して許可するか拒否するかを判定する場合の処理は、一般的なアクセスリスト評価ルールに基本的に従って実施されるので、ここでは、図7を用いて、一般的なアクセス評価ルールの流れについて説明する。
図7に示すアクセス評価ルールでは、要求する全要求権限に対して、これを許可するACEが検出されるまで、または、要求する権限のうち、一つでも拒否するACEが検出されるまで、アクセス制御情報DB14に記憶されるACE配列を先頭から順に走査する。例えば、アクセス評価ルールでは、FSIF(mkdir)が要求する唯一の権限「FILE_ADD_SUBDIRECTORY」に対して、これを許可するACE「ALLOW FILE_ADD_SUBDIRECTORY」が検出されるまで、またはこれを拒否するACE「DENY FILE_ADD_SUBDIRECTORY」が検出されるまで、アクセス制御情報DB14に記憶されるACE配列を先頭から順に走査する。
図7に示すように、アクセス要求を受信したファイルサーバは、アクセス制御情報DB14に当該アクセス要求の対象となるファイルに関する情報(ACL)が記憶されているか否かを判定する(ステップS701)。
そして、記憶されていると判定すると(ステップS701肯定)、ファイルサーバは、アクセス制御情報DB14に記憶されているACLで参照されていない未評価のACEが存在するか否かを判定する(ステップS702)。
未評価のACEが存在する場合(ステップS702肯定)、ファイルサーバは、当該ACEのSIDが有効access-token(アクセス要求者の識別子SIDの集合)に含まれるか否かを判定する(ステップS703)。
続いて、当該ACEのSIDが有効access-tokenに含まれる場合(ステップS703肯定)、ファイルサーバは、当該ACE種別が「DENY」か否かを判定する(ステップS704)。
その後、ファイルサーバは、当該ACE種別が「DENY」であり(ステップS704肯定)、かつ、当該ACEのDENY対象権限が要求権限に含まれる場合(ステップS705肯定)、当該アクセス要求を「拒否(DENY)」と判定する(ステップS706)。
一方、ファイルサーバは、当該ACE種別が「DENY」でなく(ステップS704否定)、かつ、当該ACEのALLOW対象権限が要求権限に含まれる場合(ステップS707肯定)、かつ、全要求権限のACE照合が完了している場合(ステップS708肯定)、当該アクセス要求を「許可(ALLOW)」と判定する(ステップS709)。
一方、ファイルサーバは、当該ACEのSIDが有効access-tokenに含まれない場合(ステップS703否定)、当該ACEのDENY対象権限が要求権限に含まれない場合(ステップS705否定)、当該ACEのALLOW対象権限が要求権限に含まれない場合(ステップS707否定)、全要求権限のACE照合が完了していない場合(ステップS708否定)、ステップS702に戻り、以降の処理を実行する。
また、ファイルサーバは、アクセス要求を受け付けて、アクセス制御情報DB14に当該アクセス要求の対象となるファイルに関する情報(ACL)が記憶されていない場合(ステップS701否定)、当該アクセス要求を「許可(ALLOW)」と判定し(ステップS709)、また、記憶されるアクセス制御情報のACLのうち、参照されていない未評価のACEが残っていない場合(ステップS702否定)、当該アクセス要求を「拒否(DENY)」と判定する(ステップS706)。
[実施例1による効果]
このように、実施例1によれば、ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示すアクセス制御情報を記憶し、NFSで使用されるアクセス要求の基本権限であって、CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた基本権限が許可されているか否かを、記憶されるアクセス制御情報それぞれに対して基本権限を対応付けたアクセス制御情報を参照して判定し、許可された基本権限の元のアクセス要求に対して、アクセス制御情報DB14に記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定するので、正確なアクセス制御を備えたファイルサーバを、従来技術に比べ少ない工数で開発することが可能である。
例えば、UNIX(登録商標)系システムの従来からの内部インターフェース仕様の都合で、アクセス要求を「参照権、更新権、実行権」の三種類でしかチェックすることができないが、Windows(登録商標)系のCIFSで接続される利用者端末から受信した、UNIX(登録商標)系のアクセス要求をさらに詳細に分類されたアクセス要求に対しても、一度、UNIX(登録商標)系のアクセス要求に変換し、その後、詳細なアクセス要求を判定することができる結果、UNIX(登録商標)系のアクセス要求に強引に対応付けたまま処理する必要がなく、詳細なアクセス要求のまま処理することができるので、正確なアクセス制御を実現することが可能である。
また、Windows(登録商標)やUNIX(登録商標)に依存することのない独自のファイルサーバを開発する必要がなくUNIX(登録商標)系のOSを利用してファイルサーバを開発して、両方の利用者端末からのアクセスを制御することができる結果、開発までに要する工数を短縮することが可能である。
また、実施例1によれば、CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた基本権限が、基本権限に対応付けたアクセス制御情報の一つ以上の構成要素に許可されていた場合に、当該基本権限を許可すると判定し、全ての構成要素に拒否されていた場合に、当該基本権限を拒否すると判定するので、はじめにアクセス要求を甘めに制御し、次に詳細にアクセス制御することができる結果、より正確なアクセス制御を実現することが可能である。
例えば、Windows(登録商標)系のアクセス要求である「FILE_WRITE_EA」を受信した場合、このアクセス要求は、UNIX(登録商標)系であると「Write」と変換される。そして、アクセス制御情報に「Write」に関する権限が一つでも許可されていれば、つまり、「FILE_WRITE_EA」に関係なく「FILE_WRITE_ATTRIBUTES」は「拒否」されているが「FILE_WRITE_DATA」が「許可」されていれば、受信したアクセス要求を「許可」とみなす。そして、次に実際の「FILE_WRITE_EA」が許可されているか否かを判定する。
一方、Windows(登録商標)系のアクセス要求である「FILE_WRITE_EA」を受信した場合、このアクセス要求は、UNIX(登録商標)系であると「Write」と変換される。そして、アクセス制御情報に「Write」に関する権限が全て拒否されていれば、つまり、「FILE_WRITE_EA」に関係なく「FILE_WRITE_ATTRIBUTES」も「拒否」、「FILE_WRITE_DATA」も「拒否」されていれば、受信したアクセス要求を「拒否」とみなして、当該「FILE_WRITE_EA」を拒否する。
このように、UNIX(登録商標)系システムの従来からの内部インターフェース仕様の都合で、アクセス要求を「参照権、更新権、実行権」の三種類でしかチェックすることができないため、Windows(登録商標)系のCIFSで接続される利用者端末から受信した詳細に分類されたアクセス要求をUNIX(登録商標)系に置き換えて、第一のアクセス制御手順で厳しく、強引に判定すると、本当なら許可されるべきであった詳細なアクセス要求を拒否することになる恐れがある。そこで、はじめにアクセス要求を甘めに制御し、次に詳細にアクセス制御することで、このような誤判定を防止することができる結果、より正確なアクセス制御を実現することが可能である。
ところで、これまで実施例1についてアクセス制御情報、基本権限の対応付けには、様々な形態が考えられる。例えば、本発明に係るファイルサーバは、実施例1でアクセス制御情報DBに記憶していたアクセス制御情報をファイルシステム上の各オブジェクトに関する情報を記憶する領域であるinodeの拡張属性領域に記憶することもできる。例えば、図8に示すように、ファイルシステム(ext3)のinode内の拡張属性領域(EA)に「user.nt_acl」を生成して、この領域にアクセス制御情報を記憶するようにしてもよい。
このようにすることで、アクセス制御情報や拡張メタデータを任意のフォーマットで生成することができる結果、ファイルシステムやVFSの修正を最小限に留めることが可能である。例えば、拡張領域として、データフォーマットがあらかじめ定まっているPOSIX−ACL/LIDS・SELINUXなどを使用せず、USER領域を使用することで、任意のデータフォーマットを使用することができるので、ファイルシステムやVFSの修正を最小限に留めることが可能である。
また、実施例1で説明した受信したアクセス要求と基本権限の対応付けを、あらかじめ記憶しておいてもよい。例えば、図9に示すように、「FILE_READ_DATA(データの読み取り)」を「R(Read)」と対応付け、「WRITE_DAC(アクセス許可の変更)」を「Write」と対応付け、「FILE_TRAVERSE(エントリのLOOKUP)」を「X(実行)」などと対応付けた表を記憶しておき、この表を参照して、受信したアクセス要求を基本権限に変換するようにしてもよい。
ところで、本発明は、ファイルシステムにアクセス制御情報を格納する場合に、そのアトミック性を保証することもでき、さらに、実施例1とは異なり、CIFSで接続される利用者端末から受信した要求に限り、2段階のアクセス制御の一段階目の処理を単にスキップすることも可能である。
そこで、実施例2では、アトミック性を保証したアクセス制御情報の格納と、1段階のアクセス制御で正確なアクセス制御を実施する場合について説明する。なお、実施例2で説明する各種関数については、説明上の例示であり、これに限定されるものではない。
(ファイルシステムの構成(実施例2))
まず、図10を用いて、実施例2に係るファイルサーバの構成について説明する。図10に示すように、このファイルサーバは、smbd51と、VFS52と、procfs53と、fshook54と、ext3/jbd59とから構成される。なお、smbd51とVFS52とext3/jbd59とは、実施例1で説明したsmbd11とVFS13とファイルシステム17と同様の機能を有するので、その詳細な説明は省略し、ここでは、実施例1とは異なる機能を有するprocfs53と、fshook54とについて説明する。
procfs53は、VFS52とfshook54との間に位置し、両者間のシステムコール以外の種別の通信を制御するインターフェースである。具体的に例をあげれば、procfs53は、smbd51から受け付けたアクセス要求やアクセス制御情報格納要求などをVFS52を介して受け付け、当該受け付けた各種情報を後述するfshook54のprocfs制御部56に通知する。
fshook54は、汎用ジャーナルデバイス機構(jbd)を含むファイルシステムであるext3/jbd59への各種処理を制御するものであり、特に本発明に密接に関連するものとしては、sblock/inode制御部55と、procfs制御部56と、task制御部57と、xattr制御部58とを備える。
sblock/inode制御部55は、ファイルシステムであるext3/jbd59の各種制御をフックし、NT-ACL制御(アクセス制御)の機能を追加する。具体的に例をあげれば、sblock/inode制御部55は、fshookモジュールの初期化や終了を行う関数、FSIFのフック設定を行う関数、ext3への様々な処理(例えば、mount/unmount処理用、拡張属性設定処理用、属性/サイズ設定用など)を行うFSIFのフック関数などのNT-ACL制御(アクセス制御)の機能を追加する関数を備え、これらにより、ext3/jbd59の各種制御を過不足なくフックすることで、アクセス制御の機能を追加する。
ここで、本発明に特に関係のあるFSIFを含む三つの関数テーブル「file_system_type」、「super_operations」、「inode_operations」のフック方法(フック関数の設定方法)を説明する。まず、関数テーブル「file_system_type」は、FSボリュームのマウントを行うFSIF(get_sb)とアンマウントを行うFSIF(kill_sb)とを含むが、FSIF(get_sb)が関数テーブル「super_operations」の設定処理を行っており、FSIF(get_sb)をフックすれば関数テーブル「super_operations」のフックが可能になるため、関数テーブル「file_system_type」をフックする。例えば、fsfook54をLKM(Loadable Kernel Module)として実装し、フック対象のFSボリュームのマウント前に強制的にロードし(例えば、rc.sysinitでルートパーティションのmount後にmodprobeでロードするなど)、そのロード時に呼ばれるmodule_init関数で、ext3/jbd59の関数テーブル「file_system_type」内のFSIF(get_sb)およびFSIF(kill_sb)を、fsfook54を仲介するフック関数(fshook_get_sb)およびフック関数(fshook_kill_sb)に、それぞれ置き換える。
次に、関数テーブル「super_operations」は、superblock(FSボリューム)の操作を行うFSIF(alloc_inode)やFSIF(read_inode)などを含むが、FSIF(read_inode)が関数テーブル「inode_operations」の設定処理を行っており、FSIF(read_inode)をフックすれば関数テーブル「inode_operations」のフックが可能になるため、関数テーブル「super_operations」をフックする。例えば、前項のfile_system_typeのFSIF(get_sb)のフック関数(fshook_get_sb)において、ext3/jbd59のget_sb処理の終了後に、super_blockに設定されたext3/jbd59用suer_operationsを、fshook54を仲介するフック関数を含むように改ざんした複製に置き換える。
最後に、関数テーブル「inode_operations」は、inode(FSオブジェクト)を操作するFSIF(create)、FSIF(lookup)、FSIF(getattr)などを含むが、これらのFSIFに対してNT-ACL制御(アクセス制御)の機能拡張を施す必要があるため、関数テーブル「inode_operations」をフックする。例えば、ルートディレクトリの関数テーブル「inode_operations」に関しては、関数テーブル「super_operations」のフック関数設定と同タイミングで、super_blockに設定されたルートディレクトリのinodeを獲得し、そのinodeに設定されたext3/jbd59用の関数テーブル「inode_operations」を、fshook54を仲介するフック関数を含むように改ざんした複製に置き換える。また、例えば、ルートディレクトリ以外の既存ファイルの関数テーブル「inode_operations」に関しては、そのインコアinode初期化時のdisk-inodeイメージをロードするFSIF(read_inode)のフック関数(fshook_read_inode)において、ext3/jbd59における処理の終了後に、当該inodeに設定されたext3/jbd59用の関数テーブル「inode_operations」を、fshook54を仲介するフック関数を含むように改ざんした複製に置き換える。さらに、例えば、新規作成ファイルの関数テーブル「inode_operations」に関しては、その新規作成時の親ディレクトリの関数テーブル「inode_operations」の、FSIF(create)/FSIF(mkdir)/FSIF(symlink)において、ext3/jbd59における処理の終了後に、新規作成ファイルのinodeに設定されたext3/jbd59用の関数テーブル「inode_operation」を、fshook54を仲介するフック関数を含むように改ざんした複製に置き換える。
上記したフック関数の設定方法により、図11に示すように、多種FS対応の目的で標準化/安定しているVFS/FS間インターフェース(FSIF)を選択的にフックし、当該FS(ext3)の処理を利用しつつ、必要に応じてNT-ACLに基づくアクセス制御を行うような機能拡張を施すことができるようになる。また、ファイルシステムのFSボリュームの原本を維持し、複製を改ざんすることで、superblock/inode単位に選択的にフックすることができる。例えば、「ext3_alloc_inode」のような機能追加が不要なFSIFについては、フックすることなく、ext3に処理を実行させ、「fshook_read_inode」、「fshoo_create」、「fshoo_get_sb」のような機能追加が必要なFSIFについては、fshook54にてフックする。
なお、ファイルシステムのボリュームのマウント要求に、当該ボリュームのI/Oのフックを指示するオプションを新規追加し、FSIF(get_sb)のフック関数fshook_get_sbで当該オプションを検出したときのみ、当該ボリュームの関数テーブル「super_operations」をフックすることも可能である。つまり、当該オプションにより、ボリューム毎の選択的なフックが可能である。
また、ファイルサーバは、上記した関数でフック中のボリューム数をフックドライバ内部でカウントし、このカウントが残るうちは、ドライバのアンロードを禁止するように制御することもできる。そうすることで、フックの中途離脱(FSインターフェースのリダイレクト先の消滅によるパニック停止)を防止することが可能である。
procfs制御部56は、procfs53を使用したsmbd51とのデータ受渡を制御する。具体的に例を挙げると、procfs制御部56は、fshook54のprocfsエントリの初期登録/終了処理を行う関数と、fshook54のモジュールリリース指示(unload条件の充足)に対して応答する関数、smbd51との通信セッション数を更新するための関数、sd(Security Descriptor)情報の設定および参照指示に対して応答する関数、ユーザメモリ空間またはカーネルメモリ空間上に各種データを取り込むための関数などを備え、こられによって、smbd51とのデータ受渡を制御する。
task制御部57は、fshook連携smbdプロセスの生死確認およびtask単位のsyscall拡張データの受渡制御を行う。具体的に例を挙げれば、task制御部57は、smbd51との連携セッションを管理するfshook_task構造体を新規に作成または破棄するための関数、連携セッションに対応するfshook_task構造体内に、ファイル又はディレクトリ作成時に使用するsd情報及びDOS attributeを設定するための関数と、smbd51との一つ一つの通信セッションに対応するfshook_task構造体内に設定されているsd情報及びDOS attribute情報のアドレスを算出またはクリアするための関数などを備え、これらによって、fshook連携smbdプロセスの生死確認およびtask単位のsyscall拡張データの受渡制御を行う。
また、task制御部57は、カーネルtask構造体(task_struct)毎に、sambaからの通信状態制御と、sambaから提供されるシステムコール拡張用データ保存を司るfshook_task構造体(図12参照)を管理する。図12に示したfshook_task構造体は、procfsのcomファイルへのioctlで渡される要求データ(IOC_SD_PARAM)を渡されたままの状態でメンバft_dataにて内包し、FSIF(create)やFSIF(mkdir)等からの参照に備える。なお、本制御表は全てインコアであることからスピンロック(fshook_tlist_lock)で排他する。
xattr制御部58は、ファイルシステム(ext3/jbd59)の拡張属性領域のNT-ACL対応用メタデータの制御(図8参照)を行う。具体的に例を挙げれば、xattr制御部58は、NT-ACLに基づく処理権限チェックを行う関数、NT-ACLのデータまたはサイズの参照関数、NT-ACLの設定/更新/削除関数、DOS属性の設定/更新、DOS属性のデータまたはサイズの参照する関数、指定されたNT-ACL権限のうち許可されるものを列挙する関数と、prepareで設定済みのsd情報と親ディレクトリからの権限継承を考慮したNT-ACLを作成する関数などのアクセス制御に関する各種関数を備え、これらによって、ファイルシステムの拡張属性領域のNT-ACL対応用メタデータの制御を行う。
(処理の流れ(実施例2))
次に、図13を用いて、実施例2に係る処理の流れを説明する。
なお、実施例2に係るファイルサーバにおいて、CIFSプロトコルによるファイル/ディレクトリ作成では、新規ファイル/ディレクトリに対するDOS属性やNT-ACLなどの付加的メタ情報の設定を指示できる。従来のLinuxシステムコールは、これらの付加的メタ情報を伝達できないため、システムコール発行前に別IOCTLで付加情報を提供する。
図13に示すように、smbd51は、利用者端末からCIFSプロトコルによるディレクトリ作成要求を受け付けた後、ディレクトリ作成を行うシステムコール「sys_mkdir」をVFS52に発行する前に、当該システムコールとは異なるIOコントロール(ioctl(PREPARE))を介して、作成されるディレクトリ用のアクセス制御情報をVFS52に送信し(ステップS1301)、VFS52は、当該アクセス制御情報が付加されたIOコントロールを「com_ioctl」としてfshook54に出力する(ステップS1302)。
次に、fshook54は、VFS52から受け付けたアクセス制御情報である「DOS属性」と「初期ACL」とコンテキストとを所定の記憶領域(例えば、一時領域など)に蓄積し(ステップS1303)、その応答をVFS52を介してsmbd51に通知する(ステップS1304とステップS1305)。
その後、smbd51から「sys_mkdir」を受け付けたVFS52は、このコールを予め設定されていたフック関数fshook_mkdirを通して、fshook54に通知する(ステップS1306とステップS1307)。
次に、fshook54は、ファイルシステム(jbd)に対してFSIF「ext3_xattr_user_get」を実行して、拡張属性領域(ユーザ区分)を取得する(ステップS1308とステップS1309)。
そして、拡張属性領域(ユーザ区分)を取得したfshook54は、ファイルシステム(jbd)に対して、アクセス制御情報を格納するジャーナルを開始するFSIF「journal_start」をファイルシステム(jbd)に対して発行し(ステップS1310とステップS1311)、これ以降の処理について、ファイルシステムで実施される各メタデータ更新処理のための各ジャーナルと同一ジャーナルセッションで括って格納処理を実行することで、システムコール「sys_mkdir」としての全メタデータ更新のアトミック性を保証する(ステップS1312)。
続いて、fshook54は、ファイルシステム(ext3)にFSIF「ディレクトリ作成」の「ext3_mkdir」を実行して「ディレクトリ作成=MKDIR」を実行するとともに(ステップS1313とステップS1314)、「ディレクトリ作成」のジャーナルを開始するFSIF「journal_start」をjbdに発行する(ステップS1315とステップS1316)。
そして、「ディレクトリ作成」が終了したext3は、「ディレクトリ作成」のジャーナルを終了するFSIF「journal_stop」をjbdに発行する(ステップS1317)。
その後、「ディレクトリ作成」のジャーナルを終了したことをjdbおよびext3を介して受け取ったfshook54は、所定の記憶領域に蓄積されているコンテキストの照合を行い、格納しようとするアクセス制御情報がステップS1303で格納したアクセス制御情報と一致するかの判定を行う(ステップS1318〜ステップS1320)。
所定の記憶領域に蓄積されているコンテキストが一致することで、アクセス制御情報がステップS1303で格納したアクセス制御情報であると判定されると、fshook54は、ファイルシステム(ext3)に対してFSIF「ext3_xattr_user_set」を発行する(ステップS1321)。
このFSIFを受け取ったext3は、「アクセス制御情報格納処理」のジャーナルを開始するFSIF「journal_start」をjbdに発行してから(ステップS1323とステップS1334)、所定の記憶領域に蓄積されているアクセス制御情報を取得して拡張領域(inode)に格納する「アクセス制御情報格納処理(DOS属性および初期ACLの反映処理)」を実行する(ステップS1322)。
そして、「アクセス制御情報格納処理」が終了したext3は、「アクセス制御情報格納処理」のジャーナルを終了するFSIF「journal_stop」をjbdに発行する(ステップS1325)。
その後、「アクセス制御情報格納処理」のジャーナルを終了したことをjbdおよびext3を介して受け取ったfshook54は(ステップS1326とステップS1327)、アクセス制御情報を格納するジャーナルを終了するFSIF「journal_stop」をjbdに対して発行し(ステップS1328)、その結果をjbdから受け取って、smbd51を介して利用者端末に通知する(ステップS1329)。
(ACL継承処理の流れ(実施例2))
そして、図13で説明したディレクトリ新規作成処理ではACL初期設定が明示的に指示されていたが、ACL初期設定が明示的に指示されていないような場合は、代わりに親ディレクトリのACLを継承する。正規のルールに則り、継承先ファイルがACL継承を禁止しない場合に限り、親ディレクトリのACLを走査しACEを選択的に継承する。
そこで、ここでは、図14を用いて、実施例2に係るACL継承処理の流れを説明する。
図14に示すように、継承先のファイルが継承を拒否することなく継承処理が開始されと(ステップS1401否定)、ファイルサーバは、現在参照している継承元ファイルのACLのチェック中ACEのファイルタイプ属性データが、継承先ファイルタイプと合致するかの照合を行う(S1402)。これが合致する場合(ステップS1402肯定)、当該ACEのSIDがCREATE_OWNERであるか否かを判定する(ステップS1403)。
そして、当該ACEのSIDがCREATE_OWNERでない場合(ステップS1403否定)、ファイルサーバは、当該ACEのSIDがCREATE_GROUPであるか否かを判定する(ステップS1404)。
その後、当該ACEのSIDがCREATE_GROUPでない場合(ステップS1404否定)、ファイルサーバは、当該ACEが継承伝播禁止のACEであるか否かを判定する(ステップS1405)。
続いて、当該ACEが継承伝播禁止のACEでない場合(ステップS1405否定)、ファイルサーバは、継承用ACEを継承先ファイルのACL末端に追加し(ステップS1406)、当該ACEが継承元ACLの末端であるか否かを判定する(ステップS1407)。
そして、ファイルサーバは、当該ACEが継承元ACLの末端である場合に(ステップS1407肯定)、処理を終了し、当該ACEが継承元ACLの末端でない場合に(ステップS1407否定)、ステップS1402以降の処理を繰り返す。
一方、ステップS1403に戻り、ファイルサーバは、当該ACEのSIDがCREATE_OWNERである場合(ステップS1403肯定)、当該ACEのSIDを継承先ファイル作成者に修正した継承用ACEを作成(複製)してステップS1405の処理を行って(ステップS1408)、ステップS1405以降の処理を実行する。
また、当該ACEのSIDがCREATE_GROUPである場合(ステップS1404肯定)、当該ACEのSIDを継承先ファイル作成グループに修正した継承用ACEを作成(複製)して(ステップS1409)、ステップS1405以降の処理を実行する。
また、当該ACEが継承伝播禁止のACEである場合(ステップS1405肯定)、ファイルサーバは、継承先ファイル種別情報をクリアすることで、子ディレクトリへ継承された後のACEがさらに孫ディレクトリ作成時に孫ディレクトリへ継承されることを防ぎ(ステップS1410)、ステップS1406以降の処理を実行する。
(NT−ACL評価処理の流れ(実施例2))
次に、図15を用いて、図13と図14とに示した処理シーケンスにより格納されたアクセス制御情報を用いてアクセス制御(NT−ACL評価処理)を行う処理の流れについて説明する。
図15に示すように、アクセス要求を受け付けて、当該アクセス要求に対応するACLがinodeに記憶されている場合(ステップS1501肯定)、ファイルサーバは、記憶されるアクセス制御情報のACLうち、参照されていない未評価のACEが残っているか否かを判定する(ステップS1502)。
未評価のACEが存在する場合(ステップS1502肯定)、ファイルサーバは、当該ACEのSIDが有効access-token(アクセス要求者の識別子SIDの集合)に含まれるか否かを判定する(ステップS1503)。
続いて、当該ACEのSIDが有効access-tokenに含まれる場合(ステップS1503肯定)、ファイルサーバは、当該ACE種別が「DENY」か否かを判定する(ステップS1504)。
その後、ファイルサーバは、当該ACE種別が「DENY」であり(ステップS1504肯定)、かつ、当該ACEのDENY対象権限が要求権限に含まれる場合(ステップS1505肯定)、当該アクセス要求を「拒否(DENY)」と判定する(ステップS1506)。
一方、ファイルサーバは、当該ACE種別が「DENY」でなく(ステップS1504否定)、かつ、当該ACEのALLOW対象権限が要求権限に含まれる場合(ステップS1507肯定)、かつ、全要求権限のACE照合が完了している場合(ステップS1508肯定)、当該アクセス要求を「許可(ALLOW)」と判定する(ステップS1509)。
一方、ファイルサーバは、当該ACEのSIDが有効access-tokenに含まれない場合(ステップS1503否定)、当該ACEのDENY対象権限が要求権限に含まれない場合(ステップS1505否定)、当該ACEのALLOW対象権限が要求権限に含まれない場合(ステップS1507否定)、全要求権限のACE照合が完了していない場合(ステップS1508否定)、ステップS1502に戻り、以降の処理を実行する。
また、ファイルサーバは、アクセス要求を受け付けて、当該アクセス要求の対象ファイルのinodeにNT−ACL情報が記憶されていない場合(ステップS1501否定)、当該アクセス要求を「許可(ALLOW)」と判定し(ステップS1509)、また、記憶されるアクセス制御情報のACLのうち、参照されていない未評価のACEが残っていない場合(ステップS1502否定)、当該アクセス要求を「拒否(DENY)」と判定する(ステップS1506)。
(実施例2よる効果)
このように、実施例2によれば、CIFSで接続される利用者端末からディレクトリ作成要求を受け付けた場合に、当該ディレクトリ作成要求に応答してディレクトリ作成を行うシステムコールを発行する前に、前記ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示す当該ディレクトリ用のアクセス制御情報を、当該システムコールとは異なるIOコントロールを介して発行し、IOコントロールを介して発行されたアクセス制御情報を、ファイルシステム上のinodeの拡張属性領域に格納する格納処理を実行するのに際して、ファイルシステムで実施される各メタデータ更新処理のための各ジャーナルと同一ジャーナルセッションで括って、格納処理を実行し、CIFSで接続される利用者端末からアクセス要求を受け付けた場合に、ファイルシステムに格納されたアクセス制御情報に基づいて、当該アクセス要求を許可するか否かを判定するので、アトミック性が保証されたアクセス制御情報を用いてアクセス制御を実施することができる結果、UNIX(登録商標)系のアクセス要求に強引に対応付けたまま処理する必要がなく、詳細なアクセス要求のまま処理することができるので、より正確なアクセス制御を実現することが可能である。
また、実施例2によれば、CIFSで接続される利用者端末からアクセスされるファイルシステムのボリュームに関してファイルシステムのルートディレクトリおよびメタデータに関するインターフェースをフックし、当該マウント先のディレクトリに関するインターフェースをフックするのに際して、当該ディレクトリ直下のファイルに関するインターフェースをフックすることで、前記マウントされたボリュームに関するファイルシステムインターフェースを過不足なくフックするので、インターフェース関数ベクターを改ざんするのではなく、そのポインタ元(例えば、スーパーブロックやinodeなど)のポインタを改ざん版インターフェース関数ベクターへリダイレクトすることができる結果、ボリューム限定のフック設定を実現すると共に、フック対象外ボリュームとのフック設定処理に関する排他制御を不要化することが可能である。
また、実施例2によれば、CIFSで接続される利用者端末からアクセスされるファイルシステムのボリュームに関して当該ボリュームをマウントするマウント要求に含まれるマウントオプションにフック対象であることを示す識別子が付加されている場合にのみ、当該ボリュームがフック対象であると判定するので、無関係なボリュームに関するフックの設定を回避することが可能である。
また、実施例2によれば、フック中のボリューム数をフックドライバ内部でカウントし、このカウントが残るうちは、ドライバのアンロードを禁止するので、フックの中途離脱(FSインターフェースのリダイレクト先の消滅によるパニック停止)を防止することが可能である。
また、実施例2によれば、アクセス制御情報をファイルシステム上のinodeの拡張属性領域に格納する場合に、IOコントロールにおいて、当該アクセス制御情報と共にコンテキストをカーネル内フックドライバに一時的に格納し、システムコールにおいて、当該コンテキストが一致しているかを判定し、当該アクセス制御情報が受け付けられた正当なアクセス制御情報であることを条件として、拡張属性領域に格納するので、IOコントロールとシステムコールの関連を適切に判断することが可能である。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に示すように、(1)SambaによるCIFS接続、(2)システム構成等、(3)プログラム、にそれぞれ区分けして異なる実施例を説明する。
(1)SambaによるCIFS接続
実施例1では、Sambaのプログラム(smbdデーモン)を実行して、CIFS接続される利用者端末からのアクセス要求を受信する場合について説明したが、本発明はこれに限定されるものではなく、例えば、独自のプログラムやCIFS接続を可能とする公知の技術、プログラムなどを利用することもできる。
(2)システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合(例えば、第一アクセス制御部と第二アクセス制御部とを統合するなど)して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理(例えば、受信したアクセス要求をCIFSかNFSか判定する処理など)の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理(例えば、アクセス制御情報の作成処理など)の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報(例えば、図4、図8、図9など)については、特記する場合を除いて任意に変更することができる。
(3)プログラム
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムを他の実施例として説明する。
図16に示すように、コンピュータシステム100は、RAM101と、HDD102と、ROM103と、CPU104とから構成される。ここで、ROM103には、上記の実施例と同様の機能を発揮するプログラム、つまり、図16に示すように、アクセス対応プログラム103aと、第一アクセス制御プログラム103bと、第二アクセス制御プログラム103cとがあらかじめ記憶されている。
そして、CPU104には、これらのプログラム103a〜103cを読み出して実行することで、図16に示すように、アクセス対応プロセス104aと、第一アクセス制御プロセス104bと、第二アクセス制御プロセス104cとなる。なお、アクセス対応プロセス104aは、図3に示した、smbd11に対応し、同様に、第一アクセス制御プロセス104bは、第一アクセス制御部15に対応し、第二アクセス制御プロセス104cは、第二アクセス制御部16に対応する。
また、HDD102には、ファイルシステムの各オブジェクトに対してアクセスを許可するか拒否するかを示すアクセス制御情報を記憶するアクセス制御情報テーブル102aが設けられる。なお、アクセス制御情報テーブル102aは、図3に示した、アクセス制御情報DB14に対応する。
ところで、上記したプログラム103a〜103cは、必ずしもROM103に記憶させておく必要はなく、例えば、コンピュータシステム100に挿入されるフレキシブルディスク(FD)、CD−ROM、MOディスク、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」の他に、コンピュータシステム100の内外に備えられるハードディスクドライブ(HDD)などの「固定用の物理媒体」、さらに、公衆回線、インターネット、LAN、WANなどを介してコンピュータシステム100に接続される「他のコンピュータシステム」に記憶させておき、コンピュータシステム100がこれらからプログラムを読み出して実行するようにしてもよい。
(付記1)利用者端末とCIFSまたはNFSで接続され、前記利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定することをコンピュータに実行させるアクセス制御プログラムであって、
前記ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示すアクセス制御情報を記憶するアクセス制御情報記憶手段と、
前記NFSで使用されるアクセス要求の基本権限であって、前記CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた前記基本権限が許可されているか否かを、前記アクセス制御情報記憶手段に記憶されるアクセス制御情報それぞれに対して前記基本権限を対応付けたアクセス制御情報を参照して判定する第一のアクセス制御手順と、
前記第一のアクセス制御手順により許可された基本権限の元のアクセス要求に対して、前記アクセス制御情報記憶手段に記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定する第二のアクセス制御手順と、
をコンピュータに実行させることを特徴とするアクセス制御プログラム。
(付記2)前記第一のアクセス制御手順は、前記CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた基本権限が、前記基本権限に対応付けたアクセス制御情報の一つ以上の構成要素に許可されていた場合に、当該基本権限を許可すると判定し、全ての構成要素に拒否されていた場合に、当該基本権限を拒否すると判定することを特徴とする付記1に記載のアクセス制御プログラム。
(付記3)前記アクセス制御情報記憶手段は、前記ファイルシステム上の各オブジェクトに関する情報を記憶するinodeの拡張属性領域に、前記アクセス制御情報を記憶することを特徴とする付記1または2に記載のアクセス制御プログラム。
(付記4)利用者端末とCIFSまたはNFSで接続され、前記利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定するアクセス制御装置であって、
前記ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示すアクセス制御情報を記憶するアクセス制御情報記憶手段と、
前記NFSで使用されるアクセス要求の基本権限であって、前記CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた前記基本権限が許可されているか否かを、前記アクセス制御情報記憶手段に記憶されるアクセス制御情報それぞれに対して前記基本権限を対応付けたアクセス制御情報を参照して判定する第一のアクセス制御手段と、
前記第一のアクセス制御手段により許可された基本権限の元のアクセス要求に対して、前記アクセス制御情報記憶手段に記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定する第二のアクセス制御手段と、
を備えたことを特徴とするアクセス制御装置。
(付記5)前記第一のアクセス制御手段は、前記CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた基本権限が、前記基本権限に対応付けたアクセス制御情報の一つ以上の構成要素に許可されていた場合に、当該基本権限を許可すると判定し、全ての構成要素に拒否されていた場合に、当該基本権限を拒否すると判定することを特徴とする付記4に記載のアクセス制御装置。
(付記6)前記アクセス制御情報記憶手段は、前記ファイルシステム上の各オブジェクトに関する情報を記憶するinodeの拡張属性領域に、前記アクセス制御情報を記憶することを特徴とする付記4または5に記載のアクセス制御装置。
(付記7)利用者端末とCIFSまたはNFSで接続され、前記利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定することに適したアクセス制御方法であって、
前記ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示すアクセス制御情報を記憶するアクセス制御情報記憶手段と、
前記NFSで使用されるアクセス要求の基本権限であって、前記CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた前記基本権限が許可されているか否かを、前記アクセス制御情報記憶手段に記憶されるアクセス制御情報それぞれに対して前記基本権限を対応付けたアクセス制御情報を参照して判定する第一のアクセス制御工程と、
前記第一のアクセス制御工程により許可された基本権限の元のアクセス要求に対して、前記アクセス制御情報記憶手段に記憶されるアクセス制御情報を参照し、当該アクセス要求を許可するか否かを判定する第二のアクセス制御工程と、
を含んだことを特徴とするアクセス制御方法。
(付記8)前記第一のアクセス制御工程は、前記CIFSで接続される利用者端末から受け付けたアクセス要求に対して対応付けられた基本権限が、前記基本権限に対応付けたアクセス制御情報の一つ以上の構成要素に許可されていた場合に、当該基本権限を許可すると判定し、全ての構成要素に拒否されていた場合に、当該基本権限を拒否すると判定することを特徴とする付記7に記載のアクセス制御方法。
(付記9)前記アクセス制御情報記憶手段は、前記ファイルシステム上の各オブジェクトに関する情報を記憶するinodeの拡張属性領域に、前記アクセス制御情報を記憶することを特徴とする付記7または8に記載のアクセス制御方法。
(付記10)利用者端末とCIFSまたはNFSで接続され、前記利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定することをコンピュータに実行させるアクセス制御プログラムであって、
前記CIFSで接続される利用者端末からファイル作成要求を受け付けた場合に、当該ファイル作成要求に応答してファイル作成を行うシステムコールを発行する前に、前記ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示す当該ファイル用のアクセス制御情報を、当該システムコールとは異なるIOコントロールを介して発行するアクセス制御情報発行手順と、
前記アクセス制御情報発行手順によりIOコントロールを介して発行されたアクセス制御情報を、前記ファイルシステム上のinodeの拡張属性領域に格納する格納処理を実行するのに際して、前記ファイルシステムで実施される各メタデータ更新処理のための各ジャーナルと同一ジャーナルセッションで括って、前記格納処理を実行する格納処理手順と、
前記CIFSで接続される利用者端末からアクセス要求を受け付けた場合に、前記格納処理手順によってファイルシステムに格納されたアクセス制御情報に基づいて、当該アクセス要求を許可するか否かを判定するアクセス制御手順と、
をコンピュータに実行させることを特徴とするアクセス制御プログラム。
(付記11)前記CIFSで接続される利用者端末からアクセスされるファイルシステムのボリュームに関して、前記ファイルシステムのルートディレクトリおよびメタデータに関するインターフェースをフックし、当該マウント先のディレクトリに関するインターフェースをフックするのに際して、当該ディレクトリ直下のファイルに関するインターフェースをフックすることで、前記マウントされたボリュームに関するファイルシステムインターフェースを過不足なくフックするフック制御手順をさらにコンピュータに実行させることを特徴とする付記10に記載のアクセス制御プログラム。
(付記12)前記フック制御手順は、前記CIFSで接続される利用者端末からアクセスされるファイルシステムのボリュームに関して、当該ボリュームをマウントするマウント要求に含まれるマウントオプションにフック対象であることを示す識別子が付加されている場合にのみ、当該ボリュームがフック対象であると判定することを特徴とする付記11に記載のアクセス制御プログラム。
(付記13)前記フック制御手順は、フック中のボリューム数をフックドライバ内部でカウントし、このカウントが残るうちは、ドライバのアンロードを禁止することを特徴とする付記11または12に記載のアクセス制御プログラム。
(付記14)前記格納処理手順は、前記アクセス制御情報をファイルシステム上のinodeの拡張属性領域に格納する場合に、前記IOコントロールにおいて、当該アクセス制御情報と共にコンテキストをカーネル内フックドライバに一時的に格納し、前記システムコールにおいて、当該コンテキストが一致しているかを判定し、当該アクセス制御情報が前記アクセス制御情報受付手順により受け付けられた正当なアクセス制御情報であることを条件として、前記拡張属性領域に格納することを特徴とする付記10〜13のいずれか一つに記載のアクセス制御プログラム。
(付記15)利用者端末とCIFSまたはNFSで接続され、前記利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定するアクセス制御装置であって、
前記CIFSで接続される利用者端末からファイル作成要求を受け付けた場合に、当該ファイル作成要求に応答してファイル作成を行うシステムコールを発行する前に、前記ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示す当該ファイル用のアクセス制御情報を、当該システムコールとは異なるIOコントロールを介して発行するアクセス制御情報発行手段と、
前記アクセス制御情報発行手段によりIOコントロールを介して発行されたアクセス制御情報を、前記ファイルシステム上のinodeの拡張属性領域に格納する格納処理を実行するのに際して、前記ファイルシステムで実施される各メタデータ更新処理のための各ジャーナルと同一ジャーナルセッションで括って、前記格納処理を実行する格納処理手段と、
前記CIFSで接続される利用者端末からアクセス要求を受け付けた場合に、前記格納処理手段によってファイルシステムに格納されたアクセス制御情報に基づいて、当該アクセス要求を許可するか否かを判定するアクセス制御手順と、
を備えたことを特徴とするアクセス制御装置。
(付記16)利用者端末とCIFSまたはNFSで接続され、前記利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定することに適したアクセス制御方法であって、
前記CIFSで接続される利用者端末からファイル作成要求を受け付けた場合に、当該ファイル作成要求に応答してファイル作成を行うシステムコールを発行する前に、前記ファイルシステムの各オブジェクトに対してアクセス要求を許可するか拒否するかを示す当該ファイル用のアクセス制御情報を、当該システムコールとは異なるIOコントロールを介して発行するアクセス制御情報発行工程と、
前記アクセス制御情報発行工程によりIOコントロールを介して発行されたアクセス制御情報を、前記ファイルシステム上のinodeの拡張属性領域に格納する格納処理を実行するのに際して、前記ファイルシステムで実施される各メタデータ更新処理のための各ジャーナルと同一ジャーナルセッションで括って、前記格納処理を実行する格納処理工程と、
前記CIFSで接続される利用者端末からアクセス要求を受け付けた場合に、前記格納処理手順によってファイルシステムに格納されたアクセス制御情報に基づいて、当該アクセス要求を許可するか否かを判定するアクセス制御工程と、
を含んだことを特徴とするアクセス制御方法。
以上のように、本発明に係るアクセス制御プログラムは、利用者端末とCIFSまたはNFSで接続され、利用者端末からファイルシステムへのアクセス要求を受信して、当該アクセス要求を許可するか否かを判定することに有用であり、特に、ファイルサーバを開発する工数を短縮することが可能であり、正確なアクセス制御を実現することに適する。
実施例1に係るファイルサーバを含むシステムの全体構成を示すシステム構成図である。
実施例1に係るファイルサーバを説明するための図である。
実施例1に係るファイルサーバの構成を示すブロック図である。
アクセス制御情報DBに記憶される情報の例である。
実施例1に係るファイルサーバにおけるアクセス要求判定処理の流れを示すフローチャートである。
実施例1に係るファイルサーバにおけるアクセス要求判定処理の流れを示すシーケンス図である。
アクセス評価ルールの流れを示すフローチャートである。
拡張属性領域を使用してアクセス制御情報を記憶する場合の例を示す図である。
アクセス要求と基本権限とを対応付けた表の例を示す図である。
実施例2に係るファイルサーバの構成を示すブロック図である。
FSIFのフック制御について説明するための図である。
fshook_task構造体の概念図である。
実施例2に係るファイルサーバの処理の流れを示すシーケンス図である。
実施例2に係るファイルサーバのACL継承処理の流れを示すフローチャートである。
実施例2に係るファイルサーバのNT−ACL評価処理の流れを示すフローチャートである。
アクセス制御プログラムを実行するコンピュータシステムの例を示す図である。
符号の説明
10 ファイルサーバ
11 smbd
12 nfsd
13 VFS
14 アクセス制御情報DB
15 第一アクセス制御部
16 第二アクセス制御部
17 ファイルシステム
51 smbd
52 VFS
53 procfs
54 fshook
55 sblock/inode制御部
56 procfs制御部
57 task制御部
58 xattr制御部
59 ext3/jbd
100 コンピュータシステム
101 RAM
102 HDD
102a アクセス制御制御テーブル
103 ROM
103a アクセス対応プログラム
103b 第一アクセス制御プログラム
103c 第二アクセス制御プログラム
104 CPU
104a アクセス対応プロセス
104b 第一アクセス制御プロセス
104c 第二アクセス制御プロセス