CentOS7でWindows(Samba)共有フォルダがマウントできない

Linux Tips

KVM ホスト用のPCを新たにゲットしたので CentOS7 で構築しているのですが、NAS上の共有フォルダがマウントできなくなりました。これに関する対策を記しておきます。

はじめに

CentOS7 でサーバ構築中なのですが、既に皆さまご存じのように色々と変更点があるため、CentOS6 の時とは同じにいかない事が発生しています。

大抵の問題は先人の知恵でサクッと解決可能だったりするわけですが、解決方法を直ぐに見つけられなかったり、日本語情報が見つけられなかったネタ等を記事にしてゆこうかと思います。

今回は CentOS7 で Samba (Windows) 共有フォルダをマウントできなかった問題に関して記します。

問題

発生した問題は以下になります。

Samba 共有をマウントしようとした際に Permission denied エラーが発生する。

mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

/var/log/messages には以下のログが残されていました。

Aug  5 12:34:56 localhost kernel: CIFS VFS: cifs_mount failed w/return code = -13

原因

CIFSマウントする際の (デフォルトの) 認証方式が変更になったのが原因のようです。

CentOS7ではNTLMv2は利用されるが、NTLMはデフォルトでは利用されなくなりました。サーバ(NAS)側がNTLMv2に対応していなかったためにマウント出来なくなったという事です。
以下詳細

CIFSマウントする際の認証方式に関しては、/proc/fs/cifs/SecurityFlags で設定されていて、以下で確認できます。

# cat /proc/fs/cifs/SecurityFlags

手元にある CentOS6/7 で確認したところ以下になりました。

OSSecurityFlags
CentOS60x7
CentOS70x85
Documentation-filesystems-cifs-README によると、SecurityFlags の設定は以下のようになっています。

認証フラグ値
may use packet signing0x00001
must use packet signing0x01001
may use NTLM (most common password hash)0x00002
must use NTLM0x02002
may use NTLMv20x00004
must use NTLMv20x04004
may use Kerberos security0x00008
must use Kerberos0x08008
may use lanman (weak) password hash0x00010
must use lanman password hash0x10010
may use plaintext passwords0x00020
must use plaintext passwords0x20020
(reserved for future packet encryption)0x00040

実際の SecurityFlags の値は上記フラグ値の論理和として設定されており、CentOS6 の設定値 0x7 は

0x07 = 0x00001 + 0x000002 + 0x000004

となり、packet signing, NTLM, NTLMv2 の何れかで認証が行われる 設定 と言う事になります。

0x85 はというと、0x00080 の記載がないので判りませんでしたが、16進数1桁目(0x05)だけ見た場合、packet signing, NTLMv2 の何れかと言う事になり、NTLMでの認証は行えない設定になっていると思われます。

解決策

幾つかの解決策が考えられます。

SecurityFlags の値を変更する

上記 /proc/fs/cifs/SecurityFlags の値を変更する方法が考えられます。
私はこの方法は採っていませんが、以下の方法で設定できると思われます。
(再起動が必要かも)

# cat 0x7 >  /proc/fs/cifs/SecurityFlags

マウントオプションで認証方式を指定する

私が採ったのはこの方法。
認証方式を明示的に指定します。

mount //hostName/shareName /mnt/mountPoint -o username=xxxx,sec=ntlm

sec=認証方式 として指定する事で指定した認証方式で認証させる事が可能です。

/etc/fstab にて指定する場合

バックアップ処理等で (cron 等で) マウントする処理を行っている場合、/etc/fstab でマウントポイントを記述している事もあるかと思います。この場合は以下のように記述できます。

...
//hostName/shareName   /mnt/mountPoint      cifs    sec=ntlm,credentials=/.../passwdFile        0 0
...

サーバ側も NTLM2 にしてしまう

NTLM よりも NTLM2 の方が認証方式としてはよりセキュアなので、可能であればサーバ側の認証方式を NTLM2 にしてしまうという手も考えられます。
業務で古いWindows OS を利用し続けているといった事がなければ、NTLM2 にしてしまう事も可能かと思います。

※古いタイプのNAS等では対応が難しい場合もあるかと思います。
利用している機器で対応可能かどうか検証してからという事になるでしょう。

まとめ

バックアップしているKVMゲストのイメージを共有フォルダから取得しようとした際に、いきなりこの問題にぶち当たったため、KVMサーバ構築完了まで行きませんでした。

CentOS7でのKVMサーバ構築方法に関しては、余裕があったら今度書くかもしれません。→ 書きました ( 関連記事参照 )