Windowsでリモートサーバ上のシンボリックリンクを有効にするTech TIPS

シンボリック・リンクでは、同一ボリューム上のファイルやボリュームに限らず、ほかのサーバ上のオブジェクトへもリンクできる。だがデフォルトでは、リモートのサーバ上のオブジェクトを指すようなリンクはセキュリティ上の理由から無効になっている。これを有効にする方法を解説。

» 2013年06月28日 16時54分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows Vista / Windows 7 / Windows 8 / Windows Server 2008 / Windows Server 2008 R2 / Windows Server 2012



解説

●シンボリックリンクとは

 Windows Vista/Windows Server 2008以降のWindows OSでは、「シンボリックリンク」という機能が利用できる。これは、ファイルやフォルダなどを指し示すためのショートカットのようなものである。これ以外にも、Windows OSではジャンクションやハードリンクなども利用できるが、シンボリックリンクでは、「リンク先がファイルでもフォルダでもよい」「リンクの解釈は実際の使用時に(クライアント側が)行う」「存在しないファイル/フォルダへのリンクを作成してもよい」「相対パスやUNCを使ったリモートのパスでもよい」などの特徴がある。各リンクの詳細については、以下の記事を参照していただきたい。

●シンボリックリンクの注意点

 シンボリックリンクはかなり自由度の高いショートカット機能であるが、デフォルトではリモートのサーバ上での利用に制限がある。シンボリックリンクを開く場合、ローカルならば問題ないが、リモートのサーバ上(にあるシンボリックリンク)ならエラーとなることがあるのだ。例えば次のように表示される。

 これは、あるファイルサーバのボリューム上にシンボリックリンクが置かれている例である。

※サーバSVR1のShare共有フォルダへ接続する
C:\>pushd \\svr1\share

Z:\>dir ……内容を確認する
ドライブ Z のボリューム ラベルがありません。
ボリューム シリアル番号は F62C-7376 です

Z:\ のディレクトリ

2013/06/27  10:10    <DIR>          .
2013/06/27  10:10    <DIR>          ..
2013/06/27  11:40    <DIR>          201301
2013/06/27  11:40    <DIR>          201302
2013/06/27  11:40    <DIR>          201303
2013/06/27  11:40    <DIR>          201304
2013/06/27  11:41    <DIR>          201305
2013/06/27  13:59    <SYMLINKD>     current [201305] ……リンク1
2013/06/27  13:59    <SYMLINK>      today [current\20130501.txt] ……リンク2
               1 個のファイル                   0 バイト
               8 個のディレクトリ  57,330,028,544 バイトの空き領域

Z:\>



 このフォルダには日付を基にしたフォルダが5つあり、今月のフォルダを「current」というシンボリックリンクが指しているとする。そして「today」がさらにその中にある今日のファイル(currentの下の20130501.txt)を指している。

Z:\>cd current ……cdしてみる
シンボリック リンクの種類が無効なため、リンク先に接続できません。 ……エラー

Z:\>type today ……内容を確認してみる
シンボリック リンクの種類が無効なため、リンク先に接続できません。 ……エラー

Z:\>type current\20130501.txt ……シンボリックリンクのパスを使って内容を確認してみる
シンボリック リンクの種類が無効なため、リンク先に接続できません。 ……エラー


Z:\>type 201305\20130501.txt ……シンボリックリンクを一切使わずにアクセスしてみる
FILE「C:\DATA\2013\20130501.txt」on「SVR1」 ……OK

Z:\>cd 201305 ……cdしてみる

Z:\201305> ……cdできた



 このように、シンボリックリンクを使ったアクセスは全て拒否されている(ちなみに、これをサーバSVR1のローカルボリューム上で行うと全て成功する)。最後のtypeとcdの例は、シンボリックリンクの内容を手動で展開してアクセスした例だ。これならばエラーにならない。つまりこれは、シンボリックリンクの解釈(処理)方法に起因するエラーであることが分かる。

 「シンボリックリンクの解釈」とは、上の例で言うと、「current」や「today」という名前からその内容([201305]もしくは[current\20130501.txt])を取り出し、その種類に応じてファイルシステムサービスを呼び出したり、必要ならさらにシンボリックリンクの解釈サービスを呼び出したりする処理のことである。デフォルトでは、リモートのサーバ上にあるシンボリックリンクは、セキュリティのためにそれ以上解釈しないようになっている。

操作方法

●現在の設定の確認方法

 シンボリックリンクの解釈方法が現在どのようになっているかを確認するには、シンボリックリンクを利用する側のコンピュータ上で(シンボリックリンクの解釈はサーバ側ではなく、ローカル側で行われるため)、「fsutil behavior query symlinkevaluation」コマンドを実行する。なおこのコマンドの実行には管理者権限が必要である。

