AD に参加させた NAS で「アクセスが拒否されました」が何度も戻ってくる ― Mac の接続アイコンと、Windows の名前ごとの記憶
家の NAS(QNAP)を Active Directory(AD)に参加させてから、Mac や Windows から開くと「アクセスが拒否されました」になることが、何度も起きました。一度直しても、別のつなぎ方をしたときに戻ってきます。原因はいつも同じで、つなぎ方が毎回ぶれることが問題でした。そこで、Mac には接続用のアイコンを、Windows には名前とアドレスの両方に記憶させるファイルを作り、つなぎ方を固定しました。
AD を作った話と、最初にこの問題に気づいたところは、前の記事に書きました:Samba で家に Active Directory を作り、Windows・Mac・NAS を参加させた話。この記事はその続きです。
- AD(Active Directory):家の中のユーザーやパソコンをまとめて管理する仕組み
- SMB:Windows や Mac が NAS のファイルを開くときの方式
- ドメインのユーザー:AD に登録されたユーザー。NAS 本体に登録されたユーザー(ローカルのユーザー)とは別物
1. おさらい:同じ名前のユーザーは、AD 側が優先される
NAS には、もともと NAS 本体のユーザー(ここでは nasuser)がいて、フォルダの権限はこのユーザーに付けてあります。AD にも同じ名前のユーザー nasuser を作りました。
NAS を AD に参加させると、「nasuser」でつないだとき、NAS は AD のユーザーとして扱います。AD の nasuser にはフォルダの権限が無いので、共有フォルダの一番上は見えても、その下のフォルダは「アクセスが拒否されました」(Mac では Permission denied)になります。
NAS 本体のユーザーとしてつなぐには、ユーザー名の前に NAS の名前を付けて NAS名\nasuser と指定します。ここまでは前の記事に書いた内容です。問題は、この指定を忘れたつなぎ方をすると、すぐに元に戻ってしまうことでした。
2. Mac:Finder のサイドバーから開くと戻る
Mac では2回、別の Mac で同じことが起きました。どちらも、homes(ユーザーごとのフォルダ)の一番上は見えるのに、中のフォルダが Permission denied でした。
今つながっている先は、ターミナルの mount で分かります。
mount | grep homes
# 正しい://NAS名;nasuser@192.168.x.x/homes のように、NAS名; が付いている
# 戻っている://nasuser@NAS名._smb._tcp.local/homes のように、NAS名; が無い
戻っていたときは、Finder のサイドバーに出る NAS の名前(Bonjour の名前)からつながっていました。キーチェーンに「nasuser」というユーザー名だけが記憶されていて、サイドバーから開くとこれで自動的につながります。NAS 名の指定が無いので、AD のユーザーとして扱われます。
直し方は、いったん homes を取り出し、Finder の「サーバへ接続」(⌘K)で次のアドレスを開くことです。NAS名; の部分が、NAS 本体のユーザーという指定です。
smb://NAS名;nasuser@192.168.x.x/homes
サイドバーから開いても自動でつながらないように、キーチェーンアクセスで、Bonjour の名前(NAS名._smb._tcp.local)に記憶されていたパスワードも削除しました。
3. Mac 用の接続アイコンを作る
毎回アドレスを打つのは忘れるもとなので、ダブルクリックで正しくつなぐアイコンを作りました。ファイル名の最後を .command にすると、Finder からダブルクリックでターミナルが開いて実行されます。
#!/bin/zsh
# 「NAS名;」を付けないとドメインのユーザー扱いになり、homes の下のフォルダが拒否される
URL='smb://NAS名;nasuser@192.168.x.x/homes'
if mount | grep -E '/homes on ' | grep -qv 'NAS名;nasuser@192.168.x.x'; then
echo '別のアカウントで homes に接続中です。Finder で homes を取り出してから、もう一度開いてください。'
mount | grep -E '/homes on '
read -k1 '?何かキーを押すと閉じます'
exit 1
fi
open "$URL"
ポイントは、すでに別のアカウントでつながっているときは、開かずに知らせるところです。すでにつながっている状態で開くと、新しい指定でつなぎ直されず、前の接続のまま開くことがあるためです。勝手に取り外すと作業中のファイルを壊すおそれがあるので、取り外しは人が行う作りにしました。
chmod +x ~/Desktop/NASを開く.command
実行できるようにして、家の Mac 3台のデスクトップに置きました。
4. Windows:名前で開くと「アクセスが拒否されました」
Windows でも、AD のユーザー(admin)でサインインしている PC で同じことが起きました。エクスプローラーで \\NAS名\homes\nasuser を開くと「アクセスが拒否されました」になります。
Windows は、ユーザー名とパスワードの記憶(資格情報)を、入力した接続先の名前ごとに持っています。記憶が無い名前で開くと、今サインインしている AD のユーザーで自動的につなぎます。最初は、アドレスのほうにだけ NAS 本体のユーザーを記憶させていました。
cmdkey /add:192.168.x.x /user:NAS名\nasuser /pass
/pass の後ろにパスワードを書かなければ、実行したときに入力を求められ、画面にも出ません。これで \\192.168.x.x\homes は開けるようになりましたが、名前で開いたときは記憶が無いので、AD の admin でつながって拒否されます。名前とアドレスは、Windows から見ると別の接続先です。

