9.2. SMB 共有のマウント

Red Hat Enterprise Linux では、カーネルの cifs.ko ファイルシステムモジュールにより、SMB プロトコルを利用できます。ただし、SMB 共有をマウントして作業を行うには、cifs-utils パッケージをインストールする必要があります。
# yum install cifs-utils
cifs-utils パッケージでは、以下を行うためのユーティリティを利用できます。
  • SMB と CIFS 共有をマウントする
  • カーネルのキーリングで NT Lan Manager (NTLM) の認証情報を管理する
  • SMB および CIFS 共有のセキュリティー記述子でアクセス制御リスト (ACL) を設定し、表示する

9.2.1. サポートされている SMB プロトコルバージョン

cifs.ko カーネルモジュールは、以下の SMB プロトコルバージョンに対応しています。
  • SMB 1
  • SMB 2.0
  • SMB 2.1
  • SMB 3.0

注記

プロトコルのバージョンにより、すべての SMB 機能が実装されているわけではありません。

9.2.1.1. UNIX 拡張機能のサポート

Samba は、SMB プロトコルの CAP_UNIX 機能ビットを使用して UNIX 拡張機能を提供します。これらの拡張機能は cifs.ko カーネルモジュールでもサポートされています。ただし、Samba とカーネルモジュールはどちらも、SMB 1 プロトコルでのみ UNIX 拡張機能をサポートしています。
UNIX 拡張機能を使用するには、以下の手順を実行します。
  1. /etc/samba/smb.conf ファイルの [global] セクションにある server min protocol オプションを NT1 に設定します。これは Samba サーバーのデフォルトです。
  2. mount コマンドに -o vers=1.0 オプションを指定し、SMB 1 プロトコルを使用して共有をマウントします。たとえば、次のようになります。
    mount -t cifs -o vers=1.0,username=user_name //server_name/share_name /mnt/
    デフォルトで、カーネルモジュールは SMB 2 またはサーバーでサポートされている最新のプロトコルバージョンを使用します。-o vers=1.0 オプションを mount コマンドに渡すと、カーネルモジュールは UNIX 拡張機能の使用に必要な SMB 1 プロトコルを使用することを強制されます。
UNIX 拡張機能が有効になっているかどうかを確認するには、マウントされた共有のオプションを表示します。
# mount
...
//server/share on /mnt type cifs (...,unix,...)
マウントオプションの一覧に unix エントリーが表示されている場合は、UNIX 拡張機能が有効になっています。

9.2.2. SMB 共有の手動マウント

SMB 共有を手動でマウントするには、-t cifs パラメーターで mount ユーティリティを使用します。
# mount -t cifs -o username=user_name //server_name/share_name /mnt/
Password for user_name@//server_name/share_name:  ********
I-o オプション パラメーターでは、共有のマウントに使用されるオプションを指定できます。詳細は、mount.cifs(8) man ページの 「よく使用されるマウントオプション」 と 『OPTIONS』 のセクションを参照してください。

例9.1 暗号化された SMB 3.0 接続を使用した共有のマウント

\\server\example\ 共有を DOMAIN\Administrator ユーザーとして、暗号化 SMB 3.0 接続から /mnt/ ディレクトリーにマウントするには以下を実行します。
# mount -t cifs -o username=DOMAIN\Administrator,seal,vers=3.0 //server/example /mnt/
Password for user_name@//server_name/share_name:  ********

9.2.3. システム起動時の SMB 共有の自動マウント

システムの起動時に SMB 共有を自動的にマウントするには、共有のエントリーを /etc/fstab ファイルに追加します。たとえば、次のようになります。
//server_name/share_name  /mnt  cifs  credentials=/root/smb.cred  0 0

重要

システムが自動的に共有をマウントできるようにするには、ユーザー名、パスワード、およびドメイン名を認証情報ファイルに保存する必要があります。詳細は、「認証情報ファイルを使用した SMB 共有への認証」を参照してください。
/etc/fstab ファイルの 4 番目のフィールドでは、認証情報ファイルへのパスなど、マウントオプションを指定します。詳細は、mount.cifs(8) man ページの 「よく使用されるマウントオプション」 と 『OPTIONS』 のセクションを参照してください。
共有が正常にマウントされたことを確認するには、次のように入力します。
# mount /mnt/

9.2.4. 認証情報ファイルを使用した SMB 共有への認証

特定の状況では、管理者がユーザー名とパスワードを入力せずに共有をマウントする必要があります。この場合、認証情報ファイルを作成します。例:

手順9.1 認証情報ファイルの作成

  1. ~/smb.cred などのファイルを作成し、そのファイルのユーザー名、パスワード、およびドメイン名を指定します。
    username=user_name
    password=password
    domain=domain_name
  2. 所有者だけがファイルにアクセスできるようにパーミッションを設定します。
    # chown user_name ~/smb.cred
    # chmod 600 ~/smb.cred
mount ユーティリティーに credentials=file_name マウントオプションを渡すか、/etc/fstab ファイルでオプションを使用して、ユーザー名とパスワードの入力を求められずに共有をマウントできるようになります。

9.2.5. マルチユーザー SMB マウントの実行

