このトピックでは、NFSv4 ACL (アクセス制御リスト) を設定して NFSv4 ファイルシステムに適用し、ファイルとディレクトリ へのアクセスを制御する方法について説明します。

始める前に

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

このタスクについて

Linux を実行する ECS (Elastic Compute Service) インスタンスに NFSv4 ファイルシステムをマウントし、インスタンスに Linux 固有の nfs4-acl-tools ツールをインストールできます。 標準のnfs4_getfaclおよびnfs4_setfaclツールを使用して、インストール完了後に NFSv4 ACL を設定できます。

説明

下表に、NFSv4 ACL の設定に関連するコマンドを示します。

Command 説明
nfs4_getfacl <filename> 指定されたファイルのアクセス権限を表示します。
nfs4_setfacl -a A::GROUP@:W <filename> GROUP@principal に指定ファイルへの書き込みアクセスを 許可する ACE (アクセス制御エントリ) を追加します。
nfs4_setfacl -a A::1000:W <filename> 指定ファイルへの書き込みアクセスを名前が 1000 のユーザープリンシパルに許可する ACE を追加します。
nfs4_setfacl -a A:g:10001:W <filename> 指定ファイルへの書き込みアクセスを名前が 10001 のグループプリンシパルに許可する ACE を追加します。
nfs4_setfacl -e <filename> エディターで ACL を設定します。
nfs4_getfacl <filename> > saved_acl.txt 指定したファイルに対する権限リストをテキストファイルとして保存します。
nfs4_setfacl -S saved_acl.txt <filename> 既定の権限が設定されたテキストファイルを使用して、指定ファイルに対する権限を設定します。
nfs4_setfacl -m A::1001:rwaxTNcCy A::1001:rxtcy file1 ファイル file1 に適用される ACE の権限を変更します。
nfs4_getfacl file1 | nfs4_setfacl -S - file2 file1 に対する権限を file2 にコピーします。
nfs4_getfacl file1 | grep @ | nfs4_setfacl -S - file1 file1 に適用されるすべての ACE をすべて削除します ( ただし、OWNER@、GROUP@、EVERYONE@ に対する ACE を除く)。
nfs4_setfacl -R -a A:g:10001:rW dir 名前が 10001 のグループプリンシパルに dir内のファイルおよびサブディレクトリに対する読み取りおよび書き込みアクセスを許可する ACE を追加します。
find dir -type f -exec sh -c 'for ace for $(nfs4_getfacl \ {} | grep "^ A。* \:1005 \:"); do nfs4_setfacl -x $ ace \ {}; \ '; 名前が 1005 のユーザープリンシパルに dir内のファイルへのアクセスを許可する ACE を削除します。
nfs4_setfacl -a A:fdg:10001:rW dir1 名前が 10001 のグループプリンシパルに dir1 内に新しく作成されたすべてのファイルとサブディレクトリへの読み取りおよび書き込みアクセスを許可する ACE を追加します。
nfs4_setfacl -a A:fg:10001:rx dir1 名前が 0001 のグループプリンシパルに dir1 内に新しく作成されたすべてのファイルへの読み取りおよび書き込みアクセスを許可する ACE を追加します 。

手順

ファイルおよびディレクトリへのアクセスを制御する NFSv4 ACL を設定するには、以下の手順を実行します。

  1. ユーザーおよびグループを作成します。

    ここでは、通常のグループ players に属する通常のユーザー player を作成する方法について説明します。 また、管理者グループ adminis に属する管理者 admini、さらにユーザー anonym を作成する方法についても説明します。

    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
  2. NFSv4 ACL を設定するための関連ツールをインストールします。

    パッケージをインストールしている場合は、この手順を省略してください。

    sudo yum -y install nfs4-acl-tools
  3. players および adminis グループのグループ ID を取得します。
    ファイル /etc/groupを開き、以下のように、players および adminis グループのグループ ID を取得します。
    players:x:19064:player
    adminis:x:19065:admini
  4. ファイルとディレクトリに対する NFSv4 ACL を設定します。
    次のコマンドを使用して、操作を完了します。ディレクトリ dir0 を作成し、dir0 内のすべてのファイルに対して、players グループには読み取り専用アクセス権を付与し、adminis グループに読み書きおよび実行アクセス権を付与し、他のユーザーにはファイル内のすべてのファイルへのアクセス権を付与しない ACE を追加します。
    sudo umask 777
    sudo mkdir dir0
    sudo nfs4_setfacl -a A:fdg:19064:RX dir0
    sudo nfs4_setfacl -a A:fdg:19065: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 コマンドを使用して、設定を確認します。
    A::OWNER@:tTnNcCy
    A::GROUP@:tncy
    A::EVERYONE@:tncy
    A:fdi:EVERYONE@:tncy
    A:fdi:OWNER@:tTnNcCy
    A:fdi:GROUP@:tncy
    A:g:19064:rxtncy
    A:g:19065:rwaDxtTnNcCy
    A:fdig:19064:rxtncy
    A:fdig:19065:rwaDxtTnNcCy
  5. ACLの設定を確認します。
    1. 次のコマンドを使用して、admini ユーザーの読み取りおよび書き込みアクセスを確認します。
      [root@vbox test] sudo su admini -c 'touch dir0/file'
      [root@vbox test] sudo su admini -c 'echo 123 > dir0/file'
    2. 次のコマンドを使用して、player ユーザーの読み取り専用アクセスを確認します。
      [root@vbox test] sudo su player -c 'touch dir0/file'
      touch: cannot touch ‘dir0/file’: Permission denied
      [root@vbox test] sudo su player -c 'echo 456 >> dir0/file'
      bash: dir0/file: Permission denied
      [root@vbox test] sudo su player -c 'cat dir0/file'
      123
      [root@vbox test] sudo su player -c 'nfs4_getfacl dir0/file'
      A::OWNER@:tTnNcCy
      A::GROUP@:tncy
      A::EVERYONE@:tncy
      A:g:19064:rxtncy
      A:g:19065:rwaxtTnNcCy
    3. 次のコマンドを使用して、anonym ユーザーが /dir0/file ファイルにアクセスできないことを確認します。
      [root@vbox test] sudo su anonym -c 'ls dir0'
      ls: cannot open directory dir0: Permission denied
      [root@vbox test] sudo su anonym -c 'cat dir0/file'
      cat: dir0/file: Permission denied
      [root@vbox test] sudo su anonym -c 'nfs4_getfacl dir0/file'
      Invalid filename: di

関連する操作

ユーザーのアクセス権限を削除する場合は、次の方法を使用します。

NFSv4 ACL を使用する場合は、各ユーザーを異なるグループに分類することを推奨します。 また、NFSv4 ACL を設定する際に、個別のユーザーではなくグループのアクセス権限のみを設定します。 オブジェクトへのアクセス権を持つグループからユーザーを削除することにより、ユーザーからオブジェクトに対するアクセスを無効にできます。 たとえば、次のコマンドを使用して adminis ユーザーを adminis グループから削除し、adminis2 グループに追加します。

[root@vbox test] sudo groupadd adminis2
[root@vbox test] sudo usermod -g adminis2 admini
[root@vbox test] id admini
uid=1057(admini) gid=1057(admini) groups=1054(adminis2)
[root@vbox test] sudo su admini -c 'ls dir0'
ls: cannot open directory dir0: Permission denied
[root@vbox test] sudo su admini -c 'cat dir0/file'
cat: dir0/file: Permission denied
[root@vbox test] sudo su admini -c 'nfs4_getfacl dir0/file'
Invalid filename: dir0/file