特定のプログラムのみ接続不可にする
CreativeCommons Attribution-NonCommercial-ShareAlike License, Marco Bernardini
問題・Windows XP で以下の条件を満たすには どうすればいいか?:
ある特定のプログラムのみ「インターネットに接続しない」状態で起動する
なお、環境は下の通りとする:
- OS は Windows XP SP2 Professional
- (Home Edition は検証していない)
- そのプラグラムとは、ゲームやブラウザなどの一般的なものである
- 一応書いておくが「オフライン作業」で起動したいわけではない
- ファイアウォール機能を使わないこと
- ファイアウォールソフトも利用しない
- 「ある特定のプログラム」以外には(極力)影響しないこと
Windows 標準のファイアウォール機能やファイアウォールソフトを使えば一発で解決するが、それは避けたかった。なぜなら、たかだか数個のプログラムのために、システム全体に影響を及ぼすファイアウォール機能を動かしたくないからだ。
ということで、以下の文章には「ウィルスバスターでいいじゃん」「i-フィルタ使え」などのご意見はカンベンしてほしい。
Windows 標準の機能とフリーソフトを使って、上記の条件を満たす方法を見つけたので紹介する。「もっと良い方法がある」という人のコメントを待っています。
自分がやりたいこと
まず、なぜこれができないのか不思議なのだが……。
一番ラクなのは、アプリケーションの実行ファイル(.exe)を右クリックして「プロパティ」を開き、「セキュリティ」タブあたりに「このアプリケーションがインターネットに接続するのを制限する」みたいなチェックがあること。チェックを入れると、この実行ファイルだけがインターネットに接続できなくなる、というもの。
しかし、そんな項目はない。
ユーザアカウントで制御する
次に考えたのが、「ユーザアカウント」を利用する方法だ。特定のアプリケーションを実行する際は、インターネットへの接続を制限したユーザに切り替えて実行する。切り替えが面倒だが、こちらは簡単にできそうだ。
Windows 2000 以降では「制限付きユーザ」という、いかにもそれらしいアカウントを作れる。
しかし、この「制限」はプログラムの追加などに対するもので、「インターネットへの接続を制限」は できない。
──いやいや、管理者がユーザへ制限をかけたい心のベスト 10 第一位は やはりインターネット接続ではないか? いくら新規プログラムのインストールを制限しても、インターネットに つなぎ放題では、管理がザルだろう。と文句を言いたくなる。
Microsoft からすると、インターネットへの接続を制限するにはファイアウォールを使え、ということなのか……。
RUNASA を利用する
さて、さんざん引っ張ってきたが、そろそろ解決編を書こう。
「RUNASA」というパスワード入力なしで別ユーザによる実行を行う
アプリケーションソフトを使う。
RUNASA(WindowsNT/2000/XP/Vista / ユーティリティ)
ちょうど分かりやすい記事を見つけた。下のページ(3 ページ分あり)を参考にして、RUNASA のインストールとユーザアカウント(制限付きユーザではなくて良い)の作成まで進んで欲しい。
RUNASAネット接続するソフトは制限付きユーザー権限で安全に
もう一工夫で解決
さて、これで「ユーザ A」でログインしながら、「ユーザ B」の権限でプログラムを簡単に起動できるようになった。しかし、この状態では、けっきょくプログラムはインターネットに接続できる。
そこで、いったん「ユーザ B」でログインする。コントロールパネルから「ネットワーク接続」を開き──「ローカルエリア接続」を無効にする、などでインターネットの接続を切ってしまう。
そして「ユーザ A」でログインし直し、RUNASA で作成したショートカット(実行ファイル)を開くと「ユーザ B」として実行されるのだが──なんと、起動したプログラムはインターネットへ接続できない!
確認のため、「ユーザ B」でログインしてローカルエリア接続を有効、「ユーザ A」にログインして上記の実行ファイルを起動すると、今度は接続できる。
つまり、インターネットへ接続する状態はユーザアカウントごとに決まっている、ということだ。当たり前のようで、ちょっと意外に感じた。MTU と RWIN の調整なども、ユーザ単位で変わってくるのだろうか?
オチ
さて、賢明なる読者の皆さんは、もうお気づきだろうが──けっきょく、ファイアウォール機能を使ったほうが早い。もしくは、上の例でいうと「ユーザ B」にログインして接続を切ったままプログラムを実行する、とか。
それに、RUNASA はサービスとして常駐するので、「ある特定のプログラム」以外には(極力)影響しないこと」
はギリギリ満たしていない。タスクマネージャを見ると、RUNASA は最大で 2Mbyte ほどメモリを使っているようだ。これより軽いファイアウォールソフトがあれば、そちらのほうが良いだろう。
しかし、ユーザごとに接続状態が決まっている・別のユーザにログインしていても保持される、と発見できて良かった。応用すると、何か面白いことができそうだ。
ここまで可能なら「接続を許可しないプログラム・ユーザ」ができないのか疑問は残った。