Akira's Commentary

VNCで共用NTマシンにアクセス

あなたの回りには、共用のWindowsマシンとかはありませんか?

最近ではWindowsだらけ、というところも多いのかも知れませんが、 私の回りでは、PC-UNIXが主力になっています。しかし、 それでも、 WordのドキュメントやExcelのデータを渡されることがありまして、 そのような時のためにオフィススーツを入れた 共用のNTマシンがあります。

VNCを使い始めた頃、これがあれば、普段使っている環境から 共用マシンのところまで移動しないで使えるようになるのでは、 と考えました(1)。しかし、 VNCのデフォルトの設定では以下のような問題がありまして、 そのままではあまり役に立ちません。

  1. デフォルトの設定では、アクセスするのにパスワードが必要ですが、 共有するために皆が同じパスワードを使うのは嫌な気がします。
  2. デフォルトの設定では、後からのコネクションが有効になり、 先にコネクトしていたセッションがクローズされてしまいます。 コネクションの切断はパスワード認証後なのですが、 パスワードを共有していると、他の人に横取りされることになります。
  3. デフォルトの設定では、リモートのキー、マウスも ローカルの(共有マシン固有の)キー、マウスも 同時に使えるようになっています。 共有マシンが離れたところにあるような場合、 そこに通りかかった人にいじられるのもいやです。
  4. また共有マシンにVNC経由でログインし、 ログオフしないでコネクションを切断した場合、 ログインしたままの状態になっています。 このような状態では、やはり、 他の人に勝手にいじられることになりますので、宜しくありません。
  5. それに共有マシンだからといって、ネットワーク上の誰から でもアクセスできてしまう、というのも具合が悪いでしょう。 やはりある程度のアクセス制限は欲しいものです。

ところが、WinVNCのAdvanced Setting をうまく設定すると、これらの問題が解決されて、 VNCによってリモートのWindows NTを共用することができるようになります。

こんな設定ができます

Advanced Setting (レジストリを編集します)によって、 以下のように設定することができます。

  1. AuthRequiredを0にすると、 パスワード無しの設定ができるようになります。 こうしておいて、 デフォルトのユーザ設定でパスワードを無しにすると、 誰でも共用マシンにアクセスできるようになります。

    しかし、このままではログオンした後でも誰でもパスワード無しでの アクセスができることになりますので、非常に危険です。 そこで、ログオンしてから普通にPropertiesダイアログを 開いて、ユーザ毎のパスワードを設定すれば、 ログオンした状態では、それぞれのユーザ毎のパスワードで ガードされるようになります。

  2. 後からの接続を優先するか、先の接続を優先するかは ConnectPriorityで指示することができます。 共用マシンでは、先の接続を優先させるべきでしょう。 ConnectPriorityを2にすると、 先の接続が優先されて、 後からのコネクションは拒否されるようになります。

    ただし、これはビューワからの非共有アクセスの場合で、 共有アクセス(-shared)の場合には(パスワードを要求されますが) 同時に接続されて画面が共有されます。

  3. Propertiesダイアログで、 リモート、ローカルの入力を無効にすることができます。 共有マシンのキーボード、マウスで作業するなら、 リモートを無効にしておけば、 ネットワーク経由でいじられることがありません。 また、リモートにVNC経由で使用するなら、 ローカルを無効にして、通りかかりの人からは いじられないようにすることができます。

    但し、ダイアログでリモート無効と設定しても、 それは、以降の接続について、です。 すでに存在しているコネクションについては 適用されませんのでご注意ください。

    また、ローカル無効はすでにログオンしている 場合には効かないようです。 デフォルトのユーザ設定でローカル無効としておくと、 リモートのビューワが接続している間、 ローカル側のキー、マウスが無効になります。

  4. LockSettingによって、 コネクションが切れた場合のデスクトップのアクションを 指定することができます。 これを2にしておくと、 コネクションが切れた場合に、 自動的にログオフされるようになります。 専らリモートでアクセスする場合には便利な機能です。

    ですが、このように設定しておくと、 コネクションが切れた時にはいつでもログオフされてしまいます。 ローカルオペレーションとリモートアクセスの 両方を使っている場合には、あまり適切ではありません。

    この設定は、どうもデフォルトのユーザ設定では 効かないようで、ユーザ毎に設定する必要があるようです。

  5. AuthHostsを使うと、 WinVNCサーバにアクセスできるホストを制限することができます。 これはREG_SZの文字列で

    -:+ipaddr1:+ipaddr2

    といった形式で指示します。上のケースでは、 ipaddr1、ipaddr2のホストしか アクセスできないようになります。 一応、各項はIPアドレスのマッチパターンを ドット表記したものなのですが、 サブネットレベルでの制限ならともかく、 同一サブネット内の特定マシンだけに制限したい場合には、 全部リストアップすることになります。

