ユーザーとグループのためのアクセス制御リスト(ACL)とディスククォータの設定方法

アクセス制御リスト(ACLとしても知られています)は、Linuxカーネルの機能であり、通常のugo/rwx権限で指定されるファイルやディレクトリのアクセス権をより細かく定義することができます。

たとえば、標準のugo/rwx権限では、異なる個々のユーザーやグループに対して異なる権限を設定することはできません。ACLを使用すれば、このようなことを比較的簡単に行うことができます。この記事で見ていきましょう。

ACLを使用したファイルシステムの互換性の確認

ファイルシステムが現在ACLをサポートしていることを確認するには、aclオプションを使用してマウントされているかどうかを確認する必要があります。これを行うには、以下に示すようにext2/3/4ファイルシステム用のtune2fsを使用します。確認したいデバイスやファイルシステムに/dev/sda1を置き換えてください。

# tune2fs -l /dev/sda1 | grep "Default mount options:"

注意: XFSでは、アクセス制御リストがデフォルトでサポートされています。

次のext4ファイルシステムでは、/dev/xvda2にACLが有効になっていることがわかります。

# tune2fs -l /dev/xvda2 | grep "Default mount options:"
Check ACL Enabled on Linux Filesystem

上記のコマンドでファイルシステムがACLをサポートしてマウントされていない場合、おそらく/etc/fstabnoaclオプションが存在しているためです。

その場合は、それを削除し、ファイルシステムをアンマウントしてから再度マウントするか、/etc/fstabへの変更を保存した後にシステムを再起動してください。

LinuxでのACLの紹介

ACL(Access Control Lists)の動作を説明するために、developersというグループを使用し、ユーザーwalterwhitesaulgoodman(はい、私はBreaking Badのファンです!)を追加します。

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

続行する前に、両方のユーザーがdevelopersグループに追加されていることを確認しましょう。

# id walterwhite
# id saulgoodman
Find User ID in Linux

次に、/mntにディレクトリtestを作成し、その中にacl.txtという名前のファイルを作成します(/mnt/test/acl.txt)。

その後、グループ所有者をdevelopersに設定し、デフォルトのugo/rwx権限を再帰的に770に変更します(つまり、ファイルの所有者とグループ所有者の両方に読み取り、書き込み、実行権限が付与されます)。

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

予想通り、/mnt/test/acl.txtwalterwhiteまたはsaulgoodmanとして書き込むことができます。

# su - walterwhite
# echo "My name is Walter White" > /mnt/test/acl.txt
# exit
# su - saulgoodman
# echo "My name is Saul Goodman" >> /mnt/test/acl.txt
# exit
Verify ACL Rules on Users

これまでのところ問題ありません。ただし、developersグループに含まれていない別のユーザーに/mnt/test/acl.txtへの書き込みアクセスを許可する必要がある場合、問題が発生する可能性があります。

標準のugo/rwx権限では、新しいユーザーをdevelopersグループに追加する必要がありますが、これにより、グループが所有するすべてのオブジェクトに対して同じ権限が与えられます。これがACLが便利な場面です。

LinuxでACLを設定する

ACLには2種類あります:アクセスACL(ファイルまたはディレクトリに適用される)とデフォルト(オプション)ACL(ディレクトリにのみ適用される)。

デフォルトACLが設定されているディレクトリ内のファイルに独自のACLがない場合、それらは親ディレクトリのデフォルトACLを継承します。

ユーザーへの読み取りと書き込みアクセス権を付与しましょう。その前に、そのディレクトリ内の現在のACL設定を確認しましょう:

# getfacl /mnt/test/acl.txt

次に、ファイルのACLを変更し、ユーザー名の後にu:を使用し、読み取り/書き込み権限を示す:rwを使用します:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

そして、ファイルに再度getfaclを実行して比較します。次の画像は「Before」「After」を示しています:

# getfacl /mnt/test/acl.txt
Set ACL on Linux Users

次に、/mnt/testディレクトリに他のユーザーに実行許可を与える必要があります:

# chmod +x /mnt/test

ディレクトリの内容にアクセスするためには、通常のユーザーがそのディレクトリに実行許可を持つ必要があることに注意してください。

ユーザーは今、ファイルに書き込むことができるはずです。そのユーザーアカウントに切り替えて、次のコマンドを実行して確認してください:

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

ディレクトリにデフォルトACLを設定するには(内容が上書きされない限り継承される)、ルールの前にd:を追加し、ファイル名の代わりにディレクトリを指定します:

# setfacl -m d:o:r /mnt/test
# getfacl /mnt/test/

上記のACLは、所有者グループにいないユーザーが/mnt/testディレクトリの将来の内容に読み取りアクセス権を持つことを許可します。変更前と変更後のgetfacl /mnt/testの出力の違いに注意してください:

