IT関連

アクセス権とかの話(icacls、get-aclコマンドで取れるもの)

おはようございます。こんにちは。こんばんは。
ミッド(@mid_v_lab)です

最近ファイルサーバ周りの仕事をしています。

ファイルサーバ運用では、アクセス権をきちんと制御することが大事です。

自宅用のNASとかならeveryone権限でも良いですけど、企業で利用するならアクセス権付けてない場合、

監査
監査
なんで全公開してるの?舐めてるの?○すよ?

と、監査部門から恐ろしい言葉を聞けることが間違いありません。

※そして指摘事項として改善を求められると共に、全社でそういう権限付けてるフォルダがないかを確認させられる羽目に・・・

しっかり付けようアクセス権!

今日は、フォルダについているアクセス権の確認方法として、

  • icacls
  • get-acl

で、取得できるものをご紹介します。

どちらもWindows標準コマンドなので、Windows環境であれば利用することができると思います。

ミッド
ミッド
では、いってみましょう~~

icaclsで取れる情報

icaclsで取得できる情報を見ていきます。

「icacls + フォルダ名」の結果を見てみましょう。

コマンド実行結果

d:\test>icacls test
test BUILTIN\Administrators:(I)(F)
BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
NT AUTHORITY\Authenticated Users:(I)(M)
NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)
BUILTIN\Users:(I)(RX)
BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

上記のような結果になりました。

実際の画面と見比べてみましょう。フォルダを右クリック>プロパティ>セキュリティタブから詳細設定を開きます。

GUI上では、

  • administrator
  • SYSTEM
  • Authenticated Users
  • Users

の4つのアクセス権が付いています。

コマンド実行結果では、上記2つがダブって表示されていますね。

アクセス権の後ろについている記号を読み解いていきましょう。

(I)・・・親コンテナーから継承した権限

(F)・・・フル アクセス権

(OI)・・・オブジェクト継承

(CI)・・・コンテナー継承

(IO)・・・継承のみ

(M)・・・変更アクセス権

(RX)・・・読み取りと実行のアクセス権

(GR,GE)・・・一般的な読み取り、一般的な実行

上記は、「icacls /?」のヘルプメニューで確認できます。

「BUILTIN\Administrators:(I)(F)」は、親コンテナーから継承したフルコントロール権限ということですね。

「BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)」は親コンテナーから継承した、オブジェクト継承、コンテナー継承、継承のみのフルコントロール権限か・・・

ちょっと何言ってるか分からない。

別のパスのフォルダでicaclsを実行してみました。

コマンド実行結果

C:\Users>icacls <ユーザ名>
<ユーザ名> NT AUTHORITY\SYSTEM:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)
<PC名>\<ユーザ名>:(OI)(CI)(F)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

ユーザフォルダで実行したところ、権限が重なっている出力されることはなかったです。

このフォルダは継承元の最上位なので、その下位なら事象が出るのかと思い実行してみましたが、そんなことは無かったです。

なぜ、Dドライブに作ったtestフォルダは権限が2重で表示されるのか・・・

とりあえず、アクセス権は取得できることが分かりました。

ミッド
ミッド
権限が2重で出る問題は一旦置いておいて、次に行きます。

get-aclで取れる情報

続いて、我らがPowerShellのコマンドである「get-acl」で取得できる情報を見ていきます。

「get-acl + フォルダ名」の結果を見てみましょう。

コマンド実行結果

PS D:\test> Get-Acl test

ディレクトリ: D:\test

Path Owner Access
—- —– ——
test <PC名>\<ユーザ名> BUILTIN\Administrators Allow FullControl…

見切れた!!

パイプラインで「Format-Table -AutoSize -Wrap」をつなげて再実行!

※このコマンドで、表示を延ばしてくれるっぽいです

コマンド実行結果

PS D:\test> Get-Acl test | Format-Table -AutoSize -Wrap

ディレクトリ: D:\test

