(A;;CCLCSWLORC;;;AU) ← こんな呪文みたいな随意アクセス制御リストを読み解いてみた

Windows 10 で IME が一切合切動作しなくなった話 にて sc sdset schedule D:(A;;CCDC…… みたいなコマンドを扱ったのだが、このコマンド、何してるのかさっぱりわからん。どうも「随意アクセス制御リスト」という仕組みらしい。

何も知らないのは気持ち悪いので、資料 サービスの随意アクセス制御リストを作成する場合の推奨事項およびガイド に従って読み解いてみる。

今回読みたいもの

以下の呪文。

sc sdset schedule D:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;IU)(A;;CCLCSWLORC;;;AU)(A;;CCLCSWRPDTLOCRRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCLCSWLORC;;;BU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

呪文を整理する

上記だと読みづらいので読みやすくしておく。行単位で分けてみた。

sc sdset schedule
D:
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;IU)
(A;;CCLCSWLORC;;;AU)
(A;;CCLCSWRPDTLOCRRCWDWO;;;BA)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)
(A;;CCLCSWLORC;;;BU)
S:
(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

呪文の構成要素1: sc sdset

sc sdset XXXX で「サービス XXXX のセキュリティ記述子を設定する」という意味になる。つまりは随意アクセス制御リストを指定してセキュリティ設定を変えるということ。

ここでは sc sdset schedule を扱っている。schedule とは Task Scheduler のサービス名。つまり sc sdset schedule は「Task Scheduler のセキュリティ設定を、随意アクセス制御リストを指定して変えますよ」という意味になる。

(おまけ): 設定を見たいなら sc sdshow

sc sdshow XXXXX を実行すると、サービス XXXXX のセキュリティ記述子を閲覧できる。

呪文の構成要素2: D: とか S: とか

Windows のアクセス制御リスト(ACL) には DACL と SACL の二種類ある。

D: は随意アクセス制御リスト(Discretionary Access Control List、DACL) を意味する。本記事で扱うのもここ。例では五つ分のリストがある。

S: は System ACL を意味する。日本語名は不明。用途は管理者がログを見れるようにすることで、いわゆる Windows の「監査」機能に絡む部分。詳しいことはよくわからん。本記事では扱わない。例では一つだけリストがある。

参考: Access Control Lists | Microsoft Docs

呪文の構成要素3: A;;XXXXXXX の部分

いよいよメインに入る。ただし DACL(随意アクセス制御リスト) のみ解説する。SACL は取り上げない。

まず全体像は以下のようになっている。

<可否指定>;;<アクセス許可を変更したい操作名の列>;;;<SID>

これが意味するのは、

「SID が示すオブジェクト」に対して、「指定した操作を行う権限」を、「付与(許可) or 剥奪(拒否)」する

という具合。

可否指定

Aだと許可。Dだと拒否。

SID

SID とはセキュリティ識別子の意で、Windowsのオブジェクト(ユーザー等の資源や各種機能)を識別する識別子のこと。

例: S-1-5-21-917266621-1342861121-1792158721-512

厳密な仕様は英語だが [MS-DTYP]: SID あたりを読むこと。

この SID だが、随意アクセス制御リストでは Well Known SID という「よく使われる SID」の「短縮形」を入力する

短縮形の正式名称は このガイド にて端的にまとまっている。

IU = 対話型ログオン ユーザー
AU = Authenticated Users
BA = ビルトイン (ローカル) の Administrators
SY = Local System
BU = ビルトイン (ローカル) の Users
WD = Everyone (World)

アクセス許可を変更したい操作名の列

アクセス許可を変更したい操作を 2文字1操作 で列挙していく。2文字略称と操作名の対応はやはり このガイド が端的。

例: CCDCLCSWRPWPDTLOCRSDRCWDWO を読み解いてみる

まずは見づらいので分解する。

CCDCLCSWRPWPDTLOCRSDRCWDWO

  ↓

CC
DC
LC
SW
RP
WP
DT
LO
CR
SD
RC
WD
WO

続いて、ガイドを参考に、正式名称を併記してみる。

CC = QueryConf
DC = ChangeConf
LC = QueryStat
SW = EnumDeps
RP = Start
WP = Stop
DT = Pause
LO = Interrogate
CR = UserDefined
SD = Del
RC = RCtl
WD = WDac
WO = WOwn

だいぶわかりやすくなった。この CCDCLCSWRPWPDTLOCRSDRCWDWO という呪文は、「QueryConf と、ChangeConf と、QueryStat と、……WOwn。以上の操作についてアクセス許可を変更したいです」という意味になる。

ここで「QueryConfって何やねん」という疑問が浮かぶ……が、残念ながら解説資料にはたどり着けず。リファンレンスがあると思うんだけどなぁ。ご存知の方、いらっしゃったらぜひ教えてください。とりあえず Start/Stop はサービスの開始/停止だよね?

まとめてみよう

呪文の構造について整理できた。では、今回読みたい呪文について、改めて読み解いてみよう。

もう一度、今回読み解く呪文を載せる。

sc sdset schedule
D:
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;IU)
(A;;CCLCSWLORC;;;AU)
(A;;CCLCSWRPDTLOCRRCWDWO;;;BA)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)
(A;;CCLCSWLORC;;;BU)
S:                                        ★ 今回は SACL は扱わないので
(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)   ★ この二行の読解はしない。

