none
ユーザに割り当てた端末のみにログインを制限したい RRS feed

  • 質問

  • 株式会社ゆめみの渡辺と申します。
    Windows 2008 R2 Enterprise SP1 にてActive Directoryドメインを運用しております。

    現在、各ユーザにマシンを貸与し、ADに参加させています。ユーザは「自身のPC」という意識があります。
    この「自身のPC」以外のPCにログインさせないよう、グループポリシ等を用いて制限を行うことは可能でしょうか。

    2012年5月1日 3:23

回答

  • グループポリシーで制限するのは難しいかもしれません。一番単純なのは、ユーザーのプロパティ内の”ログオンできるワークステーション”にマシン名を個別に指定していく方法です(ADユーザーとコンピューター>ユーザーのプロパティ>アカウントタブ>「ログオン先」ボタン)。ユーザー数が多いようですとこの方法では大変なので、LDIFDEを利用した一括インポートが考えられます。前出の”ログオンできるワークステーション”は、ユーザーオブジェクトの「UserWorkstations」属性として管理されています。LDIFファイルの changetypeに“modify”(変更)を指定して、各ユーザーの「UserWorkstations」属性に、マシン名を値として設定すれば可能かと思います。LDIFDEの使用方法については、色んなサイトで紹介していますので、そちらを参考にして下さい。

    参考URL)LDIFDEを使用したディレクトリオブジェクトのActiveDorectoryへのインポート/エクスポート http://support.microsoft.com/kb/237677/ja

    • 回答の候補に設定 田中夢 2012年5月11日 4:01
    • 回答としてマーク 田中夢 2012年5月18日 1:10
    2012年5月1日 8:38
  • h_watanabeさん、こんにちは。

    カディスさんからも投稿がありましたが、LDIFDE以外でも操作ができますので参考情報として投稿しておきます。

    あるアカウントに対して特定のワークステーションからのアクセスのみを限定する方法として、「net user」というコマンドでも実現できますよ。もちろん、コマンドなので、GUI操作とは違ってまとめて実行するような方法もできます。まぁ、ドメインに対する管理者権限は必要となりますが。

    ちなみに、ワークステーションを絞り込むには、「/workstations:%WorkstationName%」というパラメータを付加してあげるだけです。詳しくは末尾URLの技術情報を参考にしてコマンドを試行してみてください。

    Net User コマンドの使用方法
    http://support.microsoft.com/kb/251394/ja
    • 回答の候補に設定 田中夢 2012年5月11日 4:01
    • 回答としてマーク 田中夢 2012年5月18日 1:10
    2012年5月1日 12:05
  • グループポリシーとは微妙に違いますが、ADの機能で皆さんご指摘のuserWorkstationsを設定してやればよかろうかと。

    個人的にはこの手のはなんでもPowerShellで書くのが好きです^^;
    #いきなり全部読み込んだり、全ユーザーと比較したりと、時間やメモリ無視な作りですが^^;

    #***DCからすべてのユーザーを取ってくる***
    #ご参考:http://blogs.wankuma.com/chuki/archive/2008/04/10/132570.aspx
    $ADs = New-Object System.DirectoryServices.DirectorySearcher
    $ADs.Filter = "(objectClass=user)"
    $Users = $ADs.FindAll() | foreach {$_.GetDirectoryEntry()}
    #
    #***csvファイルの読み込み***
    $changeUsers = Import-CSV "c:\temp\test.csv"
    "処理するユーザー数:"+$changeUsers.Count
    #
    #***読み込んだデータ分の処理***
    $changeUsers | foreach{
    ##処理する行のユーザーを一時保存
    $workUser = $_
    ##先ほど取得した全ユーザーのアカウント名と等しいユーザーを抜き出す
    $user= $Users | ? {$_.sAMAccountName -eq $workUser.User}
    ##PC情報をユーザーに突っ込む
    If($workUser.PC -eq ""){
    ##csvが空文字列ならuserWorkstationの値を削除
    $user.PutEx(1,"userWorkstations",0)
    }else{
    ##何か入っていれば変更
    $user.userWorkstations = $workUser.PC
    }
    ##Active Directoryに変更を保存
    "ユーザー名:" + $user.sAMAccountName + " /接続先PC:" +$user.userWorkstations
    $user.SetInfo()
    }

    【例のCSV】ユーザー(test)をPC(chukiPC)に限定、ユーザー(UserA)の限定を解除
    ※行頭は、上記スクリプト内で使用するためのヘッダです。

    User,PC
    test,chukiPC
    UserA,

    • 回答の候補に設定 田中夢 2012年5月11日 4:01
    • 回答としてマーク 田中夢 2012年5月18日 1:10
    2012年5月2日 12:59
    モデレータ