Path Owner Access
—- —– ——
test <PC名>\<ユーザ名> BUILTIN\Administrators Allow FullControl
BUILTIN\Administrators Allow 268435456
NT AUTHORITY\SYSTEM Allow FullControl
NT AUTHORITY\SYSTEM Allow 268435456
NT AUTHORITY\Authenticated Users Allow Modify, Synchronize
NT AUTHORITY\Authenticated Users Allow -536805376
BUILTIN\Users Allow ReadAndExecute, Synchronize
BUILTIN\Users Allow -1610612736

張り付けたらめっちゃ見づらいので、スクショを張ります。

スクショだと見やすいですね。

アクセス権がダブってるのは、icaclsの結果と同じですね(汗

こちらではフォルダの所有者まで表示されています。

アクセス権がダブっているのは私の環境のような気がしてきました。

数字で記載されている権限は良く分かりませんが、

  • BUILTIN\Administrators Allow FullControl
  • NT AUTHORITY\SYSTEM Allow FullControl
  • NT AUTHORITY\Authenticated Users Allow Modify, Synchronize
  • BUILTIN\Users Allow ReadAndExecute, Synchronize

の4つ(実際についている権限)を見ると、AdministratorとSYSTEMがフルコントロール、Authenticated Usersが変更、Usersが読み取りと実行が付いていると分かります。

ミッド
ミッド
icaclsと比較して、直感的に権限が分かりますね。

ただ、継承された権限なのか、そうでないのかが判断できません。

オプションとかを付けると、継承が分かったりしないか確認したところ、パイプラインで「Select-Object -ExpandProperty Access」を付けると確認できる模様。

やってみました。

コマンド実行結果

PS D:\test> Get-Acl test | Select-Object -ExpandProperty Access

FileSystemRights : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited : True
InheritanceFlags : None
PropagationFlags : None

FileSystemRights : FullControl
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SYSTEM
IsInherited : True
InheritanceFlags : None
PropagationFlags : None

FileSystemRights : Modify, Synchronize
AccessControlType : Allow
IdentityReference : NT AUTHORITY\Authenticated Users
IsInherited : True
InheritanceFlags : None
PropagationFlags : None

FileSystemRights : ReadAndExecute, Synchronize
AccessControlType : Allow
IdentityReference : BUILTIN\Users
IsInherited : True
InheritanceFlags : None
PropagationFlags : None

※良く分からない数字のアクセス権限のやつは省いています。

このなかで、「IsInherited : True」が上位継承ありを表すようです。

さっきの結果と比べるとすこし見づらいので、csvなどで出力するときに工夫が必要かもしれませんね。(あとで考えます・・・)

アクセス権をどこまで確認するかによって、「icacls」と「get-acl」をそれぞれ組み合わせていくと良いかもしれませんね。

上記のサイトのようにフォルダのアクセス権を抜き出して、継承元も追記したいですね。

ミッド
ミッド
ぶっちゃけ、アクセス権を取得するソフトの世の中にいっぱいあるので、そういう製品を使ってしまうのも一つの手ですね。

おまけ:アクセス権が付いているか確認する方法

意外と知らない人が多いので、おまけで該当フォルダにアクセス権が付いているかを確認する方法を記載しておきます。

フォルダにアクセスできないのが、

  • アクセス権の問題なのか
  • それ以外なのか

を切り分ける最初のSTEPに便利です。

対象のフォルダを右クリックして、プロパティ>セキュリティタブ>詳細設定を開きます。

「有効なアクセス」というタブがあるのでここを選択して、ユーザの選択から

アクセス権を調べたいユーザを入力して、「OK」を選択。

前の画面に戻ってくるので、「有効なアクセス許可の表示」をクリックすると・・・

そのユーザのアクセス権が表示されます。(緑チェックはアクセス権がある状態)

これで簡単にアクセス権が付いているか・いないか判断できます。

お試しあれ~


Windows標準コマンドでのアクセス権の見方でした。

PowerShell側のget-aclはもう少し工夫したいと思います。

インストールなしのソフトで、簡単にアクセス権を引っこ抜いてくれるフリーソフトはないものか・・・なかったら作るか

ではでは

にほんブログ村 サラリーマン日記ブログ IT系サラリーマンへ
PVアクセスランキング にほんブログ村