DNS で名前をアドレスに向ける別名(CNAME)を作る方法も考えましたが、効果はありません。記憶は「入力した文字列」ごとなので、名前で開けば名前の記憶が探されます。
5. Windows 用:名前とアドレスの両方に記憶させる
そこで、名前とアドレスの両方に NAS 本体のユーザーを記憶させるファイルを作りました。パスワードはファイルに書かず、実行したときに2回入力します。PC の全員が使えるように、公開のデスクトップ(C:\Users\Public\Desktop)に置きました。
@echo off
rem NAS 本体の nasuser で開くための記憶を、名前と IP の両方に登録する(パスワードはファイルに書かない)
echo NAS 本体の nasuser のパスワードを、2回入力します(画面には表示されません)。
echo.
echo [1/2] NAS名
cmdkey /add:NAS名 /user:NAS名\nasuser /pass
echo.
echo [2/2] 192.168.x.x
cmdkey /add:192.168.x.x /user:NAS名\nasuser /pass
echo.
echo --- 登録の確認 ---
cmdkey /list | findstr /i "NAS名 192.168.x.x"
echo.
echo 登録したら、サインアウトしてサインインし直してください。
echo そのあと \\NAS名\homes\nasuser を開いて確認します。
echo.
pause
日本語を含むので、ファイルは Shift_JIS(メモ帳なら「ANSI」)で保存します。UTF-8 のままだと、コマンドプロンプトで文字化けします。
Windows でつまずいた点です。
- すでにつながっている接続が優先される:エクスプローラーに AD の admin での接続が残っていると、記憶を登録しても開けなかった。サインアウトしてサインインし直し、ほかを開く前に NAS を開いて解決した
- 「管理者として実行」は別扱い:管理者として開いた PowerShell で
net useしても、普通の権限のエクスプローラーには関係しない。cmdkeyの記憶はユーザー共通なので、こちらは効く net use … * /savecredは「矛盾するスイッチ」と言われて使えなかった。記憶はcmdkeyで登録する
登録した後は、NAS のログで、この PC から homes の中のフォルダを開けている記録を確認できました。
補足:Time Machine は NAS 名の指定が効かなかった
Mac の Time Machine の保存先を NAS にしている場合は、アドレスに NAS名; を付けて登録しても、AD のユーザーでつながりました(macOS の仕様とみられます)。元のバックアップに書き込めず、新しいバックアップを最初から作り始めていました。
このときは、元のバックアップのフォルダだけに、AD の nasuser の読み書きの権限を足して解決しました。試しに AD の nasuser を無効にすると、Time Machine がつながらなくなったので、AD のユーザーは残しています。
根本的に直すなら
一番すっきりするのは、NAS 本体のユーザーと AD のユーザーの名前を重ねないことです。どちらかの名前を変えるか、フォルダの権限を AD のユーザーやグループに付け替えれば、つなぎ方に気を付ける必要はなくなります。ただ、Mac・Windows・Time Machine の登録をすべてやり直すことになるので、今回はつなぎ方を固定する方法にしました。これから AD を作るなら、最初に名前の付け方を決めておくのがおすすめです。
まとめ
- AD に同じ名前のユーザーがいると、NAS は AD のユーザーとして扱う。NAS 本体のユーザーでつなぐには
NAS名\nasuserと指定する - Mac は Finder のサイドバーから開くと指定が抜ける。
smb://NAS名;nasuser@アドレス/共有名を開くアイコンを作り、別のアカウントでつながっているときは知らせるようにした - Windows の記憶は入力した名前ごと。名前とアドレスの両方に
cmdkeyで記憶させ、サインインし直す - 根本的には、NAS 本体と AD のユーザーの名前を重ねない
