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

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

最終更新日:Dec 30, 2025

このトピックでは、Portable Operating System Interface (POSIX) アクセス制御リスト (ACL) を設定して、NFSv3 ファイルシステム内のファイルやディレクトリへのアクセスを制御する方法について説明します。

前提条件

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

コマンドの説明

POSIX ACL を設定する前に、特定のコマンドについて理解しておくことを推奨します。次の表にコマンドの説明を示します。

コマンド

説明

getfacl <filename>

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

setfacl -m g::w <filename>

GROUP に書き込み権限を付与します。

setfacl -m u:player:w <filename>

player ユーザーに書き込み権限を付与します。

setfacl -m g:players:rwx <filename>

players グループに読み取り、書き込み、実行の権限を付与します。

setfacl -x g:players <filename>

players グループから権限を取り消します。

getfacl file1 | setfacl --set-file=- file2

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

setfacl -b file1

file1 ファイルのモード以外の ACE をすべて削除します。

setfacl -k file1

file1 ファイルからすべてのデフォルト ACE を削除します。

setfacl -R -m g:players:rw dir

dir ディレクトリ内のファイルとサブディレクトリに対する読み取りおよび書き込み権限を players グループに付与します。

setfacl -d -m g:players:rw dir1

dir1 ディレクトリ内の新しいファイルとサブディレクトリに対する読み取りおよび書き込み権限を players グループに付与します。

操作手順

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

  1. ユーザーとグループの作成

    この例では、player、admini、anonym というユーザーが作成されます。また、players と adminis というグループが作成されます。player ユーザーは players グループに追加され、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. POSIX ACL を設定してファイルとディレクトリへのアクセスを制御

    次のコマンドを実行して操作を完了します:dir0 という名前のディレクトリを作成します。players グループに読み取り専用権限を、adminis グループに読み取り、書き込み、実行の権限を付与し、dir0 ディレクトリ内のすべてのファイルに対して others クラスには権限を付与しません。

    sudo umask 777
    sudo mkdir dir0
    sudo setfacl -m g:players:r-x dir0
    sudo setfacl -m g:adminis:rwx dir0
    sudo setfacl -m u::--- dir0
    sudo setfacl -m g::--x dir0
    sudo setfacl -m o::--- dir0
    sudo setfacl -d -m g:players:r-x dir0
    sudo setfacl -d -m g:adminis:rwx dir0
    sudo setfacl -d -m u::--- dir0
    sudo setfacl -d -m g::--x dir0
    sudo setfacl -d -m o::--- dir0

    設定が完了したら、sudo getfacl dir0 を実行して結果を表示します。

    # file: dir0
    # owner: root
    # group: root
    user::---
    group::--x
    group:players:r-x
    group:adminis:rwx
    mask::rwx
    other::---
    default:user::---
    default:group::--x
    default:group:players:r-x
    default:group:adminis:rwx
    default:mask::rwx
    default:other::---
  3. ACL 設定の確認

    1. admin ユーザーに読み取りおよび書き込み権限があることを確認

      sudo su admini -c 'touch dir0/file'
      sudo su admini -c 'echo 123 > dir0/file'
    2. player ユーザーに読み取り専用権限があることを確認

      1. file を作成する権限がないことを確認します。

        たとえば、dir0 ディレクトリに file という名前のファイルを作成しようとします。

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

          sudo su player -c 'touch dir0/file'
        • 次のような情報が出力された場合、player ユーザーには file ファイルを作成する権限がありません。

          touch: cannot touch ‘dir0/file’: Permission denied
      2. dir0/file ファイルの内容を確認します。

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

          sudo su player -c 'cat dir0/file'
        • 次のような情報が出力された場合、player ユーザーには dir0/file ファイルの内容を表示する権限があります。

          123
      3. 書き込み権限を確認します。

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

          sudo su player -c 'echo 456 >> dir0/file'
        • 次のような情報が出力された場合、player ユーザーには書き込み権限がありません。

          bash: dir0/file: Permission denied

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

        # file: dir0/file
        # owner: admini
        # group: adminis
        user::---
        group::---
        group:players:r-x
        group:adminis:rwx
        mask::rwx
        other::---
    3. 匿名ユーザーに権限がないことを確認

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

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

          sudo su anonym -c 'ls dir0'
        • 次のメッセージが返された場合、匿名ユーザーには必要なアクセス権限がありません。

          ls: cannot open directory dir0: Permission denied
      2. ファイルを読み取る権限がないことを確認します。

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

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

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

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

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

          getfacl: dir0/file: Permission denied

関連操作

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

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

  1. adminis2 グループを作成します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        getfacl: dir0/file: Permission denied