locked
ワークグループ環境で別端末にユーザーアカウトの追加・変更方法 RRS feed

  • 質問

  • ワークグループ環境において、プログラムを用いて、端末Aから端末Bにローカルユーザーアカウントの追加・変更を行いたいと考えております。

    こちらのURL:「ディレクトリ サービスと Visual C# を使用してローカル システムにユーザーを追加する方法」
    (https://support.microsoft.com/ja-jp/kb/306273/ja?wa=wsignin1.0)
    を参考にプログラムの実装を行いましたが、
    自端末へのユーザーアカウントは操作できますが、他端末への処理に不都合が生じております。

    例えば、以下のように「端末A」から、「端末B」対して新規のユーザーアカウントを追加するケースです。

    ■ケース(正常ケース)
    端末A.UserA /PassWord_A
    端末B.UserA /PassWord_A
     ※端末A,Bのユーザーアカウントのパスワードは一致

    端末Aから、端末Bに対して、UserBを作成する処理を実施。
    このケースでは、問題なくUserBを作成できます。

    ■ケース(エラーケース)
    端末A.UserA /PassWord_A
    端末B.UserA /PassWord_AAA
     ※端末A,Bのユーザーアカウントのパスワードは不一致

    端末Aから、端末Bを指定して、UserBを作成する処理を実施。
    このケースでは、当然ですが、端末Bへの認証時にパスワードが異なるエラーが発生します。

    参考URLの.NETクラスである DirectoryEntry クラスには
    ユーザーIDとパスワードを指定できるプロパティが存在していますが
    このプロパティは、Active Directory ドメイン サービスの情報にアクセスするための情報であり
    ワークグループ環境では、例えば端末AとB両方にUserAdminなるものを作成し、このパスワードを一致させていても
    うまくワークしないようです。

    ワークグループ環境において、予め端末Aと端末Bにパスワードを一致するユーザーを作成しておいて、
    プログラムから、この所定ユーザーを使って、ワークグループ内の他端末へユーザーアカウントの操作を行う方法は
    ありませんでしょうか?

    お手数をおかけします、何かヒント等いただければ幸いです。


    2015年6月13日 17:40

回答

  • Unripe01 さま 拝見しました。

    失礼しました。 ネットワーク越しは駄目でしたね。

    では、 Sysinternals の PsExec を介して、 cmd の net users を立ち上げるのでは如何でしょうか。

    以下の記事が参考になるかと思います。

    リモート・コンピュータ上でプログラムを実行する(PsExec編)
      リモート・コンピュータ上でコマンド・プロンプトを起動する の章を参照
    http://www.atmarkit.co.jp/ait/articles/1205/11/news147.html

    PsExec  リンク
    https://technet.microsoft.com/ja-jp/sysinternals/bb897553.aspx?f=255&MSPPError=-2147217396
    • 編集済み ShiroYuki_Mot 2015年6月15日 0:57 PsExec リンク追加
    • 回答の候補に設定 チャブーンMVP 2015年6月18日 3:19
    • 回答としてマーク Unripe01 2015年6月22日 0:33
    2015年6月15日 0:49
  • ShiroYuki_Mot 様

    ご返信が遅くなりました。
    ご提案いただいたツールを使って、目的の操作をすることができました。

    また、上記ツールを利用しなくても、
    下記の状況下において
    ログインしているユーザーのパスワードが端末間で不一致であっても
    別のアカウント権限を用いてワークグループ内の端末のユーザーアカウントを操作できました。

    【評価環境】
    ・端末は2台(ワークグループ)
    端末A
    端末B

    ・ユーザーは端末ごとに2名(4アカウント)
    端末A.USER_A
    端末A.Admin
    端末B.USER_A
    端末B.Admin
     ※USER_Aのパスワードは、端末AとBで異なる。
     ※Adminのパスワードは、端末AとBで一致。

    【前提・手順】
    前提としては、端末Aに、USER_Aでログインし、端末Bに対するユーザーアカウント操作を実施する。
    しかし、端末Bに存在するUSER_Aとはパスワードが異なるため、
    特にアカウント情報や、端末Bにアクセスする際のパスワードを指定しなければ認証エラーとなる。

    【変更可能となる状況】
    ・パスワード不一致でも別アカウントの情報を使ってユーザーアカウント操作ができる方法

    1.NET USE を、端末Bに対して実施(UserにAdminを使う(パスワード一致))
     net use \\端末B\IPC$ **pass** /user:端末B\Admin
     ここで、net use を叩くと
    「OK \\端末B\IPC$ Microsoft Windows Network」 が表示される。

    2.端末BにIPC$ が通っている状態であれば質問冒頭のDirectoryEntry クラスでの操作が正常に作動する。
     USER_Aではなく、NET USEを行ったAdminのユーザー認証でユーザーアカウント操作が行われていると推測できる。

    【考察】
    このことより、恐らく、以下の様な状態であると推察しています。

    1.net use コマンドを使用して共有リソースへの接続を実施
     →SMB セッションのユーザーの認証が通る。
      端末A上のSMB セッションにAdminの認証情報が保持される。

    2.ユーザーアカウントの操作
     ユーザーアカウント操作のため、SAMデータベースへのアクセス(SAMR)が試みられる。
     この時、SMBセッション上の認証情報が利用されているため?(多分)
     ログオンしているユーザーアカウントの認証情報ではなく、Adminで操作したことになる。

    憶測の域を超えず、少々仕様の裏を突いたような動きの気もしますが、ツールを使わなくても敢えてこのような状況にすることでも同様の操作が可能であったことをご報告致します。

    この度は色々とありがとうございます。

    2015年6月17日 5:47
  • Unripe01 さま 拝見しました。

    そうですね。 IPC$リソースへの接続でセッション確立 の手がありましたね。
    大変、参考になりました。

    検索で、来られる方の為に 参考ページのリンクを。
      第20回 ファイル共有プロトコルSMB/CIFS(その1) (3/3) - @IT
              ファイル・サーバとのセッション・セットアップ 章 参照
     http://www.atmarkit.co.jp/ait/articles/0410/29/news103_3.html

    2015年6月17日 8:33

すべての返信

  • Unripe01 さま よろしく。

    cmd.exe の net user コマンドを別プロセスで動かすのでは駄目ですか?。

    勿論、バッチにしてしまってもいい訳ですが、 必要情報からコマンドを生成し C# から呼び出す手もあるかと。

    そんな単純なお話ではないのでしょうか。

    2015年6月14日 4:39
  • ShiroYuki_Mot 様

    早速のご返信ありがとうございます。
    .NETにかぎらず、Windows上で作動するテクノロジで実現可能であれば何でも問題ありません。
    もちろんご指摘いただいているnet userをプロセス起動することも問題ありません。

    「特定のユーザーアカウントを使用して、ワークグループ内の別端末にユーザーを作る」
    という行為ができるかどうかが一番の焦点となります。

    "net user"に指定可能な引数を調べたところ、
    ローカル端末には、特定のアカウントを用いてユーザー追加ができそうなのですが、
    ワークグループ内の別端末(端末B)に対して、別端末上のユーザーアカウントで、別端末上にアカウント追加をする。
    といった指定方法が無さそうに見えます。
    ( /WORKSTATIONS: 引数は、あくまでもローカル端末への指定のように読み取ってます)

    知識不足で大変申し訳ございませんが、"net user"で可能な指定方法があればご教示いただければ幸いです。

    勉強不足で申し訳ございません。


    2015年6月14日 18:14
  • すみません、自身の回答が分かりにくかったので補足します。

    ◆実現したいこと

    1.端末Aから端末Bに対してユーザーアカウント追加・変更処理を行いたい。

    2.この時、処理するユーザーアカウントを指定したい。

    ※架空のコマンドとなりますが、例えば このようなイメージです。

    net user "user001" "pass" /targetpc:"computerB" /operationuser "Admin" "pass"

      追加するユーザーIDとパスワード、ターゲットとなるPCを指定、/operationuser でその処理を実行するアカウントを指定

    このような処理を実現するためにActive Directoryがあると思うのですが、

    ワークグループ環境の場合、ユーザーアカウントとパスワードが端末間で一致していればドメイン環境でいうところの「同一ユーザー」としてみなされる為、なんとかならないかなぁと悩んでおります。


    2015年6月15日 0:38
  • Unripe01 さま 拝見しました。

    失礼しました。 ネットワーク越しは駄目でしたね。

    では、 Sysinternals の PsExec を介して、 cmd の net users を立ち上げるのでは如何でしょうか。

    以下の記事が参考になるかと思います。

    リモート・コンピュータ上でプログラムを実行する(PsExec編)
      リモート・コンピュータ上でコマンド・プロンプトを起動する の章を参照
    http://www.atmarkit.co.jp/ait/articles/1205/11/news147.html

    PsExec  リンク
    https://technet.microsoft.com/ja-jp/sysinternals/bb897553.aspx?f=255&MSPPError=-2147217396
    • 編集済み ShiroYuki_Mot 2015年6月15日 0:57 PsExec リンク追加
    • 回答の候補に設定 チャブーンMVP 2015年6月18日 3:19
    • 回答としてマーク Unripe01 2015年6月22日 0:33
    2015年6月15日 0:49
  • ShiroYuki_Mot 様

    早速のお返事ありがとうございます。

    ご提案いただいた内容は、まさにやりたいことそのもののように見えます!

    こんなに的確にご提案いただいて感動しました。本当にありがとうございます。

    実際に利用してみて、実現でき次第、改めてご報告しに参りたいと思います。

    今後ともよろしくお願い致します。

    2015年6月15日 1:01
  • ShiroYuki_Mot 様

    ご返信が遅くなりました。
    ご提案いただいたツールを使って、目的の操作をすることができました。

    また、上記ツールを利用しなくても、
    下記の状況下において
    ログインしているユーザーのパスワードが端末間で不一致であっても
    別のアカウント権限を用いてワークグループ内の端末のユーザーアカウントを操作できました。

    【評価環境】
    ・端末は2台(ワークグループ)
    端末A
    端末B

    ・ユーザーは端末ごとに2名(4アカウント)
    端末A.USER_A
    端末A.Admin
    端末B.USER_A
    端末B.Admin
     ※USER_Aのパスワードは、端末AとBで異なる。
     ※Adminのパスワードは、端末AとBで一致。

    【前提・手順】
    前提としては、端末Aに、USER_Aでログインし、端末Bに対するユーザーアカウント操作を実施する。
    しかし、端末Bに存在するUSER_Aとはパスワードが異なるため、
    特にアカウント情報や、端末Bにアクセスする際のパスワードを指定しなければ認証エラーとなる。

    【変更可能となる状況】
    ・パスワード不一致でも別アカウントの情報を使ってユーザーアカウント操作ができる方法

    1.NET USE を、端末Bに対して実施(UserにAdminを使う(パスワード一致))
     net use \\端末B\IPC$ **pass** /user:端末B\Admin
     ここで、net use を叩くと
    「OK \\端末B\IPC$ Microsoft Windows Network」 が表示される。

    2.端末BにIPC$ が通っている状態であれば質問冒頭のDirectoryEntry クラスでの操作が正常に作動する。
     USER_Aではなく、NET USEを行ったAdminのユーザー認証でユーザーアカウント操作が行われていると推測できる。

    【考察】
    このことより、恐らく、以下の様な状態であると推察しています。

    1.net use コマンドを使用して共有リソースへの接続を実施
     →SMB セッションのユーザーの認証が通る。
      端末A上のSMB セッションにAdminの認証情報が保持される。

    2.ユーザーアカウントの操作
     ユーザーアカウント操作のため、SAMデータベースへのアクセス(SAMR)が試みられる。
     この時、SMBセッション上の認証情報が利用されているため?(多分)
     ログオンしているユーザーアカウントの認証情報ではなく、Adminで操作したことになる。

    憶測の域を超えず、少々仕様の裏を突いたような動きの気もしますが、ツールを使わなくても敢えてこのような状況にすることでも同様の操作が可能であったことをご報告致します。

    この度は色々とありがとうございます。

    2015年6月17日 5:47
  • Unripe01 さま 拝見しました。

    そうですね。 IPC$リソースへの接続でセッション確立 の手がありましたね。
    大変、参考になりました。

    検索で、来られる方の為に 参考ページのリンクを。
      第20回 ファイル共有プロトコルSMB/CIFS(その1) (3/3) - @IT
              ファイル・サーバとのセッション・セットアップ 章 参照
     http://www.atmarkit.co.jp/ait/articles/0410/29/news103_3.html

    2015年6月17日 8:33