このトピックでは、Samba サービスを使用して SMB プロトコルを使用して NFS ファイルシステムを共有し、NFSv4 ACE (アクセス制御リストエントリ) を使用して NFS ファイルシステムへのアクセスを制御する方法について説明します。

始める前に

NFSv4 ファイルシステムが Linux サーバーにマウントされていること。 詳細については、「NFS ファイルシステムをマウントする」をご参照ください。

このタスクについて

Samba を使用して、 Linux と Windows 間で SMB プロトコルを使用したファイル共有を有効化できます。 この方法は、Linux サーバーに NFS ファイルシステムをマウントし、Windows ユーザーとファイルシステムを共有するシナリオに適用されます。 Samba では、同じ Samba ユーザー名を使用して Windows と Linux の両方にログインし、2 つのオペレーティングシステムに個別のパスワードを設定することができます。 Samba ユーザーまたはグループを valid users フィールドに指定して、ファイルシステムへのアクセス権限を付与することができます。 特定のファイルまたはディレクトリへのアクセスを制御するためには、NFSv4 ACE を設定しまる。Samba は ACE を SMB 権限に変換します。

手順

このトピックでは、CentOS オペレーティングシステムを例として取り上げます。NFSv4 ACE を設定し、Samba サービスを使用して ACE を SMB 権限に変換して NFS ファイルシステムへのアクセスを制御する方法を説明します。 他の Linux ディストリビューションでも手順は同様です。ただしコマンドが異なる場合があります。

  1. Samba サービスをインストールします。
    1. Samba バージョン 4.11.2 のコードをダウンロードします。

      Samba のGithub ReleasesページまたはSamba のホームページからコードをダウンロードします。

    2. Samba のコンパイルに必要なパッケージの依存関係をインストールします。

      CentOS 7 のパッケージインストールスクリプト bootstrap/generated-dists/centos7/bootstrap.sh をダウンロードします。 次のコマンドを実行して依存関係をインストールします。 詳細については、「Package Dependencies Required to Build Samba」をご参照ください。

      chmod +x bootstrap.sh
      sudo ./bootstrap.sh
    3. 以下のコマンドを実行して、Samba 4.11.2 パッケージからファイルを抽出します。
      tar -zxvf ~/samba-4.11.2.tar.gz
      cd ~/samba-4.11.2
    4. Samba サービスをコンパイルします。
      sudo ./configure --sbindir=/sbin/ --sysconfdir=/etc/samba/ --mandir=/usr/share/man/ --with-static-modules=vfs_nfs4acl_xattr
      コンパイルが成功すると、次のメッセージが返されます。 エラーが返された場合、Build Samba from Sourceを参照してエラーのトラブルシューティングを行います 。
      'configure' finished successfully (1m2.432s)
    5. Samba サービスをインストールします。
      make
      make test
      sudo make install
  2. Samba ユーザーとグループを作成します。

    この例では、ユーザー player、admini、anonym を作成します。 また、グループ player、adminis、および anonym_group を作成します。 player を players に、admini を adminis に、anonym を anonym_group に追加します。

    1. 次のコマンドを実行して、ユーザーとグループを作成し、対応するグループにユーザーを追加します。
      sudo useradd player
      sudo groupadd players
      sudo usermod -g players player
      sudo useradd admini
      sudo groupadd adminis
      sudo usermod -g adminis admini
      sudo useradd anonym
      sudo groupadd anonym_group
      sudo usermod -g anonym_group anonym
    2. 以下のコマンドを実行して Samba ユーザーごとのパスワードを作成し、SMB プロトコルを使用してファイルシステムをマウントします。
      sudo ~/samba-4.11.2/bin/smbpasswd -a player
      sudo ~ /samba-4.11.2/bin/smbpasswd -a admini
      sudo ~/samba-4.11.2/bin/smbpasswd -a anonym
      smbpasswd ファイルは Samba の bin ディレクトリに保存されます。 コンパイルされた smbpasswd ファイルが実行されると、次のメッセージが表示されます。 smbpasswd ファイルがコンパイルされていない場合、メッセージは表示されません。
      Registered MSG_REQ_POOL_USAGE
      Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
  3. smb.conf を編集します。
    Samba サービスをインストールすると、/etc/samba/smb.conf が作成されます。 /etc/samba/smb.conf を開いて 以下の内容を設定します。 ファイルに設定する項目の詳細については、「smb.conf」をご参照ください 。
    • path = /mnt/nfs4: /mnt/nfs4 は、マウントするディレクトリを示しています。 必要に応じて変更します。
    • valid users:ファイルシステムにアクセスする権限が付与されているユーザーまたはグループです。 必要に応じて変更します。
    [global] server
       string = Samba Alibaba NAS NFS
       Server server role = standalone server
       min protocol = SMB2_10
       log file = /var/log/samba/%m
       log level = 2
       valid users = @players, @adminis, @anonym_group
       writable = yes
    [nfs4]
       comment = Secure File Server Share
       path =/mnt/nfs4
       vfs objects = nfs4acl_xattr
       nfs4:mode = simple
       nfs4acl_xattr:encoding = nfs
       nfs4acl_xattr:version = 40
       nfs4acl_xattr:xattr_name = system.nfs4_acl
       nfs4acl_xattr:nfs4_id_numeric = yes
  4. 次のコマンドを実行して、Samba プロセス smbd を開始します。
    sudo smbd
  5. systemd サービスに smbd プロセスをカプセル化します。
    1. /etc/systemd/system/smbd.service という名前のファイルを作成します。
    2. 以下の内容を /etc/systemd/system/smbd.service に追加します。
      [Unit]
      Description=Samba Smbd Service
      After=network.target remote-fs.target nss-lookup.target
      
      [Service]
      Type=forking
      ExecStart=/usr/sbin/smbd
      ExecReload=/bin/kill -HUP $MAINPID
      
      [Install]
      WantedBy=multi-user.target
    3. 次のコマンドを実行して、systemctl ツールを再起動します。
      sudo systemctl daemon-reload
    4. 以下のコマンドを実行して、smbd.service サービスを開始します。
      sudo systemctl enable smbd.service
      次のコマンドを実行して smbd.service サービスを開始することもできます。
      sudo systemctl restart smbd.service
  6. Windows で Samba サービスを確認します。
    net use コマンドを実行し、NFSv4 ファイルシステムをマウントします。
    net use * \\samba-IP\nfs4 <password> /user:<user>

    ファイルシステムがマウントされると、すべての player、admini、および anonymous ユーザーがファイルシステムにアクセスできます。 ファイルとディレクトリを作成し、それらに対して読み取り/書き込み操作を実行できます。

  7. NFS ファイルシステムの NFSv4 ACE を設定します。
    1. NFSv4 ACL ツールをインストールします。

      NFSv4 ACL ツールがインストールされている場合は、この手順をスキップしてください。

      sudo yum -y install nfs4-acl-tools
    2. ユーザーまたはグループのディレクトリとファイルに NFSv4 ACE を設定します。
      この例では、dir0 という名前のディレクトリを作成します。 グループプレーヤーには、dir0 ディレクトリ中のすべてのファイルに対する読み取り専用権限が付与されます 。 グループ admins には、ディレクトリ内のすべてのファイルに対する読み取り、書き込み、実行の権限が付与されます。 ユーザー anonym には、ファイルに対する権限が付与されていま せん。
      sudo umask 777
      sudo mkdir dir0
      sudo nfs4_setfacl -a A:fdg:`id -g players`:RX dir0
      sudo nfs4_setfacl -a A:fdg:`id -g admins`:RWX dir0
      sudo nfs4_setfacl -a A:fdg:OWNER@: dir0
      sudo nfs4_setfacl -a A:fdg:GROUP@: dir0
      sudo nfs4_setfacl -a A:fdg:EVERYONE@: dir0

      設定が完了したら、sudo nfs4_getfacl dir0 コマンドを実行し、結果を表示します。

  8. Windows で NFSv4 ACE の適合性を確認します。
    • NFSv4 ファイルシステムを Windows サーバー上の Samba ユーザー admini としてマウントします。 dir0 ディレクトリにあるファイルとサブディレクトリを作成できます。
    • NFSv4 ファイルシステムを Samba ユーザー player として Windows サーバーにマウントします。 dir0 にあるファイルとサブディレクトリを読むことができますが、ディレクトリの下にファイルとサブディレクトリを作成することはできません。
    • NFSv4 ファイルシステムを Samba ユーザー anonym として Windows サーバーにマウントします。 dir0 ディレクトリにあるファイルとサブディレクトリにアクセスすることはできません。

Samba および NFSv4 ACL スイートの機能

  • NFS ファイルシステムの NFSv4 ACE は SMB 権限に変換され、Windows システムのフォルダープロパティの [セキュリティ] タブに表示されます。 [セキュリティ] タブで、SMB アクセス権限の [許可] オプションが選択されていますが、[拒否] オプションは選択されていません。 さらに、NFSv4 ACE は SMB 権限に変換されますが、Samba は引き続き NFSv4 ACE に基づいて Windows ユーザーからのアクセスを制御します。
  • SMB クライアントで SMB 権限を設定し、それを NFSv4 ACE に変換し、変更を NFS ファイルシステムに保存できます。
  • SMB 権限を NFSv4 ACE に変換できない場合、変更は失敗します。 たとえば、SMB 権限で [拒否] オプションが選択されている場合、NFSv4 ACEs には [拒否] オプションが存在しないため、権限を変換できません。
  • Linux サーバーでのみ ACE を構成し、Windows サーバーをクライアントとして使用することを推奨します。
  • NFSv4 プロトコルはロックをサポートしています。 SMB および NFS クライアントは、同時読み取り/書き込み操作を実行できます。