C:\>fsutil behavior query symlinkevaluation
ローカルからローカルへのシンボリック リンクは有効です。
ローカルからリモートへのシンボリック リンクは有効です。
リモートからローカルへのシンボリック リンクは無効です。 ……これに注目
リモートからリモートへのシンボリック リンクは無効です。 ……これに注目

C:\>



 全部で4行表示されているが、デフォルトでは上の2行が「有効」、下の2行が「無効」となっている。この下の2つを「有効」にすれば、サーバ上にあるシンボリックリンクが利用できるようになる。

●サーバ上のシンボリックリンクを有効にする

 シンボリックリンクの解釈の設定を変更するには、「fsutil behavior set symlinkevaluation 〜」コマンドを利用する。引数には、上記の4つをそれぞれ「l2l:〜」「l2r:〜」「r2l:〜」「r2r:〜」で表現し、「1」か「0」の値で有効/無効を設定する。使い方は「fsutil behavior set symlinkevaluation」で確認できる。

C:\>fsutil behavior set symlinkevaluation
使用法 : fsutil behavior set <オプション> <値>
……(中略)……
SymlinkEvaluation      [L2L:{0|1}] | [L2R:{0|1}] | [R2R:{0|1}] | [R2L:{0|1}]
……(以下省略)……



 リモートサーバ上でのシンボリックリンクを有効にするには次のようにすればよい。

※リモートでのシンボリックリンクを有効にする
C:\>fsutil behavior set symlinkevaluation r2r:1 r2l:1

C:\>fsutil behavior query symlinkevaluation ……確認
ローカルからローカルへのシンボリック リンクは有効です。
ローカルからリモートへのシンボリック リンクは有効です。
リモートからローカルへのシンボリック リンクは有効です。 ……有効になった
リモートからリモートへのシンボリック リンクは有効です。 ……有効になった

C:\>



 このコマンドを実行すると変更はすぐに反映される。再起動は不要である。

 この設定をActive Directoryのグループポリシーで行うには、[コンピューターの構成]−[ポリシー]−[管理用テンプレート]−[システム]−[ファイル システム]にある「選択的にシンボリック リンクの評価を許可する」で設定する。

グループポリシーを使ってリモートサーバ上でのシンボリックリンクを有効にする グループポリシーを使ってリモートサーバ上でのシンボリックリンクを有効にする
リモート(サーバ)上にあるシンボリックリンクをグループポリシーで有効にするには、[コンピューターの構成]−[ポリシー]−[管理用テンプレート]−[システム]−[ファイル システム]にある、「選択的にシンボリック リンクの評価を許可する」の設定を変更する。
  (1)これらを全部オンにする。

 グループポリシーの設定方法については、以下の記事も参考にしていただきたい。

●シンボリックリンクの各設定の意味

 ここで設定している4つの値の意味について補足しておく。それぞれ次のような意味を持っている。

設定 意味
l2l:ローカルからローカル ・ローカルのストレージ上にあって、リンク先もローカルとなるようなオブジェクトへのシンボリックリンクを許可するかどうかの設定
・この設定はデフォルトではオン
l2r:ローカルからリモート ・ローカルのストレージ上にあって、リンク先がリモートとなるようなオブジェクトへのシンボリックリンクを許可するかどうかの設定
・この設定はデフォルトではオン
・ローカル上のシンボリックリンクで、リンク先がネットワーク上のオブジェクト(UNCなど)であってもアクセスできるのは、この設定がデフォルトでオンのため
r2l:リモートからローカル ・リモートのストレージ上にあって、リンク先がローカルとなるようなオブジェクトへのシンボリックリンクを許可するかどうかの設定
・この設定はデフォルトではオフ
・シンボリックリンクが直接ローカルのオブジェクトを指しているなら、この設定をオンにするだけでアクセス可能。パスの途中にシンボリックリンクが含まれている場合は、次の設定もオンにする必要がある。
r2r:リモートからリモート ・リモートのストレージ上にあって、リンク先がリモートとなるようなオブジェクトへのシンボリックリンクを許可するかどうかの設定
・この設定はデフォルトではオフ
・リンク先やパス名の途中にさらにシンボリックリンクが含まれている場合は、この設定をオンにしないといけない
・「リモートからローカル」をオフにして、こちらをオンにすると、ローカルリソースへのアクセスは拒否されるので、少しセキュリティが向上する
シンボリックリンクの解釈の設定の意味

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。