共有をマウントするために指定した認証情報により、デフォルトでマウントポイントのアクセス権が決まります。たとえば、共有をマウントするときに DOMAIN\example ユーザーを使用した場合は、どのローカルユーザーが操作を実行しても、共有に対するすべての操作はこのユーザーとして実行されます。
ただし特定の状況では、システムの起動時に管理者が自動的に共有をマウントしたい場合でも、ユーザーは自分の認証情報を使用して共有のコンテンツに対して操作を実行する必要があります。そんなとき multiuser マウントオプションを使用すると、このシナリオを設定できます。

重要

multiuser を使用するには、sec=security_type マウントオプションを、認証ファイルとともに krb5 または ntlmssp オプションなど、非対話型の方法で認証情報を与えることのできるセキュリティタイプに設定する必要があります。「ユーザーとしての共有へのアクセス」 を参照してください。
root ユーザーは、multiuser オプションと共有の内容への最低限のアクセスを持つアカウントを使用して、共有をマウントします。通常のユーザーは、cifscreds ユーティリティーを使用して、現在のセッションのカーネルキーリングに自分のユーザー名とパスワードを渡すことができます。ユーザーがマウントされた共有のコンテンツにアクセスすると、カーネルは、共有のマウントに最初に使用されたものではなく、カーネルキーリングからの認証情報を使用します。

multiuser オプションによる共有のマウント

システムの起動時に、multiuser オプションを使用して自動的に共有をマウントするには、次の手順を実行します。

手順9.2 multiuser オプションによる /etc/fstab ファイルエントリーの作成

  1. /etc/fstab ファイルに共有のエントリーを作成します。たとえば、次のようになります。
    //server_name/share_name  /mnt  cifs  multiuser,sec=ntlmssp,credentials=/root/smb.cred  0 0
  2. 共有をマウントします。
    # mount /mnt/
システムの起動時に共有を自動的にマウントしない場合は、-o multiuser,sec=security_typemount コマンドに渡して手動で共有をマウントします。SMB 共有の手動マウントの詳細は、「SMB 共有の手動マウント」 を参照してください。

SMB 共有が multiuser オプションを使用してマウントされているかどうかの確認

共有が multiuser オプションでマウントされているかどうかを確認するには:
# mount
...
//server_name/share_name on /mnt type cifs (sec=ntlmssp,multiuser,...)

ユーザーとしての共有へのアクセス

SMB 共有が multiuser オプションを使用してマウントされている場合、ユーザーはサーバーの認証情報をカーネルのキーリングに提供できます。
# cifscreds add -u SMB_user_name server_name
Password: ********
これで、ユーザーがマウントされた SMB 共有を含むディレクトリーで操作を実行すると、サーバーは、共有がマウントされたときに最初に使用されたものではなく、このユーザーのファイルシステムのパーミッションが適用されます。

注記

複数のユーザーが、マウントされた共有上で自分の認証情報を使用して同時に操作を実行できます。

9.2.6. よく使用されるマウントオプション

SMB 共有をマウントすると、マウントオプションにより次のことが決まります。
  • サーバーとの接続がどのように確立されるか。たとえば、サーバーに接続するときに使用される SMB プロトコルバージョンはどれか。
  • 共有がローカルファイルシステムにどのようにマウントされるか。たとえば、複数のローカルユーザーがサーバー上のコンテンツにアクセスできるようにするために、システムがリモートファイルとディレクトリーのパーミッションを上書きする場合など。
/etc/fstab ファイルの 4 番目のフィールドまたは mount コマンドの -o パラメーターで複数のオプションを設定するには、それらをカンマで区切ります。たとえば、手順9.2「multiuser オプションによる /etc/fstab ファイルエントリーの作成」 を参照してください。
次のリストは、よく使用されるマウントオプションの概要を示しています。

表9.1 よく使用されるマウントオプション

オプション説明
credentials=file_name認証情報ファイルへのパスを設定します。 「認証情報ファイルを使用した SMB 共有への認証」 を参照してください。
dir_mode=modeサーバーが CIFS UNIX 拡張機能をサポートしていない場合は、ディレクトリーモードを設定します。
file_mode=modeサーバーが CIFS UNIX 拡張機能をサポートしていない場合は、ファイルモードを設定します。
password=passwordSMB サーバーへの認証に使用されるパスワードを設定します。あるいは、credentials オプションを使用して認証情報ファイルを指定します。
sealSMB 3.0 またはそれ以降のプロトコルバージョンを使用して接続の暗号化サポートを有効化します。よって、vers3.0 またはそれ以降に指定して、seal を使用します。 例9.1「暗号化された SMB 3.0 接続を使用した共有のマウント」 を参照してください。
sec=security_mode
ntlmsspi などのセキュリティーモードを設定して、NTLMv2 パスワードハッシュとパケット署名を有効にします。使用できる値のリストは、mount.cifs(8) man ページにあるオプションの説明を参照してください。
サーバーが ntlmv2 セキュリティモードに対応していない場合は、デフォルトの sec=ntlmssp を使用します。セキュリティ上の理由から、安全でない ntlm セキュリティモードは使用しないでください。
username=user_nameSMB サーバーへの認証に使用されるユーザー名を設定します。あるいは、credentials オプションを使用して認証情報ファイルを指定します。
vers=SMB_protocol_versionサーバーとの通信に使用される SMB プロトコルバージョンを設定します。
完全な一覧は、mount.cifs(8) man ページの 『OPTIONS』 セクションを参照してください。