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


アクセス制御リスト(ACLとも呼ばれます)はLinuxカーネルの機能であり、通常のugo/rwxアクセス許可で指定されているものよりもファイルとディレクトリに対してよりきめ細かいアクセス権を定義できます。

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

ACLとのファイルシステムの互換性の確認

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

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

注:XFSでは、アクセス制御リストはそのままでサポートされます。

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

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

上記のコマンドが、ファイルシステムがACLをサポートしてマウントされていることを示していない場合は、/ etc/fstabにnoaclオプションが存在することが原因である可能性があります。

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

LinuxでのACLの紹介

ACLがどのように機能するかを説明するために、developersという名前のグループを使用し、それにユーザーwalterwhiteとsaulgoodman(はい、私はブレイキングバッドのファンです!)を追加します。

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

先に進む前に、両方のユーザーが開発者グループに追加されていることを確認しましょう。

# id walterwhite
# id saulgoodman

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

次に、グループ所有者を開発者に設定し、デフォルトのugo/rwxアクセス許可を再帰的に770に変更します(したがって、ファイルの所有者とグループ所有者の両方に付与された読み取り、書き込み、および実行のアクセス許可を付与します)。

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

予想どおり、walterwhiteまたはsaulgoodmanとして/mnt/test/acl.txtに書き込むことができます。

# 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

ここまでは順調ですね。ただし、developersグループに属していない別のユーザーに/mnt/test/acl.txtへの書き込みアクセスを許可する必要がある場合、すぐに問題が発生します。

標準のugo/rwx権限では、新しいユーザーを開発者グループに追加する必要がありますが、それにより、グループが所有するすべてのオブジェクトに対して同じ権限が付与されます。それがまさにACLが役立つところです。

LinuxでのACLの設定

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

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

ユーザーgacanepaに/mnt/test/acl.txtへの読み取りおよび書き込みアクセスを許可しましょう。その前に、そのディレクトリの現在のACL設定を次のように見てみましょう。

# getfacl /mnt/test/acl.txt

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

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

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

# getfacl /mnt/test/acl.txt

次に、/ mnt/testディレクトリに対する実行権限を他の人に与える必要があります。

# chmod +x /mnt/test

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

これで、ユーザーgacanepaがファイルに書き込めるようになります。そのユーザーアカウントに切り替え、次のコマンドを実行して確認します。

# 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の出力の違いに注意してください。

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

# setfacl -x d:o /mnt/test

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

# setfacl -b /mnt/test

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

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

ストレージスペースは、注意深く使用および監視する必要があるもう1つのリソースです。これを行うには、個々のユーザーまたはグループのいずれかに対して、ファイルシステムベースでクォータを設定できます。

したがって、特定のユーザーまたは特定のグループに許可されるディスク使用量に制限が設定され、不注意な(または意図しない)ユーザーによってディスクがいっぱいになることはありませんのでご安心ください。

ファイルシステムでクォータを有効にするために最初に行う必要があるのは、/ 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 

次に、usrquotaオプションとgrpquotaオプションがmountの出力に存在することを確認します(以下で強調表示されているものを参照)。

# mount | grep vg00

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

# 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

ソフト制限u003d 900、ハード制限u003d 1000ブロック(1024バイト/ブロック* 1000ブロックu003d 1024000バイトu003d 1 MB)のディスク容量を使用します。

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

上記のコマンドは、前述の制限を設定できる一時ファイルを使用してテキストエディタ()を起動します。

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

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

テストするために、ユーザーgacanepaに/ home/backups内にtest1という名前の空の2MBファイルを作成してもらいましょう。

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1

ご覧のとおり、ディスククォータを超えたため、書き込み操作ファイルは失敗します。最初の1000KBのみがディスクに書き込まれるため、この場合の結果はファイルが破損している可能性があります。

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

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

そして、次のコマンドでクォータ制限を設定します。

# edquota -g developers

以前にユーザーgacanepaで行ったように。

猶予期間は、実行することにより、秒、分、時間、日、週、または月の任意の数に指定できます。

# edquota -t

ブロック猶予期間とiノード猶予期間の値を更新します。

ブロックまたはiノードの使用(ユーザーまたはグループベースで設定される)とは対照的に、猶予期間はシステム全体で設定されます。

クォータをレポートするには、クォータ -u [user] または quota -g [group] を使用してクイックリストを表示するか repquota -v [/ path/to/filesystem] は、より詳細な(詳細な)適切にフォーマットされたレポートを表示します。

もちろん、 [user] [group] 、および [/ path/to/filesystem] を特定のユーザー/に置き換えることをお勧めします。確認したいグループ名とファイルシステム。

概要

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

クォータについて詳しく知りたい場合は、Linux DocumentationProjectのQuotaMini-HowToを参照してください。

言うまでもなく、質問にお答えすることもできます。以下のコメントフォームを使用して送信するだけで、喜んでご覧いただけます。