実際の設定(私の場合)

私の場合には以下のように設定してみました。

ローカルマシン固有の設定

HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\のレジストリを 以下のように設定しました。

AuthRequired REG_DWORD 0: パスワード無しでもアクセスできるようになります。
ConnectPriority REG_DWORD 2: すでにビューワが接続している場合には、 新しい非共有接続は拒否されます。
AuthHost REG_SZ -:+ホスト1:ホスト2:...
アクセスするホストをリストアップしておきます。 これら以外のホストからの接続は拒否されます。

デフォルトユーザ設定

HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\Defaultの レジストリに以下の項目を追加しました。

LockSetting REG_DWORD 2: コネクションが切れた場合に、自動的にログオフします。 実際には、ユーザの個別設定でオーバーライドします。

また、スタートメニューから「Show Default Setting」で 「Default Local System Properties」 ダイアログをオープンして、以下の項目を変更します。

Password 空白 これで、ログオンダイアログが表示されている状態では パスワード無しで接続できるようになります。
Disable Local Keyboard & Pointer チェック これで、リモートアクセス中は、 ローカルキーボード、マウスが無効になります。

ユーザ個別の設定

HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\<username> のレジストリに必要に応じて以下の項目を追加します。

LockSetting REG_DWORD コネクションが切れた場合のアクションを指示します。 近くにあって、 リモート、ローカルを切り換えながら使うような場合には 1(何もしない)が、 専らリモートアクセスするような場合には 2(コネクションが切れた場合に、自動的にログオフ)が 便利でしょう。

また、スタートメニューから「Show User Setting」で 「Current User Properties」 ダイアログをオープンして、以下の項目を変更します。

Password 設定 ログイン中は、ここで指定したパスワードで保護されます。 必ず指定しておきましょう。

結果は...

以上のように設定した場合、 WinVNCは以下のように動作するようになります。

ログオンダイアログが出ている状態
誰でもパスワード無しでアクセスできます。 複数のコネクションが要求された場合には、 (非共有コネクションであれば) 最初のコネクションが優先され、 以降のコネクションは拒否されます。
また、誰かがコネクションしている状態では ローカルキーボード、マウスが無効になっていますので、 他の人に勝手に割り込まれることもありません。 ですが、コネクションしたまま忘れると 悲惨なことになりますのでご注意の程を。
ログオンしている状態
ユーザ毎に設定されたパスワードで保護されています。 ビューワからの非共有コネクションは、パスワード入力後に拒否されます。 共有コネクションの場合には、画面が表示されます。
この場合にも、コネクション中は ローカルキーボード、マウスが無効になっていますので、 他の人に勝手に割り込まれることはありません。 ただし、ローカルマシンに画面が表示されるのは 防ぐことができません(まあモニタを外せば別ですが)ので、 その点は諦めてください。
コネクションがクローズされた時
ユーザ毎のレジストリでLockSettingを2にしておいた場合には、 ビューワを終了させると、 リモートサーバ側で自動的にログオフされます。 これで、勝手に操作されることもありません。

基本的に、非共有セッションでコネクトするようにすれば、 このような設定で、 気持よく共有のNTマシンを遠隔アクセスすることができるでしょう。