質問

ネットワーク上の異なるサーバー上の複数のIISインストールを管理できる小さなWebアプリを作成中です。ドメインコントローラーはありません。

win32 apiとそのLogonUserメソッドを使用する小さな偽装コントローラーを作成しました。次に、System.DirectoryServicesとIIS ADSIプロバイダーを使用して、新しいサイトを作成します。

次のルーチンがあります(読みやすくするために、一部の値をクリアテキスト文字列と交換しました):

            if (impersonationSvc.ImpersonateValidUser("Administrator@SRV6", String.Empty, "PASSWORD))
            {


            string metabasePath = "IIS://" + server.ComputerName + "/W3SVC";
            DirectoryEntry w3svc = new DirectoryEntry(metabasePath, "Administrator", "PASSWORD");

            string serverBindings = ":80:" + site.HostName;
            string homeDirectory = server.WWWRootNetworkPath + "\\" + site.FolderName;


            object[] newsite = new object[] { site.Name, new object[] { serverBindings }, homeDirectory };

            object websiteId = (object)w3svc.Invoke("CreateNewSite", newsite);
            int id = (int)websiteId;

            impersonationSvc.UndoImpersonation();
        }

このルーチンは、Webアプリがホストされているサーバー(SRV6)を使用するときに機能します。新しいサイトが作成されます。

たとえば、ネットワーク上の別のサーバー(ドメインなし)でSRV5を使用すると、ImpersonateValidUserは機能しますが、DirectoryEntryは作成されますが、w3svc.Invokeは次のエラーで失敗します。

[COMException(0x80070005):Access denied]

System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +377678
System.DirectoryServices.DirectoryEntry.Bind() +36
System.DirectoryServices.DirectoryEntry.get_NativeObject() +31
System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args) +53

...

誰も私がこれを解決する方法を知っていますか?

役に立ちましたか?

解決

この状況では、なりすましを使用できません。偽装しているアカウントには、ローカルマシンでのログイン特権が必要です。

Webサーバーがドメインの一部ではない場合、Webサービスに関するTant102のアイデアが唯一の方法だと思います。

他のヒント

SRV5のイベントログを調べて、そのサーバーに接続するときに使用される特権を確認します。セキュリティログにエラーを記録するには、グループポリシーを変更する必要がある場合があります。

サーバー上でWebサービスをセットアップする方が簡単に聞こえますが、できればログインやIP制限で保護されているため、この種の操作を実行できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top