このトピックでは、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 を設定してファイルやディレクトリへのアクセスを制御するには、次の手順を実行します。
ユーザーとグループの作成
この例では、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 anonymPOSIX 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::---ACL 設定の確認
admin ユーザーに読み取りおよび書き込み権限があることを確認
sudo su admini -c 'touch dir0/file'sudo su admini -c 'echo 123 > dir0/file'player ユーザーに読み取り専用権限があることを確認
file を作成する権限がないことを確認します。
たとえば、dir0 ディレクトリに file という名前のファイルを作成しようとします。
次のコマンドを実行します。
sudo su player -c 'touch dir0/file'次のような情報が出力された場合、player ユーザーには file ファイルを作成する権限がありません。
touch: cannot touch ‘dir0/file’: Permission denied
dir0/file ファイルの内容を確認します。
次のコマンドを実行します。
sudo su player -c 'cat dir0/file'次のような情報が出力された場合、player ユーザーには dir0/file ファイルの内容を表示する権限があります。
123
書き込み権限を確認します。
次のコマンドを実行します。
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::---
匿名ユーザーに権限がないことを確認
dir0 ディレクトリ内のファイルを表示する権限がないことを確認します。
次のコマンドを実行します。
sudo su anonym -c 'ls dir0'次のメッセージが返された場合、匿名ユーザーには必要なアクセス権限がありません。
ls: cannot open directory dir0: Permission denied
ファイルを読み取る権限がないことを確認します。
次のコマンドを実行します。
sudo su anonym -c 'cat dir0/file'次のような情報が出力された場合、anonym ユーザーにはファイルの内容を表示する権限がありません。
cat: dir0/file: Permission denied
ファイルにアクセスする権限がないことを確認します。
次のコマンドを実行します。
sudo su anonym -c 'getfacl dir0/file'次のような情報が出力された場合、anonym ユーザーにはファイルにアクセスする権限がありません。
getfacl: dir0/file: Permission denied
関連操作
次のメソッドを使用して、ユーザーから権限を取り消すことができます。
NFSv4 ACL を使用する場合は、各ユーザーをグループに追加することを推奨します。これにより、個別のユーザーではなくグループに対して権限を設定できます。オブジェクトに対するユーザーの権限を取り消すには、そのオブジェクトに対する権限が付与されているグループからユーザーを削除します。たとえば、次のコマンドは admini ユーザーを adminis グループから削除し、adminis2 グループに追加します。
adminis2 グループを作成します。
sudo groupadd adminis2次のコマンドを実行して、admini ユーザーを adminis グループから削除し、adminis2 グループに追加します。
sudo usermod -g adminis2 adminiユーザー ID の権限を照会します。
次のコマンドを実行します。
id admini次の情報が返されます。
uid=1057(admini) gid=1057(admini) 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/file ファイルの内容を表示する権限がありません。
cat: dir0/file: Permission denied
admini ユーザーに dir0/file ファイルにアクセスする権限がないことを確認します。
次のコマンドを実行します。
sudo su admini -c 'getfacl dir0/file'次のような情報が出力された場合、admini ユーザーには dir0/file ファイルにアクセスする権限がありません。
getfacl: dir0/file: Permission denied