[System Environment] | ||||||||||||
セキュリティ設定を記述するSDDL文字列とは?
|
||||||||||||
|
解説 |
Windows OSでは、セキュリティを確保するために、システム内部に存在する各種のオブジェクト(ファイルだけでなく、サービスやプロセス、パイプといった、動的に生成されるものも含む)に対して、アクセス権を設定し、権限を持つユーザーやグループからのアクセスを許可し、それ以外からのアクセスを禁止するなどしている。アクセス権の設定で利用される「アクセス制御リスト(ACL)」については、別TIPSの「アクセス制御リストACLとは?」で解説しているので、参考にしていただきたい。
|
ACLの設定内容を確認したり、編集したりするためには、エクスプローラの[プロパティ]ダイアログにある[セキュリティ]タブを使ってGUIで操作する方法と、caclsコマンドを使ってコマンド・プロンプト上で操作する方法の2種類がある(関連記事参照)。このうち、caclsコマンドを使用する方法では、設定できるアクセス権(属性)に制限があり、すべての属性を設定することはできなかった。これに対して、SDDL表記を利用すれば、すべての権限を指定することができる。
またファイルのアクセス権の設定以外にも、Windows OSのセキュリティ設定では、このSDDLを使って設定作業を行うケースもある。例えば、サポート技術情報の「Windows XP Service Pack 2 を実行しているコンピュータのユーザーにリモート アシスタンスを提供できない」や「[MS06-011] 制限の少ない Windows サービスの DACL により、特権が昇格される」などでは、SDDLを使う例が紹介されている。本TIPSでは、このSDDLについて解説する。
SDDLとは
「SDDL(Security Descriptor Definition Language)」とは、セキュリティ記述子を表現するための汎用的な表記方法であり、DACLだけでなく、監査の設定や、DCOMのセキュリティ設定など、セキュリティ関連の設定項目で広く利用されている表記方法である。またWindows OSのシステム・ファイルの初期設定を行うための各種.INFファイル中では、このSDDL文字列による表記を使って、各種ファイルの初期セキュリティ設定が行われている。例えば以下に示すのは、Windows OSインストール後の各種ファイルやレジストリのセキュリティ設定を行う、「%windir%\inf\defltwk.inf」ファイルの一部である。
※ファイル%windir%\inf\defltwk.infの一部 |
赤く示した部分がSDDL文字列の例である。(大文字の)アルファベットや記号類が意味もなく並んでいるように見えるが、これがSDDLによるセキュリティ設定の例であり、例えば一番上の行では、ファイルntbootdd.sysファイルのデフォルト・セキュリティ設定を規定している。
SDDLは、セキュリティ設定を表す属性文字列を、なるべく短い文字列でコンパクトの表現できるように設計されている。具体的には、以下の4つの形式がある。
SDDL表記 | 用途 |
O:ユーザーSID | オブジェクト所有者のSIDの指定 |
G:グループSID | オブジェクトのプライマリ・グループのSIDの指定 |
D:DACLフラグ(ACE文字列1)(ACE文字列2)……(ACE文字列n) | DACLの指定 |
S:SACLフラグ(ACE文字列1)(ACE文字列2)……(ACE文字列n) | SACLの指定 |
SDDLの4つの形式 | |
上の2つはSIDを指定するための文字列。“D:〜”はDACL(随意アクセス制御リスト。リソースに対するアクセスの許可/拒否を制御する)、“S:〜”はSACL(システム・アクセス制御リスト。リソースに対する監査を制御する)を表すためのSDDL文字列。 |
このようにいくつか種類があるが、本TIPSではリソースへのアクセスを制御するDACLについて解説する。
DACLを表すSDDL文字列
リソースへのアクセス制御に使われるDACL(随意アクセス制御リスト)は、“D:〜”という文字列で指定する。先頭の“D:”に続いて、「DACLフラグ」が続き、さらに「ACE(アクセス制御エントリ)文字列」が複数続く。
書式: "D:DACLフラグ(ACE文字列1)(ACE文字列2)……(ACE文字列n)" |
この例では、“P”というDACLフラグに続いて、3つのACEが定義されている。以下、それぞれの要素について、見ていこう(ただしDACL以外の要素についても解説する)。
「DACLフラグ」の構成
DACLフラグは、DACLに適用されるセキュリティ記述子の制御用フラグであり、以下のような意味を持つ。
文字列 |
フラグ名 | 意味 |
"P" |
SE_DACL_PROTECTED | DACLが継承されたACEによって変更されないように保護する |
"AR" |
SE_DACL_AUTO_INHERIT_REQ | DACLを子オブジェクトへ継承するように要求する |
"AI" |
SE_DACL_AUTO_INHERITED | 継承によって作成されたDACLであることを示す |
DACLフラグ文字列とその意味 | ||
DACLフラグの文字列は、実際にはセキュリティ記述子の制御用フラグの設定APIのパラメータとして扱われる。これらを組み合わせて使用する(無指定も可能)。 |
「ACE文字列」の構成
「ACE文字列」は、DACLを構成するACEを定義するために利用される。例えばAdministratorsにフルコントロールを与えるとか、Everyoneからのアクセスをすべて拒否する、といったエントリごとに、ACE文字列を1つずつ定義し、連結して使用する。ACE文字列の書式は次のようになっている。
書式: (ACEタイプ;ACEフラグ;権利;オブジェクトGUID;継承オブジェクトGUID;アカウントSID) |
( ) 内には、ACEタイプやACEフラグなどを表す文字列を、“;”で区切って記述する。これらの文字列は基本的には英大文字2文字で表現されている。この例では「A」「CI」「OI」「GR」「GW」「GX」「SD」「PU」といった要素が組み合わされている。ただしすべての項目が指定されているわけではなく、ACLのバージョンによっては省略されている場合がある(「オブジェクトGUID」と「継承オブジェクトGUID」はActive DirectoryのオブジェクトのACLでのみ使われるもので、通常のACLでは上の例のように空欄となっている)。
以下、それぞれの要素について順に見ていこう。
■「ACEタイプ」
ACEの種類を表す。
文字列 |
タイプ名 | 意味 |
"A" |
SDDL_ACCESS_ALLOWED | アクセス許可 |
"D" |
SDDL_ACCESS_DENIED | アクセス拒否 |
"OA" |
SDDL_OBJECT_ACCESS_ALLOWED | オブジェクト・アクセス許可 |
"OD" |
SDDL_OBJECT_ACCESS_DENIED | オブジェクト・アクセス拒否 |
"AU" |
SDDL_AUDIO | 監査 |
"AL" |
SDDL_ALARM | 警告 |
"OU" |
SDDL_OBJECT_AUDIO | オブジェクト監査 |
"OL" |
SDDL_OBJECT_ALARM | オブジェクト警告 |
ACEタイプ文字列 | ||
アクセスの許可や禁止を定義する。 |
■「ACEフラグ」
ACEの継承に関する情報を表す。
文字列 |
フラグ名 | 意味 |
"CI" |
SDDL_CONTAINER_INHERIT | コンテナ継承 |
"OI" |
SDDL_OBJECT_INHERIT | オブジェクト継承 |
"NP" |
SDDL_NO_PROPAGATE | 伝播なし |
"IO" |
SDDL_INHERIT_ONLY | 継承のみ |
"ID" |
SDDL_INHERITED | 継承 |
"SA" |
SDDL_AUDIO_SUCCESS | 監査成功 |
"FA" |
SDDL_AUDIO_FAILURE | 監査失敗 |
ACEフラグ文字列 | ||
継承方法を定義する。 |
■「権利」
オブジェクトのアクセス権を表す。
文字列 |
権利名 | 意味 |
一般アクセス権 | ||
"GA" |
SDDL_GENERIC_ALL | 全アクセス権(読み書き実行) |
"GR" |
SDDL_GENERIC_READ | 読み出し |
"GW" |
SDDL_GENERIC_WRITE | 書き込み |
"GX" |
SDDL_GENERIC_EXECUTE | 実行 |
標準アクセス権 | ||
"RC" |
SDDL_READ_CONTROL | ACL情報の読み取り |
"SR" |
SDDL_STANDARD_DELETE | 削除 |
"WD" |
SDDL_WRITE_DAC | DACLの書き込み |
"WO" |
SDDL_WRITE_OWNER | 所有者情報の書き込み |
ディレクトリ・サービス・オブジェクト・アクセス権 | ||
"RP" |
SDDL_READ_PROPERTY | オブジェクトのプロパティの読み出し |
"WP" |
SDDL_WRITE_PROPERTY | オブジェクトのプロパティの書き込み |
"CC" |
SDDL_CREATE_CHILD | 子オブジェクトの作成 |
"DC" |
SDDL_DELETE_CHILD | 子オブジェクトの削除 |
"LC" |
SDDL_LIST_CHILDREN | 子オブジェクトの一覧 |
"SW" |
SDDL_SELF_WRITE | 検証済み書き込みアクセス権によって制御される操作の実行 |
"LO" |
SDDL_LIST_OBJECT | オブジェクトの一覧 |
"DT" |
SDDL_DELETE_TREE | すべての子オブジェクトの削除 |
"CR" |
SDDL_CONTROL_ACCESS | 拡張アクセス権によって制御される操作の実行 |
ファイル・アクセス権 | ||
"FA" |
SDDL_FILE_ALL | 全アクセス権(読み書き実行) |
"FR" |
SDDL_FILE_READ | 読み出し |
"FW" |
SDDL_FILE_WRITE | 書き込み |
"FX" |
SDDL_FILE_EXECUTE | 実行 |
レジストリ・アクセス権 | ||
"KA" |
SDDL_KEY_ALL | 全アクセス権(読み書き実行) |
"KR" |
SDDL_KEY_READ | 読み出し |
"KW" |
SDDL_KEY_WRITE | 書き込み |
"KX" |
SDDL_KEY_EXECUTE | 実行 |
16進数による直接指定 | ||
0x???????? | − | 16進数で直接アクセス権をビット指定することも可能 |
権利文字列 | ||
許可/禁止される権利を定義する。英字2文字による表記だけでなく、16進数を使って直接指定することも可能(例:0x7800003F)。具体的なアクセス権のビット指定については、Windows OSのPlatform SDK(開発キット)に含まれるsddl.hやWinnt.hインクルード・ファイルやAPIの解説(Access Rights and Access Masks[英語][マイクロソフトMSDN])などを参照のこと。 |
■「オブジェクトGUID」
パスワードの変更やリセットなど、特別なタスクの実行を許可するための権利を表すオブジェクトのGUID文字列を表す。
GUID文字列 | 名前 | 意味 |
"ab721a53-1e2f-11d0-9819-00aa0040529b" | User-Change-Password | パスワードの変更権利 |
"00299570-246d-11d0-a768-00aa006e0529" | User-Force-Change-Password | パスワードのリセットの権利 |
オブジェクトGUIDの例 | ||
利用可能なGUIDの一覧については「スクリプトを使用した Active Directory セキュリティの管理(マイクロソフト Technet)」などを参照のこと。 |
■「継承オブジェクトGUID」
ACEを継承するオブジェクトのGUIDを表す文字列を指定する。
■「アカウントSID」
ACEの提供対象となるSIDを表す。SIDについては「オブジェクトを識別するSIDとは?(Windows TIPS)」を参照のこと。「S-1-……」といった標準的な形式だけでなく、あらかじめ用意されているアカウントに対しては、以下のような2文字の省略形も使用することができる。
文字列 |
アカウント名 |
"AO" |
Account operators |
"AN" |
Anonymous Logon |
"AU" |
Authenticated Users |
"BA" |
ビルトイン(Built-in) Administrators |
"BG" |
ビルトイン(Built-in) Guests |
"BO" |
Backup Operators |
"BU" |
ビルトイン(Built-in) Users |
"CA" |
Cert Server Admins |
"CG" |
Creator Group |
"CO" |
Creator Owner |
"DA" |
Domain Administrators |
"DC" |
Domain Computers |
"DD" |
Domain Controllers |
"DG" |
Domain Guests |
"DU" |
Domain Users |
"EA" |
Enterprise Administrators |
"ED" |
Enterprise Domain Controllers |
"IU" |
Interactive |
"LA" |
ローカル(Local) Administrator |
"LG" |
ローカル(Local) Guest |
"LS" |
ローカル(Local) Service |
"NO" |
Network Configuration Operators |
"NS" |
Network Service |
"NU" |
Network |
"PA" |
Group Policy Administrators |
"PO" |
Printer Operators |
"PS" |
Principal Self |
"PU" |
Power Users |
"RC" |
Restricted Code |
"RD" |
Terminal Server Users (RD=Remote Desktop) |
"RE" |
Replicator |
"RS" |
RAS Servers |
"RU" |
Pre-Windows 2000 Compatible Access |
"SA" |
Schema Administrators |
"SO" |
Server Operators |
"SU" |
Service |
"SY" |
ローカル(Local) System |
"WD" |
Everyone (WD=world) |
"S-1-……" |
標準的な表記によるSID |
SIDアカウントに指定可能な文字列 | |
あらかじめ用意されているアカウントや組み込みアカウントに対しては、ここに示すように、英字2文字の省略形が用意されている。なおこれらの文字列と対応するIDは、Platform SDKに含まれるSddl.hファイルに記述されている。 |
■
以上のようにして合成されたSDDL文字列は、例えばWindows Server 2003のcaclsコマンドなどで使用することができる。これについては別記事の「caclsコマンドでACLを編集する(SDDL編)」を参照していただきたい。
関連リンク | ||
セキュリティ記述子定義言語(Security Descriptor Definition Language)[英語](マイクロソフトMSDNサイト) | ||
[HOWTO] Active Directory 環境で Windows XP SP2 のネットワーク保護技術を構成する方法(マイクロソフトTechnetサイト) | ||
スクリプトを使用した Active Directory セキュリティの管理(マイクロソフトTechnetサイト) | ||
Access Rights and Access Masks[英語](マイクロソフトMSDN) | ||
サービスの随意アクセス制御リストを作成する場合の推奨事項およびガイド(マイクロソフト サポート技術情報) | ||
Windows XP で編集したグループ ポリシーが Windows 2000 で機能しない(マイクロソフト サポート技術情報) | ||
|
「Windows TIPS」 |
- Windows TIPS (2009/1/9)
− アクセスベースの列挙機能を利用する(Server 2008編)
− オフラインでレジストリを閲覧・編集する
− Windows Vistaの[休止状態]オプションを有効にする - Hyper-V、物理サーバ → 仮想サーバ 移行の実際 (2009/1/8)
物理サーバ/VMwareからHyper-Vによる仮想サーバへの具体的な移行手順。現サーバ環境の統合手順をステップ・バイ・ステップで解説 - 第154話 節電を手軽に (2009/1/6)
「えっ? パソコンの電源ボタンをいきなり押して電源切ってもいいんだぁ…」「あ、昔はダメだったけど、最近のは大丈夫なんですよ」 - Windows TIPS (2008/12/26)
− Vistaがスリープ状態から勝手に復帰するのを防止する
− diskpartコマンドでディスクのパーティションを操作する
− 特定のレジストリ・キー以下を素早くバックアップする
|
|
スポンサーからのお知らせ
- - PR -