TIPSWindowsでセキュリティ設定を記述するためにはSDDL文字列を利用する。SDDLは、ファイルやサービス、レジストリなどのセキュリティ設定や監査のために利用される。SDDL内では、組み込みのアクセス権やユーザーアカウントは、2文字の英字で省略して記述される。OSでは、セキュリティを確保するために、システム内部に存在する各種のオブジェクト(ファイルだけでなく、サービスやプロセス、パイプといった、動的に生成されるものも含む)に対して、アクセス権を設定し、権限を持つユーザーやグループからのアクセスを許可し、それ以外からのアクセスを禁止するなどしている。アクセス権の設定で利用される「アクセス制御リスト(ACL)」については、TIPS「アクセス制御リストACLとは?」で解説しているので、参考にしていただきたい。ACLの設定内容を確認したり、編集したりするためには、エクスプローラの[プロパティ]ダイアログにある[セキュリティ]タブを使ってGUIで操作する方法と、caclsコマンドを使ってコマンドプロンプト上で操作する方法の2種類がある。caclsコマンドでACLを編集する(TIPS)このうち、caclsコマンドを使用する方法では、設定できるアクセス権(属性)に制限があり、全ての属性を設定することはできなかった。これに対して、SDDL表記を利用すれば、全ての権限を指定することができる。OSのセキュリティ設定では、このSDDLを使って設定作業を行うケースもある。より、特権が昇格される」などでは、SDDLを使う例が紹介されている。本TIPSでは、このSDDLについて解説する。Language)」とは、セキュリティ記述子を表現するための汎用的な表記方法であり、DACLだけでなく、監査の設定や、DCOMのセキュリティ設定など、セキュリティ関連の設定項目で広く利用されている表記方法である。OSのシステムファイルの初期設定を行うための各種.INFファイル中では、このSDDL文字列による表記を使って、各種ファイルの初期セキュリティ設定が行われている。OSインストール後の各種ファイルやレジストリのセキュリティ設定を行う、「%windir%\inf\defltwk.inf」ファイルの一部である。*ファイル%windir%\inf\defltwk.infの一部"%BootDrive%\ntbootdd.sys",2,"D:P(A;;GRGX;;;PU)(A;;GA;;;BA)(A;;GA;;;SY)""%BootDrive%\autoexec.bat",2,"D:P(A;;GRGX;;;BU)(A;;GRGWGXSD;;;PU)(A;;GA;;;BA)(A;;GA;;;SY)"......(中略)......"%SystemRoot%\Debug\UserMode",2,"D:PAR(A;;0x00100023;;;BU)(A;OIIO;0x00100006;;;BU)(A;CIOI;GRGWGXSD;;;PU)(A;CIOI;GA;;;BA)(A;CIOI;GA;;;SY)""%SystemRoot%\Temp",2,"D:P(A;CI;0x100026;;;BU)(A;CIOI;GRGWGXSD;;;PU)(A;CIOI;GA;;;BA)(A;CIOI;GA;;;SY)(A;CIOI;GA;;;CO)"橙色で示した部分がSDDL文字列の例である。(大文字の)アルファベットや記号類が意味もなく並んでいるように見えるが、これがSDDLによるセキュリティ設定の例であり、例えば一番上の行では、ファイル「ntbootdd.sys」のデフォルトのセキュリティ設定を規定している。SDDLは、セキュリティ設定を表す属性文字列を、なるべく短い文字列でコンパクトの表現できるように設計されている。具体的には、以下の4つの形式がある。上の2つはSIDを指定するための文字列。“D:〜”は「DACL(随意アクセス制御リスト」。リソースに対するアクセスの許可/拒否を制御する)、“S:〜”は「SACL(システムアクセス制御リスト」。リソースに対する監査を制御する)を表すためのSDDL文字列。このようにいくつか種類があるが、本TIPSではリソースへのアクセスを制御するDACLについて解説する。●DACLを表すSDDL文字列リソースへのアクセス制御に使われるDACL(随意アクセス制御リスト)は、“D:〜”という文字列で指定する。先頭の“D:”に続いて、「DACLフラグ」が続き、さらに「ACE(アクセス制御エントリ)文字列」が複数続く。"D:P(A;;GRGX;;;PU)(A;;GA;;;BA)(A;;GA;;;SY)"この例では、“P”というDACLフラグに続いて、3つのACEが定義されている。以下、それぞれの要素について、見ていこう(ただしDACL以外の要素についても解説する)。「DACLフラグ」は、DACLに適用されるセキュリティ記述子の制御用フラグであり、以下のような意味を持つ。継承によって作成されたDACLであることを示すDACLフラグ文字列とその意味DACLフラグの文字列は、実際にはセキュリティ記述子の制御用フラグの設定APIのパラメータとして扱われる。これらを組み合わせて使用する(無指定も可能)。「ACE文字列」は、DACLを構成するACEを定義するために利用される。Administratorsにフルコントロールを与えるとか、Everyoneからのアクセスを全て拒否する、といったエントリごとに、ACE文字列を1つずつ定義し、連結して使用する。ACE文字列の書式は次のようになっている。内には、ACEタイプやACEフラグなどを表す文字列を、“;”で区切って記述する。これらの文字列は基本的には英大文字2文字で表現されている。この例では「A」「CI」「OI」「GR」「GW」「GX」「SD」「PU」といった要素が組み合わされている。DirectoryのオブジェクトのACLでのみ使われるもので、通常のACLでは上の例のように空欄となっている)。以下、それぞれの要素について順に見ていこう。■「ACEタイプ」ACEの種類を表す。オブジェクト警告ACEタイプ文字列アクセスの許可や禁止を定義する。■「ACEフラグ」ACEの継承に関する情報を表す。/禁止される権利を定義する。英字2文字による表記だけでなく、16進数を使って直接指定することも可能(例:0x7800003F)。Strings」[英語])などを参照のこと。■「オブジェクトGUID」パスワードの変更やリセットなど、特別なタスクの実行を許可するための権利を表すオブジェクトのGUID文字列を表す。セキュリティの管理」などを参照のこと。■「継承オブジェクトGUID」ACEを継承するオブジェクトのGUIDを表す文字列を指定する。■「アカウントSID」ACEの提供対象となるSIDを表す。SIDについてはTIPS「オブジェクトを識別するSIDとは?」を参照のこと。「S-1-......」といった標準的な形式だけでなく、あらかじめ用意されているアカウントに対しては、以下のような2文字の省略形も使用することができる。(WD=world)"S-1-......"標準的な表記によるSIDSIDアカウントに指定可能な文字列あらかじめ用意されているアカウントや組み込みアカウントに対しては、ここに示すように、英字2文字の省略形が用意されている。SDKに含まれるSddl.hファイルに記述されている。2003のcaclsコマンドなどで使用することができる。これについては別記事の「caclsコマンドでACLを編集する(SDDL編)」を参照していただきたい。「標準アクセス権」で、SDDL_STANDARD_DELETE(削除)の文字列を「SR」と記しておりましたが、正しくは「SD」でした。お詫びして訂正いたします。【2006/03/25】初版公開。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。