このトピックでは、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を設定する前に、特定のコマンドに慣れることをお勧めします。 次の表にコマンドを示します。
コマンド | 説明 |
| 指定されたファイルに適用されるACLを照会します。 |
| 指定されたファイルに対する書き込み権限をGROUP @ プリンシパルに付与するアクセス制御エントリ (ACE) を追加します。 |
| 指定したファイルに対する書き込み権限を付与するACEを、1000という名前のユーザープリンシパルに追加します。 |
| 指定したファイルに対する書き込み権限を付与するACEを、10001という名前のユーザープリンシパルに追加します。 |
| インタラクティブモードでACLを変更します。 |
| 指定したファイルに対する権限のリストをTXTファイルとして保存します。 |
| 権限のリストを含むTXTファイルを使用して、指定したファイルに対する権限を設定します。 |
| ファイル file1 に適用される ACE の権限を変更します。 |
| file1ファイルのACLをfile2ファイルにコピーします。 |
| 次のプリンシパル (OWNER @ 、GROUP @ 、およびEVERYONE @) を含むACEを除いて、file1ファイルに適用されるすべてのACEを削除します。 |
| dirディレクトリ内のファイルおよびサブディレクトリに対する読み取りおよび書き込み権限を付与するACEを、10001という名前のグループプリンシパルに追加します。 |
| dirディレクトリ内のファイルに対する権限を1005という名前のユーザープリンシパルに付与するACEを削除します。 |
| dir1ディレクトリ内の新しいファイルおよびサブディレクトリに対する読み取りおよび書き込み権限を付与するACEを、10001という名前のグループプリンシパルに追加します。 |
| dir1ディレクトリ内のすべての新しいファイルに対する読み取り、書き込み、および実行権限を付与するACEを、10001という名前のグループプリンシパルに追加します。 |
手順
NFSv4 ACLを設定してファイルとディレクトリへのアクセスを制御するには、次の手順を実行します。
ユーザーとグループを作成します。
この例では、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
NFSv4 ACLの設定に必要なツールをインストールします。
パッケージをインストールしている場合は、この手順を省略してください。
sudo yum -y install nfs4-acl-tools
プレイヤーとadminisグループのIDを取得します。
/etc/groupファイルを開きます。 プレイヤーとadminisグループのIDが表示されます。
players:x:19064:player adminis:x:19065:admini
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
ACLの設定を確認します。
次のコマンドを実行して、adminiユーザーに読み取りおよび書き込み権限があることを確認します。
sudo su admini -c 'touch dir0/file'
sudo su admini -c 'touch dir0/file'
プレーヤーユーザーに読み取り専用の権限があることを確認します。
プレーヤーユーザーに、dir0/fileファイルなどのファイルを作成する権限がないことを確認します。
以下のコマンドを実行します。
sudo su player -c 'touch dir0/file'
出力が次の情報に似ている場合、プレーヤーユーザーにはファイルを作成する権限がありません。
touch: cannot touch 'dir0/file': Permission denied
プレーヤーユーザーに書き込み権限 (dir0/fileファイルへの書き込み権限など) がないことを確認します。
以下のコマンドを実行します。
sudo su player -c 'echo 456 >> dir0/file'
出力が次の情報に似ている場合、プレーヤーユーザーには書き込み権限がありません。
bash: dir0/file: Permission denied
プレーヤーユーザーに読み取り権限があることを確認します。
以下のコマンドを実行します。
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
anonymユーザーにdir0ディレクトリに対する権限がないことを確認します。
匿名ユーザーにdir0ディレクトリ内のファイルを表示する権限がないことを確認します。
以下のコマンドを実行します。
sudo su anonym -c 'ls dir0'
出力が次の情報に似ている場合、anonymユーザーにはdir0ディレクトリに対する権限がありません。
ls: cannot open directory dir0: Permission denied
匿名ユーザーにファイルのコンテンツを表示する権限がないことを確認します。
以下のコマンドを実行します。
sudo su anonym -c 'cat dir0/file'
出力が次の情報に似ている場合、匿名ユーザーにはファイルの内容を表示する権限がありません。
cat: dir0/file: Permission denied
匿名ユーザーにファイルへのアクセス権限がないことを確認します。
以下のコマンドを実行します。
sudo su anonym -c 'nfs4_getfacl dir0/file'
出力が次の情報に似ている場合、匿名ユーザーにはファイルにアクセスする権限がありません。
Invalid filename: dir0/file
次のステップ
次の方法を使用して、ユーザーから権限を取り消すことができます。
NFSv4 ACLを使用する場合は、各ユーザーをグループに追加することをお勧めします。 これにより、個々のユーザーではなくユーザーグループの権限を設定できます。 ユーザーからオブジェクトに対する権限を取り消すには、オブジェクトに対する権限が付与されているグループからユーザーを削除します。 たとえば、次のコマンドを実行してadminisグループからadminiユーザーを削除し、そのユーザーをadminis2グループに追加できます。
次のコマンドを実行して、adminis2グループを作成します。
sudo groupadd adminis2
次のコマンドを実行して、adminisグループからadminiユーザーを削除し、adminis2グループに追加します。
sudo usermod -g adminis2 admini
ユーザーのID情報を照会します。
以下のコマンドを実行します。
id admini
次の情報が返されます。
uid=1057(admini) gid=1057(admini) groups=1061(adminis2)
adminiユーザーの権限を確認します。
adminiユーザーにアクセスする権限がないことを確認します。dir0ディレクトリに移動します。
以下のコマンドを実行します。
sudo su admini -c 'ls dir0'
出力が次のような情報である場合、adminiユーザーにはdir0ディレクトリにアクセスする権限がありません。
ls: cannot open directory dir0: Permission denied
のコンテンツを表示する権限がadminiユーザーにないことを確認します。dir0 /ファイルファイルを作成します。
以下のコマンドを実行します。
sudo su admini -c 'cat dir0/file'
出力が次の情報に似ている場合、adminiユーザーにはdir0/fileファイルの内容を表示する権限がありません。
cat: dir0/file: Permission denied
adminiユーザーにアクセスする権限がないことを確認します。dir0 /ファイルファイルを作成します。
以下のコマンドを実行します。
sudo su admini -c 'getfacl dir0/file'
出力が次のような情報である場合、adminiユーザーにはdir0/fileファイルにアクセスする権限がありません。
getfacl: dir0/file: Permission denied