質問: ### 前提・実現したいこと クライアントからファイルサーバの共有フォルダへ、SYSTEM権限で動作するプログラムでアクセスしたいと考えております。 ここでいうアクセスしたいとは、その共有配下に存在するフォルダ内のファイルを読み取ることを指しています。 ※プログラムはC# .NETで作成し、サービスプログラムから実行しています。 ### 困っていること 解決したいこと 共有配下に存在するフォルダのNTFSアクセス権にSYSTEM権限の 「フルコントロール」の許可を設定しても、ファイルを見つけることができなくて困っております。 ### 気づき 共有配下に存在するフォルダのNTFSアクセス権にEveryoneの ・読み取りと実行 ・フォルダーの内容の一覧表示 ・読み取り の許可を追加すると、ファイルを見つけることができるようになります。 →実はその作成したプログラムはSYSTEM権限で動いていない? →.NETの System.Environment.UserNameプロパティにて取得し SYSTEMで実行されていることを確認 なお、セキュリティの観点から、Everyoneを追加はしたくないと考えております。 (通常ならSYSTEM権限で許可設定されていればSYSTEM権限でアクセスできると思っています。) ### 構築した環境について ・ファイルサーバ → Windows Server 2012 R2 Standard メモリ 4.00GB ・クライアント → Windows 7 Professional SP1 メモリ 3.00GB ・クライアントとファイルサーバは同じドメインに参加しています(AD) ・ファイルサーバのGuestアカウントは無効になっています アクセス先のフォルダ構造(ファイルサーバ側) ---------------------- ``` D:. └─AAAAA └─BBBBB └─Share ← 共有 └─CCCCC └─TEXT.txt ← 見つけ出して読み取りたいファイル ``` ### それぞれのアクセス権設定 **「AAAAA」** ``` NTFSアクセス権 ・CREATOR OWNER ・特殊なアクセス許可 ・SYSTEM ・フルコントロール ・Administrators(filesrv\Administrators) ・フルコントロール ・特殊なアクセス許可 ・Users(filesrv\Administrators) ・読み取りと実行 ・フォルダーの内容一覧表示 ・読み取り ・特殊なアクセス許可 ``` **「BBBBB」** ``` NTFSアクセス権 AAAAAと同じ(すべて継承) ``` **「Share」** ``` NTFSアクセス権 ・CREATOR OWNER ・特殊なアクセス許可 ・SYSTEM ・フルコントロール ・Administrators(filesrv\Administrators) ・フルコントロール ・Users(filesrv\Administrators) ・特殊なアクセス許可 ・Backup Operators(filesrv\Backup Operators) ・読み取りと実行 ・フォルダーの内容の一覧表示 ・読み取り 共有アクセス権 ・Users(filesrv\Administrators) ・フルコントロール ``` **「CCCCC」** ``` ・CREATOR OWNER ・特殊なアクセス許可 ・SYSTEM ・フルコントロール ・Administrators(filesrv\Administrators) ・フルコントロール ・Backup Operators(filesrv\Backup Operators) ・読み取りと実行 ・フォルダーの内容の一覧表示 ・読み取り ``` **「TEXT.txt」** ``` ・SYSTEM ・フルコントロール ・Administrators(filesrv\Administrators) ・フルコントロール ・Backup Operators(filesrv\Backup Operators) ・読み取りと実行 ・読み取り ``` ### 知りたいこと ・なぜフォルダやファイルにSYSTEM権限が付与されているにもかかわらず読み取ることができないのか。 ・SYSTEM権限で実行されるプログラムでアクセス、ファイルを読み取るにはどうしたらよいか。 ・クライアントにDomain Userでログインし、エクスプローラからファイルサーバの共有にアクセスしようとしても 認証が特に求められないのはAD環境でDomain Userでアクセスしているからか? (ローカル管理者だと認証を求められる) ・SYSTEM権限で動作するプログラムでアクセスしようとした場合、認証が必要か? よろしくお願いいたします。
回答: 試したことないので、想定の域を超えませんが・・・ Microsoftでは「SYSTEMはビルトイン・アカウントであり、各ローカルに用意されたアカウント」とあります。 共有に設定したSYSTEMに対しての権限付与は、共有サーバローカルのSYSTEMに対しての評価であり、接続元SYSTEMの評価ではないような気がします。 Active Directory サーバ上のSYSTEMアカウントであれば、該当ドメイン参加のMS製品OSに対してSYSTEMで接続できるようです。