ここから今回扱わない SACL 部分を省く。

sc sdset schedule                      ★Task Scheduler のセキュリティ設定を、
D:                                     ★随意アクセス制御リストを使って変更する、の意。
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;IU)
(A;;CCLCSWLORC;;;AU)
(A;;CCLCSWRPDTLOCRRCWDWO;;;BA)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)
(A;;CCLCSWLORC;;;BU)

Task Scheduler のセキュリティ設定を変える、というところまで読めた。残りは、

(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;IU)
(A;;CCLCSWLORC;;;AU)
(A;;CCLCSWRPDTLOCRRCWDWO;;;BA)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)
(A;;CCLCSWLORC;;;BU)

この部分。

これを上記ルールに従って読み解くと、こんな感じになる。

  • 対話型ログオンユーザーについて、QueryConf, ChangeConf, QueryStat, EnumDeps, Start, Stop, Pause, Interrogate, UserDefined, Del, RCtl, WDac, WOwn の操作を、許可(Allow)します
  • Authenticated Users について、QueryConf、QueryStat、EnumDeps、Interrogate、RCtl の操作を、許可(Allow) します
  • ビルトイン (ローカル) の Administrators について、……
  • Local System について、……
  • ビルトイン (ローカル) の Users について、……
  • Everyone (World) について、……

※すいません、途中で面倒くさくなったので一部書けてません(変換スクリプト書くべきでしょうね。人間がやる仕事じゃない)。

ともあれ、何をやっているのかがなんとなく見えてきた。

おわりに

呪文みたいな随意アクセス制御リストの読み方を最低限理解できたと思う。

これでひとまず「実は rmdir /s /q c:\ みたいな悪さしてるんじゃないか?」という懸念は解消できたかな。

※これは「c:\ 配下の全てのファイルをいきなり削除する」コマンドである。たまーにだけどネット上で「その問題はこのコマンド叩いたら解決するよ」というシャレにならないイタズラをする人がいて、知らない人が泣きを見ることがある。私も Windows 10 で IME が一切合切動作しなくなった話 の対応は機械的にコピペで実行しちゃったので、もしこれと同じ類の罠があったとしたら……と不安になっていた。今回、読み方をこうして理解してみて、罠は無いとわかったので一安心。

参考

p.s. 本記事を全部書いてから気付いたのがが、★1 のページ、日本語で網羅的にまとまっててわかりやすい。この記事書いた意味ないなぁ……