すべてのプロダクト
Search
ドキュメントセンター

File Storage NAS:NFSv4 ACL を使用したアクセス制御

最終更新日:Jul 30, 2024

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

前提条件

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

背景情報

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

コマンド説明

NFSv4 ACLを設定する前に、特定のコマンドに慣れることをお勧めします。 次の表にコマンドを示します。

コマンド

説明

nfs4_getfacl <filename>

指定されたファイルに適用されるACLを照会します。

nfs4_setfacl -a A::GROUP @:W <filename>

指定されたファイルに対する書き込み権限をGROUP @ プリンシパルに付与するアクセス制御エントリ (ACE) を追加します。

nfs4_setfacl -a A::1000:W <ファイル名>

指定したファイルに対する書き込み権限を付与するACEを、1000という名前のユーザープリンシパルに追加します。

nfs4_setfacl -a A:g:10001:W <ファイル名>

指定したファイルに対する書き込み権限を付与するACEを、10001という名前のユーザープリンシパルに追加します。

nfs4_setfacl -e <filename>

インタラクティブモードでACLを変更します。

nfs4_getfacl <filename> > saved_acl.txt

指定したファイルに対する権限のリストをTXTファイルとして保存します。

nfs4_setfacl -S saved_acl.txt <filename>

権限のリストを含むTXTファイルを使用して、指定したファイルに対する権限を設定します。

nfs4_setfacl -m A::1001:rwaxTNcCy A::1001:rxtcy file1

ファイル file1 に適用される ACE の権限を変更します。

nfs4_getfacl file1 | nfs4_setfacl -S - file2

file1ファイルのACLをfile2ファイルにコピーします。

nfs4_getfacl file1 | grep @ | nfs4_setfacl -S - file1

次のプリンシパル (OWNER @ 、GROUP @ 、およびEVERYONE @) を含むACEを除いて、file1ファイルに適用されるすべてのACEを削除します。

nfs4_setfacl -R -a A:g:10001:rW dir

dirディレクトリ内のファイルおよびサブディレクトリに対する読み取りおよび書き込み権限を付与するACEを、10001という名前のグループプリンシパルに追加します。

find dir -type f -exec sh -c 'for ace in $(nfs4_getfacl \{} | grep "^ A.*\:1005\:"); do nfs4_setfacl -x $ace \{; done' \;

dirディレクトリ内のファイルに対する権限を1005という名前のユーザープリンシパルに付与するACEを削除します。

nfs4_setfacl -a A:fdg:10001:rW dir1

dir1ディレクトリ内の新しいファイルおよびサブディレクトリに対する読み取りおよび書き込み権限を付与するACEを、10001という名前のグループプリンシパルに追加します。

nfs4_setfacl -a A:fg:10001:rx dir1

dir1ディレクトリ内のすべての新しいファイルに対する読み取り、書き込み、および実行権限を付与するACEを、10001という名前のグループプリンシパルに追加します。