すべての返信

  • グループポリシーで制限するのは難しいかもしれません。一番単純なのは、ユーザーのプロパティ内の”ログオンできるワークステーション”にマシン名を個別に指定していく方法です(ADユーザーとコンピューター>ユーザーのプロパティ>アカウントタブ>「ログオン先」ボタン)。ユーザー数が多いようですとこの方法では大変なので、LDIFDEを利用した一括インポートが考えられます。前出の”ログオンできるワークステーション”は、ユーザーオブジェクトの「UserWorkstations」属性として管理されています。LDIFファイルの changetypeに“modify”(変更)を指定して、各ユーザーの「UserWorkstations」属性に、マシン名を値として設定すれば可能かと思います。LDIFDEの使用方法については、色んなサイトで紹介していますので、そちらを参考にして下さい。

    参考URL)LDIFDEを使用したディレクトリオブジェクトのActiveDorectoryへのインポート/エクスポート http://support.microsoft.com/kb/237677/ja

    • 回答の候補に設定 田中夢 2012年5月11日 4:01
    • 回答としてマーク 田中夢 2012年5月18日 1:10
    2012年5月1日 8:38
  • カディス様

    ご返答ありがとうございました。ログイン先のワークステーションを絞ることができました。
    今は検証中で管理者周辺の数人だけでいいのですが、近々大人数を管理することになりますので、
    LDIFDEを使用して管理する手順も検証してみます。

    大変ありがとうございました。

    2012年5月1日 9:42
  • h_watanabeさん、こんにちは。

    カディスさんからも投稿がありましたが、LDIFDE以外でも操作ができますので参考情報として投稿しておきます。

    あるアカウントに対して特定のワークステーションからのアクセスのみを限定する方法として、「net user」というコマンドでも実現できますよ。もちろん、コマンドなので、GUI操作とは違ってまとめて実行するような方法もできます。まぁ、ドメインに対する管理者権限は必要となりますが。

    ちなみに、ワークステーションを絞り込むには、「/workstations:%WorkstationName%」というパラメータを付加してあげるだけです。詳しくは末尾URLの技術情報を参考にしてコマンドを試行してみてください。

    Net User コマンドの使用方法
    http://support.microsoft.com/kb/251394/ja
    • 回答の候補に設定 田中夢 2012年5月11日 4:01
    • 回答としてマーク 田中夢 2012年5月18日 1:10
    2012年5月1日 12:05
  • グループポリシーとは微妙に違いますが、ADの機能で皆さんご指摘のuserWorkstationsを設定してやればよかろうかと。

    個人的にはこの手のはなんでもPowerShellで書くのが好きです^^;
    #いきなり全部読み込んだり、全ユーザーと比較したりと、時間やメモリ無視な作りですが^^;

    #***DCからすべてのユーザーを取ってくる***
    #ご参考:http://blogs.wankuma.com/chuki/archive/2008/04/10/132570.aspx
    $ADs = New-Object System.DirectoryServices.DirectorySearcher
    $ADs.Filter = "(objectClass=user)"
    $Users = $ADs.FindAll() | foreach {$_.GetDirectoryEntry()}
    #
    #***csvファイルの読み込み***
    $changeUsers = Import-CSV "c:\temp\test.csv"
    "処理するユーザー数:"+$changeUsers.Count
    #
    #***読み込んだデータ分の処理***
    $changeUsers | foreach{
    ##処理する行のユーザーを一時保存
    $workUser = $_
    ##先ほど取得した全ユーザーのアカウント名と等しいユーザーを抜き出す
    $user= $Users | ? {$_.sAMAccountName -eq $workUser.User}
    ##PC情報をユーザーに突っ込む
    If($workUser.PC -eq ""){
    ##csvが空文字列ならuserWorkstationの値を削除
    $user.PutEx(1,"userWorkstations",0)
    }else{
    ##何か入っていれば変更
    $user.userWorkstations = $workUser.PC
    }
    ##Active Directoryに変更を保存
    "ユーザー名:" + $user.sAMAccountName + " /接続先PC:" +$user.userWorkstations
    $user.SetInfo()
    }

    【例のCSV】ユーザー(test)をPC(chukiPC)に限定、ユーザー(UserA)の限定を解除
    ※行頭は、上記スクリプト内で使用するためのヘッダです。

    User,PC
    test,chukiPC
    UserA,

    • 回答の候補に設定 田中夢 2012年5月11日 4:01
    • 回答としてマーク 田中夢 2012年5月18日 1:10
    2012年5月2日 12:59
    モデレータ
  • こんにちは。
    フォーラム オペレーターの田中夢です。
     
    ご回答くださった皆様
    参考になるアドバイスをありがとうございます。
     
    h_watanabe さん
    最後に投稿されてからしばらく経過しましたが、その後 Kenichi UENO さんと Chuki さんからの投稿をご覧になっていただけましたでしょうか?
     
    こちらのご質問につきましては、カディス さん、Kenichi UENO さん、 Chuki さんからのアドバイスをひとつの方法として参考にしていただけたのではないかと思われますので、勝手ながら私のほうで [回答としてマーク] とさせていただきますね。
     
     
    また何かありましたら TechNet フォーラムをご活用くださいね。
    ---------------------------------------------------------------------
    日本マイクロソフト株式会社 フォーラム オペレーター 田中夢
    • 編集済み 田中夢 2012年6月1日 1:30
    2012年5月18日 1:10
  • 皆様

    株式会社ゆめみの渡辺です。

    少し時間がたってしまいましたが、改めまして、皆様、ありがとうございました。

    いくつかの方法を検証し、当社の運用業務に合う方法を見つけていきたいと思います。

    またよろしくお願いします。

    2012年5月22日 10:17