Set Default ACL to Linux Directory

特定のACLを削除するには、上記のコマンドで-m-xに置き換えます。例えば、

# setfacl -x d:o /mnt/test

あるいは、-bオプションを使用して、1度ですべてのACLを削除することもできます。

# setfacl -b /mnt/test

ACLの使用方法や例についての詳細は、第10章セクション2openSUSEセキュリティガイド(PDF形式で無料でダウンロードできます)を参照してください。

ユーザーとファイルシステムのLinuxディスククォータの設定

ストレージスペースも慎重に使用し、監視する必要があるリソースです。そのために、クォータを個々のユーザーまたはグループに設定できます。

これにより、特定のユーザーや特定のグループに許可されるディスク使用量が制限され、不注意な(または悪意のある)ユーザーによってディスクが容量いっぱいになることを心配する必要がありません。

ファイルシステムにクォータを有効にするために最初に行う必要があることは、/etc/fstabでusrquotaまたはgrpquota(それぞれユーザーおよびグループのクォータ)オプションを使用してマウントすることです。

例えば、/dev/vg00/vol_backupsにユーザーごとのクォータを有効にし、/dev/vg00/vol_projectsにグループごとのクォータを有効にしましょう。

各ファイルシステムを識別するためにUUIDが使用されていることに注意してください。

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

両方のファイルシステムをアンマウントして再マウントします。

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

その後、mountの出力にusrquotaおよびgrpquotaオプションが存在することを確認してください(以下のハイライトを参照):

# mount | grep vg00
Check Linux User Quota and Group Quota

最後に、次のコマンドを実行してクォータを初期化し、有効にします:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

それでは、前述したユーザー名とグループにクォータを割り当てましょう。後でquotaoffでクォータを無効にすることができます。

Linuxディスククォータの設定

まず、ユーザーgacanepaに対して/home/backupsでACLを設定し、そのディレクトリに読み取り、書き込み、実行の権限を与えます:

# setfacl -m u:gacanepa:rwx /home/backups/

次に、

# edquota -u gacanepa

で、ソフトlimit=900とハードlimit=1000のブロック(1ブロック1024バイト * 1000ブロック = 1024000バイト = 1 MB)のディスクスペース使用量を設定します。

また、このユーザーが作成できるファイルの数に対して、ソフト20とハード25の制限を設定することもできます。

上記のコマンドは、以前に述べた制限を設定できる一時ファイルでテキストエディタ($EDITOR)を起動します:

Linux Disk Quota For User

これらの設定により、ユーザーgacanepaがデフォルトの7日間の猶予期間内に900ブロックまたは20 inodeの制限に達した場合、警告が表示されます。

その後も(たとえばファイルを削除することで)クォータ超過の状況が解消されない場合、ソフトリミットがハードリミットとなり、このユーザーはストレージスペースをさらに使用したり、ファイルを作成したりすることができなくなります。

テストとして、ユーザーgacanepaに/home/backups内に空の2 MBのファイルtest1を作成しようとさせてみましょう。

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1
Verify Linux User Quota on Disk

書き込み操作ファイルがディスククォータを超過したため失敗したことがわかります。ディスクには最初の1000 KBしか書き込まれなかったため、この場合の結果はおそらく壊れたファイルになります。

同様に、開発者グループのためのACLを作成して、そのグループのメンバーに/home/projectsへのrwxアクセスを与えることができます。

# setfacl -m g:developers:rwx /home/projects/

そして、次のようにクォータ制限を設定できます:

# edquota -g developers

以前にユーザーgacanepaで行ったのと同じように。

寛容期間は、

# edquota -t

を実行することで秒、分、時間、日、週、月の任意の数に指定することができます。ブロック寛容期間とinode寛容期間の値を更新します。

ユーザーまたはグループベースで設定されるブロックまたはinodeの使用状況とは対照的に、寛容期間はシステム全体に設定されます。

クォータを報告するには、-u [user]または-g [group]を使用してクォータを報告するか、repquota -v [/path/to/filesystem]を使用してより詳細な(冗長な)フォーマットで報告できます。

もちろん、[user][group][/path/to/filesystem]を特定のユーザー/グループ名およびチェックしたいファイルシステムに置き換える必要があります。

サマリー

この記事では、ユーザーとグループのためにアクセス制御リストとディスククォータの設定方法を説明しました。両方を使用することで、アクセス許可とディスク使用量を効果的に管理できます。

次のテキストを日本語に翻訳します。翻訳されたテキストのみを返します。翻訳は言語の使用習慣に準拠する必要があります。 クォータミニハウツを参照して、クォータについて詳しく知りたい場合は、The Linux Documentation Projectを参照してください。

もちろん、質問にお答えするために私たちに頼ることもできます。以下のコメントフォームを使用して質問を送信していただければ、喜んで対応させていただきます。

Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/