手順

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

  1. ユーザーとグループを作成します。

    この例では、player、admini、anonym のユーザーが作成されます。 プレイヤーとadminisのグループが作成されます。 プレーヤーユーザーがプレーヤーグループに追加され、adminiユーザーがadminisグループに追加されます。

    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. プレイヤーとadminisグループのIDを取得します。

    /etc/groupファイルを開きます。 プレイヤーとadminisグループのIDが表示されます。

    players:x:19064:player
    adminis:x:19065:admini
  4. NFSv4 ACLを設定して、ファイルとディレクトリへのアクセスを制御します。

    次のコマンドを実行して操作を完了します。Create a directory named dir0. dir0ディレクトリ内のすべてのファイルに対して読み取り専用権限を付与するACEをplayersグループに追加し、adminisグループに読み取り、書き込み、および実行権限を付与し、他のユーザーには権限を付与しません。

    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ユーザーに読み取りおよび書き込み権限があることを確認します。

      sudo su admini -c 'touch dir0/file'

      sudo su admini -c 'touch dir0/file'
    2. プレーヤーユーザーに読み取り専用の権限があることを確認します。

      1. プレーヤーユーザーに、dir0/fileファイルなどのファイルを作成する権限がないことを確認します。

        • 以下のコマンドを実行します。

          sudo su player -c 'touch dir0/file'
        • 出力が次の情報に似ている場合、プレーヤーユーザーにはファイルを作成する権限がありません。

          touch: cannot touch 'dir0/file': Permission denied
      2. プレーヤーユーザーに書き込み権限 (dir0/fileファイルへの書き込み権限など) がないことを確認します。

        • 以下のコマンドを実行します。

          sudo su player -c 'echo 456 >> dir0/file'
        • 出力が次の情報に似ている場合、プレーヤーユーザーには書き込み権限がありません。

          bash: dir0/file: Permission denied
      3. プレーヤーユーザーに読み取り権限があることを確認します。

        • 以下のコマンドを実行します。

          sudo su player -c 'cat dir0/file'
        • 出力が次の情報に似ている場合、プレーヤーユーザーには読み取り権限があります。

          123

        sudo su player -c 'nfs4_getfacl dir0/file 'コマンドを実行して、プレーヤーユーザーが持つdir0/fileファイルに対する権限を表示することもできます。

        A::OWNER@:tTnNcCy
        A::GROUP@:tncy
        A::EVERYONE@:tncy
        A:g:19064:rxtncy
        A:g:19065:rwaxtTnNcCy
    3. anonymユーザーにdir0ディレクトリに対する権限がないことを確認します。

      1. 匿名ユーザーにdir0ディレクトリ内のファイルを表示する権限がないことを確認します。

        • 以下のコマンドを実行します。

          sudo su anonym -c 'ls dir0'
        • 出力が次の情報に似ている場合、anonymユーザーにはdir0ディレクトリに対する権限がありません。

          ls: cannot open directory dir0: Permission denied
      2. 匿名ユーザーにファイルのコンテンツを表示する権限がないことを確認します。

        • 以下のコマンドを実行します。

          sudo su anonym -c 'cat dir0/file'
        • 出力が次の情報に似ている場合、匿名ユーザーにはファイルの内容を表示する権限がありません。

          cat: dir0/file: Permission denied
      3. 匿名ユーザーにファイルへのアクセス権限がないことを確認します。

        • 以下のコマンドを実行します。

          sudo su anonym -c 'nfs4_getfacl dir0/file'
        • 出力が次の情報に似ている場合、匿名ユーザーにはファイルにアクセスする権限がありません。

          Invalid filename: dir0/file

次のステップ

次の方法を使用して、ユーザーから権限を取り消すことができます。

NFSv4 ACLを使用する場合は、各ユーザーをグループに追加することをお勧めします。 これにより、個々のユーザーではなくユーザーグループの権限を設定できます。 ユーザーからオブジェクトに対する権限を取り消すには、オブジェクトに対する権限が付与されているグループからユーザーを削除します。 たとえば、次のコマンドを実行してadminisグループからadminiユーザーを削除し、そのユーザーをadminis2グループに追加できます。

  1. 次のコマンドを実行して、adminis2グループを作成します。

    sudo groupadd adminis2
  2. 次のコマンドを実行して、adminisグループからadminiユーザーを削除し、adminis2グループに追加します。

    sudo usermod -g adminis2 admini
  3. ユーザーのID情報を照会します。

    • 以下のコマンドを実行します。

      id admini
    • 次の情報が返されます。

      uid=1057(admini) gid=1057(admini) groups=1061(adminis2)
  4. adminiユーザーの権限を確認します。

    1. adminiユーザーにアクセスする権限がないことを確認します。dir0ディレクトリに移動します。

      • 以下のコマンドを実行します。

        sudo su admini -c 'ls dir0'
      • 出力が次のような情報である場合、adminiユーザーにはdir0ディレクトリにアクセスする権限がありません。

        ls: cannot open directory dir0: Permission denied
    2. のコンテンツを表示する権限がadminiユーザーにないことを確認します。dir0 /ファイルファイルを作成します。

      • 以下のコマンドを実行します。

        sudo su admini -c 'cat dir0/file'
      • 出力が次の情報に似ている場合、adminiユーザーにはdir0/fileファイルの内容を表示する権限がありません。

        cat: dir0/file: Permission denied
    3. adminiユーザーにアクセスする権限がないことを確認します。dir0 /ファイルファイルを作成します。

      • 以下のコマンドを実行します。

        sudo su admini -c 'getfacl dir0/file'
      • 出力が次のような情報である場合、adminiユーザーにはdir0/fileファイルにアクセスする権限がありません。

        getfacl: dir0/file: Permission denied