このトピックでは、NFSv4 アクセス制御リスト (ACL) を設定し、ACL を使用して NFSv4 ファイルシステム内のファイルやディレクトリへのアクセスを制御する方法について説明します。
前提条件
NFSv4 ファイルシステムがマウントされていること。 詳細については、「Linux ECS インスタンスへの NFS ファイルシステムのマウント」をご参照ください。
ファイルシステムで NFS ACL が有効になっていること。 有効にするには、NAS コンソールのファイルシステムの詳細ページに移動し、左側メニューで [アクセス制御] をクリックしてから、[NFS ACL] トグルをオンにします。
背景情報
Linux の Elastic Compute Service (ECS) インスタンスに NFSv4 ファイルシステムをマウントし、そのインスタンスに Linux 固有の nfs4-acl-tools をインストールできます。 ツールをインストールした後、標準の nfs4_getfacl および nfs4_setfacl ツールを使用して NFSv4 ACL を設定できます。
コマンドの説明
NFSv4 ACL を設定する前に、特定のコマンドに精通しておくことを推奨します。 次の表にコマンドを示します。
|
コマンド |
説明 |
|
|
指定したファイルに適用される ACL を照会します。 |
|
|
グループに書き込みアクセス許可を付与します。 |
|
|
ユーザー 1000 に書き込みアクセス許可を付与できます。 |
|
|
ユーザーグループ 10001 に書き込みアクセス許可を付与します。 |
|
|
インタラクティブモードで ACL を変更します。 |
|
|
指定したファイルのアクセス許可の一覧を TXT ファイルとして保存します。 |
|
|
テキストファイルから ACL のアクセス許可を復元できます。 |
|
|
file1 ファイルに適用される ACE のアクセス許可を変更します。 |
|
|
file1 ファイルの ACL を file2 ファイルにコピーします。 |
|
|
file1 ファイルから保持されていない ACE を削除します。 |
|
|
dir ディレクトリ内のファイルとサブディレクトリに対する読み取りおよび書き込みアクセス許可を、10001 という名前のグループプリンシパルに付与する ACE を追加します。 |
|
|
dir ディレクトリツリー内のすべてのファイルから 1005 を含むすべての ACE を削除します。 |
|
|
dir1 ディレクトリ内の新しいファイルとサブディレクトリに対する読み取りおよび書き込みアクセス許可を、10001 という名前のグループプリンシパルに付与する ACE を追加します。 |
|
|
dir1 ディレクトリに作成された新しいファイルに対する読み取りおよび実行アクセス許可をユーザーグループ 10001 に付与します。 |
手順
NFSv4 ACL を設定してファイルやディレクトリへのアクセスを制御するには、次の手順を実行します。
-
ユーザーとグループの作成
この例では、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 -
NFSv4 ACL を設定するために必要なツールのインストール
これらのツールをインストール済みの場合は、この手順をスキップしてください。
# CentOS/RHEL/Alibaba Cloud Linux の場合 sudo yum -y install nfs4-acl-tools # Ubuntu/Debian の場合 sudo apt-get -y install nfs4-acl-tools -
players グループと adminis グループの ID の取得
/etc/group ファイルを開きます。 players グループと adminis グループの ID が表示されます。
players:x:19064:player adminis:x:19065:admini -
ファイルとディレクトリへのアクセスを制御するための NFSv4 ACL の設定
次のコマンドを実行して、操作を完了します。dir0 という名前のディレクトリを作成します。players グループに dir0 ディレクトリ内のすべてのファイルに対する読み取り専用権限を付与し、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 -
ACL 設定の検証
-
ユーザー admini が読み取りおよび書き込みアクセス許可を持っていることの確認
sudo su admini -c 'touch dir0/file'sudo su admini -c 'echo 123 > dir0/file' -
player ユーザーが読み取りおよび実行アクセス許可を持っていることの確認
-
ファイルを作成するアクセス許可があることを確認します (たとえば、dir0/file を作成する)。
-
次のコマンドを実行します:
sudo su player -c 'touch dir0/file' -
出力が次の情報と類似している場合、player ユーザーにはファイルを作成するアクセス許可がありません:
touch: cannot touch ‘dir0/file’: Permission denied
-
-
書き込みアクセス許可があることを確認します (たとえば、dir0/file に書き込む)。
-
次のコマンドを実行します:
sudo su player -c 'echo 456 >> dir0/file' -
出力が次の情報と類似している場合、player ユーザーには書き込みアクセス許可がありません:
bash: dir0/file: Permission denied
-
-
読み取りアクセス許可があることを確認します。
-
次のコマンドを実行します:
sudo su player -c 'cat dir0/file' -
出力が次の情報と類似している場合、player ユーザーには読み取りアクセス許可があります:
123
また、
sudo su player -c 'nfs4_getfacl dir0/file'コマンドを実行して、dir0/file ファイルに対するユーザーplayerのアクセス許可を表示することもできます。A::OWNER@:tTnNcCy A::GROUP@:tncy A::EVERYONE@:tncy A:g:19064:rxtncy A:g:19065:rwaxtTnNcCy -
-
-
ユーザー anonym にアクセス許可がないことの確認
-
anonym ユーザーに dir0 ディレクトリ内のファイルを表示するアクセス許可がないことを確認します。
-
次のコマンドを実行します:
sudo su anonym -c 'ls dir0' -
次のメッセージが返された場合、anonym ユーザーにはアクセス許可がないことを示します。
ls: cannot open directory dir0: Permission denied
-
-
ファイルの内容を表示できないことを確認します。
-
次のコマンドを実行します:
sudo su anonym -c 'cat dir0/file' -
出力が次の情報と類似している場合、anonym ユーザーには dir0 ディレクトリ内のファイルにアクセスするアクセス許可がありません。 ディレクトリ検索 (実行) アクセス許可が拒否されると、NFSv4 はこのエラーを返します:
cat: dir0/file: No such file or directory
-
-
fileにアクセスするアクセス許可がないことを確認します。-
次のコマンドを実行します:
sudo su anonym -c 'nfs4_getfacl dir0/file' -
出力が次の情報と類似している場合、anonym ユーザーにはファイルにアクセスするアクセス許可がありません。
Invalid filename: dir0/file
-
-
-
関連操作
次の方法でユーザーからアクセス許可を取り消すことができます。
NFSv4 ACL を使用する場合は、各ユーザーをグループに追加することを推奨します。 これにより、個々のユーザーではなく、ユーザーグループに対してアクセス許可を設定できます。 オブジェクトに対するアクセス許可をユーザーから取り消すには、そのオブジェクトへのアクセス許可が付与されているグループからユーザーを削除します。 たとえば、次のコマンドを実行して、admini ユーザーを adminis グループから削除し、adminis2 グループに追加できます。
-
adminis2 グループの作成
sudo groupadd adminis2 -
ユーザー admini を adminis グループから adminis2 グループに移動
sudo usermod -g adminis2 admini -
ユーザー ID のアクセス許可の照会
-
次のコマンドを実行します:
id admini -
次の情報が返されます:
uid=1057(admini) gid=1061(adminis2) groups=1061(adminis2)
-
-
admini ユーザーのアクセス許可の検証
-
dir0 ディレクトリにアクセスできないことの確認
-
次のコマンドを実行します:
sudo su admini -c 'ls dir0' -
出力が次の情報と類似している場合、admini ユーザーには dir0 ディレクトリにアクセスするアクセス許可がありません:
ls: cannot open directory dir0: Permission denied
-
-
admini ユーザーに dir0/file ファイルの内容を表示するアクセス許可がないことの確認
-
次のコマンドを実行します:
sudo su admini -c 'cat dir0/file' -
出力が次の情報と類似している場合、admini ユーザーには dir0 ディレクトリ内のファイルにアクセスするアクセス許可がありません。 ディレクトリ検索 (実行) アクセス許可が拒否されると、NFSv4 はこのエラーを返します:
cat: dir0/file: No such file or directory
-
-
admini ユーザーに dir0/file ファイルにアクセスするアクセス許可がないことの確認
-
次のコマンドを実行します:
sudo su admini -c 'nfs4_getfacl dir0/file' -
出力が次の情報と類似している場合、admini ユーザーには dir0 ディレクトリ内のファイルにアクセスするアクセス許可がありません。 ディレクトリ検索 (実行) アクセス許可が拒否されると、NFSv4 はこのエラーを返します:
Invalid filename: dir0/file
-
-