ファイル共有サービスへ接続する場合は、最初にIPC$という共有リソースへの接続が行われる。IPC$への接続時にユーザー名を指定することにより、任意のアカウント情報を使ってリソースへ接続することができる。
対象OS:Windows 2000 Professional/Windows XP Professional/Windows XP Home Edition/Windows 2000 Server/Windows Server 2003
Windows OSには、ファイル共有やプリンタ共有など、さまざまなリソースを共有(公開)するサービスがある(サービス名は単に「Server」サービスとなっている)。このような公開されたリソースに対してクライアントが接続を行う場合、内部的には、最初に「IPC$」という共有名に対して接続要求が行われる。そしてユーザー名やパスワードなどのログオンのためのアカウント情報が渡され、それらが正しいものであれば(サーバ側で認証されれば)、希望する共有リソースにアクセスすることができる。共有リソースにはファイルやプリンタ共有だけでなく、例えば、名前付きパイプやリモート・レジストリ・サービスを始めとして、さまざまなシステム・サービスにアクセスすることができる。
逆にいえば、このIPC$への接続共有が拒否されると、以後、そのマシンに対してアクセスできないということでもある。Windows 9xやMeクライアントからWindows 2000などにアクセスする場合、このIPC$に対するアクセスが拒否されてしまい、リソースを共有できないというトラブルが発生することがある。これについては「TIPS―共有リソース・アクセス時にパスワード入力を求められる「IPC$」とは?」で述べているが、具体的には、Windows 9x/Meが相手に渡すユーザー・アカウント名とパスワードの情報が、サーバ側の期待しているものとは異なるため、このような事態が発生している。
Windows NT以降のOS(Windows 2000/Windows XP/Windows Server 2003)では、IPC$共有リソースに接続するときに、ユーザー・アカウントやパスワードを明示的に指定することができる。この機能を使えば、バッチ・ファイル中で特定のアカウント情報(資格情報)でサーバに接続し、サービスを受けるということが可能になる。例えば、普段仕事で使っているマシンには一般的なユーザー・アカウントでログオンしているが、特定の管理業務を行う場合に、管理者権限のある特別なアカウントで接続し、作業を行いたいとする。通常ならば、管理者権限のあるユーザーでログオンし直して、目的のサーバへ接続し、作業を行うことになるだろう。しかしいちいちローカル・マシンでログオンし直さなくても、IPC$に接続するときに、管理者権限のあるアカウントを明示的に指定すればよい。具体的には、net useコマンドでIPC$への接続を明示的に行えばよい。
net useコマンドは、コマンド・プロンプト上で、ほかのマシンの共有リソースに接続するために使われるコマンドである。通常は、例えば次のようにして使うことが多い。
net use x: \\server1\share1
これは、\\server1のshare1という共有(公開)リソースを、ローカルのx:ドライブにマップするというコマンドである。この場合は、接続に利用されるアカウントは、ユーザーがシステムにログオンした場合のものが使われるが、明示的に指定することもできる。
net use x: \\server1\share1 /user:user01 password01
ここでは、ユーザー・アカウント「user01」、パスワード「password01」で接続している。これはserver1上のローカル・アカウントの場合であるが、ドメインのユーザー・アカウントを利用する場合は次のようにする。
net use x: \\server1\share1 /user:domain\user01 password01
これはすべてのWindowsで利用できる形式であるが、Active Directory環境ならば次のようにしてFQDN名を指定することもできる。
net use x: \\server1\share1 /user:user01@domainname.com password01
最後にパスワードが直接指定されているが、バッチ・ファイルなどに記述する場合は、セキュリティ上望ましくない。そこで、次のような表記方法もある。
net use x: \\server1\share1 /user:user01 *
パスワードとして「*」を指定すると、実行時にユーザーに問い合わせるようになる。
C:\>net use x: \\server1\share1 /user:user01 *
\\server1\share1 のパスワードを入力してください: ここでパスワードを入力する
コマンドは正常に終了しました。
なお、以上では、共有リソースを「x:」というドライブにマップしているが、これをなくすこともできる。
net use \\server1\share1 /user:user01 *
この場合は、ユーザーは例えば「dir \\server1\share1」というふうに、常にUNC形式でリソースを指定する必要がある。
実際に相手のサーバ側で、どのようなアカウント(資格情報)でログオンしているかを調べるには、「net session」というコマンドを(サーバ側で)実行すればよい(クライアント側の利用状況は「net use」で調査する)。どのクライアント・マシンから、どのユーザー名で接続しているかが分かる。
共有リソースの使用が終了したら、「net use 〜 /delete」コマンドを発行して、接続を明示的に解除することができる。「〜」には「net use」で指定したリソース名を指定する(「x:」とか「\\server1\share1」など)。この操作により、サーバへの接続数が減算され、ほかのクライアントからの接続を新たに受け付けることができる。Workstation版をサーバ代わりに使っている場合など、このようにして積極的に接続を解除して、接続数制限に(なるべく)到達しないようにすることができる(通常はログオフ時に自動的に接続が解除される)。
net use \\server1\share1 /user:user01 *
…必要な操作…
net use \\server1\share1 /delete
以上では、\\server1\share1という共有ファイル・リソースへ接続したが、同様にして「IPC$」リソースへ接続することもできる。
net use \\server1\ipc$ /user:user01 *
この例では、server1のIPC$リソースへ、user01というユーザー・アカウントで接続している(「net use \\server1 /user:user01 *」でも同じ)。また、パスワードはインタラクティブに入力する。
いったんこの接続が完了すれば、以後は、server1のそのほかの共有(公開)リソースや各種のサービスへの接続は、user01というアカウントで行われることになる。そのため、例えばレジストリを操作するような(管理者権限の必要な)コマンドを実行したければ、その操作の前に、このようなコマンドを発行してログオンしておくとよい。すると以後のレジストリ操作は指定されたユーザー権限で行われることになる。regコマンドを使ったレジストリの操作については「TIPS―コマンド・プロンプトでレジストリを操作する」を参照していただきたい。
net use \\server1\ipc$ /user:user01 *
reg query "\\server01\HKLM\Software\Microsoft" /s > querylog.txt
net use \\server1\ipc$ /delete
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.