はじめに
表題のような構成のサーバーは現実に存在しており、以下の問題は現実に発生したものである。
症状
Windows 7 Home Premiumが動作するPCから、Windows Server 2008 R2が動作するサーバーに接続されたプリンタを使用しようとしたとする。ただしサーバーにはファイル共有だけでなくドメインコントローラーの役割が与えられている。
このとき、いうまでもなく問題のPCとそのユーザーは当該サーバーが管理しているActive Directoryには参加できない。そこでGuestユーザーとして例のサーバーに接続する。今回はActive Directory上にユーザーアカウントを用意して認証を得る方法は採用しない。なぜならたかだか共有ファイルへのアクセスでサーバーへの明示的なログオンを求めることは一般的なユーザーには負担にしかならないし、IDとパスワードを同一にするにしても表だって使われないIDを適切なパスワードポリシーを保ったまま管理し続けることは一般的な零細企業のネットワーク管理者にとって手に余ることが想像できるためである。
さて、Guestアカウントによるログインとサーバーへのアクセスが許可されていれば、いわゆるホームエディションの端末からであってもドメイン ネットワークの共有フォルダとプリンタは普通にブラウズできるし、ファイルの読み書きも実行できる。しかしドメインコントローラーが共有しているプリンタへの接続はできない。アクセスが拒否されるのだ。
この問題についてインターネット検索する過程で遭遇するほとんどのQ&AはドメインネットワークのGuestユーザーを有効化していなかったり、共有フォルダやファイルシステム上のアクセス許可が不適切だったりしたケースを想定したものである。**"ドメインネットワーク上のサーバーが公開したEveryoneアクセスを許可している共有フォルダはGuest扱いのワークグループユーザーから読み書きできるが、同じサーバー上のEveryoneアクセスを許可した共有プリンタへのアクセスは拒否される"**という症状についての説明は、少なくとも今回、日本語のQ&Aサイトからは見出されなかった。
原因
基本的には以下の不具合と同じことが起こっていた。
この問題は、ドメインコントローラーに昇格されたことのあるコンピューターでは、昇格のタイミングでシステム フォルダー配下の権限設定が変更されることが原因で発生します。
- 詳細な動作について
以下のフォルダはスプーラー サービスがスプール ファイルを格納するために利用するフォルダとなりますが、通常はスプール ファイルの作成のため、一般のユーザーから書き込みができる権限設定になっています。
c:\windows\system32\spool\printers
ドメイン コントローラーに昇格されたことのあるコンピューターでは、昇格のタイミングでシステム フォルダー配下の権限設定が変更され、スプール フォルダーも合わせて変更されます。
ドメイン コントローラー上では Easy Print によるリダイレクトされたプリンターからの印刷に失敗します(KB2673414)
対策
さて、上記の不具合においては、スプールファイルが作成できないのが原因であるため system32 の下のPRINTERSフォルダへのアクセス権限のみを変更するように推奨されている。
だが、プリンタがまだ追加されていない環境ではPRINTERSフォルダだけでなく、少なくともdriversフォルダへもアクセスできなければインストールができない。おそらくdriversはEveryoneへの読み取りアクセスだけ許可すれば、どのPCからでもインストールできるようになるはずである。
まとめ
今回は、共有プリンターにアクセスしたとき具体的にどのユーザーアカウントによってスプーリングされるのか、厳密に検証したわけではない。結果としてスプーリングとプリンタードライバの配布に関するファイルシステム上のアクセス許可を修正したことで問題が解消したという結果しか得られなかった。
このような事例は世界にどのくらい存在するのだろうか。つまり、顧客からの文書セキュリティの要求を満たすためにActive Directoryの構成が必要になって、それを実現するサーバーは1台しかなく、そこにはUSB接続のプリンタが接続されていて、オフィス内のほかのユーザーがWindows 7 Home PremiumでGuestアカウントによってサーバー上のプリンタを使用しなければならないようなネットワークだ。
このメモが世間の役に立たないことを切に願う。