ウェブサイト検索

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


アクセス コントロール リスト (ACL とも呼ばれる) は、通常のugo/rwx 権限で指定されるアクセス権よりも詳細なファイルやディレクトリのアクセス権を定義できる Linux カーネルの機能です。

たとえば、標準の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 がどのように機能するかを説明するために、開発者という名前のグループを使用し、 ユーザーウォルターホワイトソールグッドマンを追加します (はい、私はブレイキング・バッドのファンです。 )それに。:

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

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

id walterwhite
id saulgoodman

/mnttest というディレクトリを作成し、その中に 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

予想どおり、/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

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

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

Linux での ACL の設定

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

デフォルト 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

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

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

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

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

それまでに割り当て超過の状況が解消されなかった場合(ファイルの削除など)、ソフト制限がハード制限になり、このユーザーはそれ以上のストレージスペースを使用したり、追加のストレージスペースを作成したりできなくなります。ファイル。

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

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

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

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

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

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

edquota -g developers

先ほどユーザー gacanepa の場合と同様に。

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

edquota -t

そしてブロック猶予期間と Inode 猶予期間の値を更新します。

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

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

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

まとめ

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

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

もちろん、ご質問にもお答えいたします。以下のコメントフォームを使用して送信してください。喜んで拝見させていただきます。