おはようございます。こんにちは。こんばんは。
ミッド(@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重で表示されるのか・・・
とりあえず、アクセス権は取得できることが分かりました。
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が読み取りと実行が付いていると分かります。
ただ、継承された権限なのか、そうでないのかが判断できません。
オプションとかを付けると、継承が分かったりしないか確認したところ、パイプラインで「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はもう少し工夫したいと思います。
インストールなしのソフトで、簡単にアクセス権を引っこ抜いてくれるフリーソフトはないものか・・・なかったら作るか
ではでは