- PR -

VBScriptでドメインユーザとしてexeを実行する方法

1
投稿者投稿内容
フスス
会議室デビュー日: 2007/02/10
投稿数: 4
投稿日時: 2007-02-12 02:08
始めまして フススと申します。

ローカルユーザが実行するVBScript内でドメインユーザとしてcacls.exeやsubinacl.exe
などのexeを実行することができず、行き詰まっています。

※VBScriptは他の端末よりsshで実行することを考えており、スクリプト自体をドメイン
 ユーザとして実行することはできない環境です。

VBScript内でドメインユーザの権限を取得して、exeを実行する方法をご存知の方がおら
れましたら御教授頂ければと思います。

よろしくお願い致します。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-02-12 15:14
引用:

フススさんの書き込み (2007-02-12 02:08) より:

ローカルユーザが実行するVBScript内でドメインユーザとしてcacls.exeやsubinacl.exe
などのexeを実行することができず、行き詰まっています。

VBScript内でドメインユーザの権限を取得して、exeを実行する方法をご存知の方がおら
れましたら御教授頂ければと思います。



まず、別の資格情報で process を立ち上げる(偽装する)ことは、Windows の仕様ではちゃんと用意されています。

ただし、これを直に扱うには Win32 API (具体的には CreateProcessWithLogonW) を呼び出すことになるため、VBScript からは直接扱えません。

それから、こっちのほうがもっと重要なんですが、偽装を利用するにはその user の password を安全に保存する必要があります。
で、これを安全に実装するとなるとそれこそものすごく大変なことになるので、普通は Windows に組み込まれている安全な方法で回避してやるのが望ましいです。

今回の場合、

引用:

※VBScriptは他の端末よりsshで実行することを考えており、スクリプト自体をドメイン
 ユーザとして実行することはできない環境です。



というのが前提条件のようですが、個人的には何で SSH? って感じですが。。。
別の端末を管理する方法には、WMI を利用するとか、TaskScheduler を利用するとか、
logon, logoff, startup, shutdown script とかいろいろ技術があるわけです。

ちゃんとした知識を保持していて、かつ適切な実装が確実にできるという場合を除き、こういう認証部分に関するところはできるだけあらかじめ用意されている方法を利用したほうがよいでしょう。
フスス
会議室デビュー日: 2007/02/10
投稿数: 4
投稿日時: 2007-02-13 01:02
ちゃっぴさま

ご回答ありがとうございます。

ユーザ管理をOpenLDAPで管理しており、ActiveDirectoryへのユーザ登録・削除など
一連の操作がOpneLDAP側からの操作で行えるようにしたいというのが背景です。

※WIndows側に必要なスクリプトを用意しておき、ユーザ管理のサーバ(OpenLDAP)
 からssh(公開鍵認証)でアクセスし、スクリプトを実行(Windows側にOpenSSHを
 セットアップしています)。

現在、その為のスクリプト作成をVBScriptで行っており、今回の質問をさせて頂いた
次第です。

CreateProcessWithLogonWを利用して別権限を取得する方法については、確かに
いくつかのサイトで紹介されていましたが、以下のサイトを参考にユーザの登録等の
操作が行えたため、他にもVBScriptから行う方法があるのではないかと考え質問させ
て頂いておりました。

--------------------------------------------------------------------------
Hey, Scripting Guy! 別の資格情報のもとでスクリプトを実行するには
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/dec04/hey1213.mspx
--------------------------------------------------------------------------

ちゃっぴさまのいわれるとおり、認証部分に関する内容であり、PWの扱いを含め
まだまだ検討すべきことは多く残っていると考えております。

また、今回頂きました「WMI を利用して別の端末を管理する方法」については自分の
勉強不足は否めません。

WMIをもう一度勉強した上で、最終的にVBScriptで作りこむことになった場合は
Win32 API (CreateProcessWithLogonW)を利用する方向で検討したいと思います。

ありがとうございました。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-02-13 22:16
あ、なるへそ。そういう要件でしたか。

なら、SSH で偽装というのも有効な手段でしょうね。

でも、私が同じような要件を実現するとするならば、面倒なので製品の導入が最有力で、次の手段としては Web service でもつくるかなぁ。。。

引用:

最終的にVBScriptで作りこむことになった場合は
Win32 API (CreateProcessWithLogonW)を利用する方向で検討したいと思います。



すでに書きましたけど、VBScript から直接 CreateProcessWithLogonW は呼べませんので、別の言語で VBScript から扱える ActiveX dll を作成するなり、exe にするなりしないとダメですよ。

あと、お手軽にというなら TaskScheduler に登録しておいて、必要に応じて SCHTASKS /RUN させるという方法もあると思います。
1

スキルアップ/キャリアアップ(JOB@IT)