Linux で ACL (アクセス制御リスト) を使用してファイル/ディレクトリを保護する
システム管理者としての私たちの最優先事項は、不正アクセスからデータを保護し安全に保つことです。私たちは皆、chmod、chown、chgrp などの便利な Linux コマンドを使用して設定した権限を知っています。ただし、これらのデフォルトの権限はセットにはいくつかの制限があり、場合によってはニーズどおりに動作しない場合があります。たとえば、同じディレクトリまたはファイル上で異なるユーザーに異なる権限セットを設定することはできません。そこでアクセス制御リスト (ACL) が実装されました。
たとえば、「tecmint1」、「tecmint2」、「tecmint3」という 3 人のユーザーがいるとします。共通のグループを持つそれぞれのグループを「ACL」と言います。ユーザー「tecmint1」は、「tecmint2」ユーザーのみが、「」が所有するファイルの読み取りとアクセスができるようにしたいと考えています。 tecmint1' であり、他の誰もそれにアクセスできるべきではありません。
ACL (アクセス制御リスト) を使用すると、同じトリックを行うことができます。これらの ACL を使用すると、ユーザー、グループ、およびユーザーのグループ リストに含まれていないユーザーの任意のグループに権限を付与できます。
注: Redhat 製品ドキュメントに従って、ext3 ファイル システムおよび NFS エクスポート ファイル システムに対する ACL サポートを提供します。
Linux システムでの ACL サポートを確認する方法
次に進む前に、現在のカーネルおよびマウントされたファイル システムで ACL がサポートされている必要があります。
1. カーネルの ACL サポートを確認する
次のコマンドを実行して、ファイル システムの ACL サポートと POSIX_ACL=Y オプションを確認します (Y の代わりに N がある場合は、カーネルを意味します) ACL をサポートしていないため、再コンパイルする必要があります)。
[root@linux ~]# grep -i acl /boot/config*
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y
2. 必要なパッケージを確認する
ACL の操作を開始する前に、必要なパッケージがインストールされていることを確認してください。以下は、yum または apt-get を使用してインストールする必要がある必須パッケージです。
[root@linux ~]# yum install nfs4-acl-tools acl libacl [on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl [on Debian based systems]
3. マウントされたファイル システムで ACL がサポートされていることを確認する
ここで、マウントされたファイルシステムが ACL オプションでマウントされているかどうかを確認します。以下に示すように、「mount」 コマンドを使用して同じことを確認できます。
[root@linux ~]# mount | grep -i root
/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)
ただし、この場合、デフォルトでは acl が表示されません。したがって、次に、acl オプションを使用して、マウントされたパーティションを再度マウントするオプションがあります。ただし、先に進む前に、パーティションが acl オプションでマウントされているかどうかを確認する別のオプションがあります。最近のシステムではデフォルトのマウント オプションと統合されている可能性があるためです。
[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl
Default mount options: user_xattr acl
上記の出力では、デフォルトのマウント オプションがすでに acl をサポートしていることがわかります。別のオプションは、以下に示すようにパーティションを再マウントすることです。
[root@linux ~]# mount -o remount,acl /
次に、以下のエントリを「/etc/fstab」ファイルに追加して永続化します。
/dev/mapper/fedora-root / ext4 defaults,acl 1 1
再度、パーティションを再マウントします。
[root@linux ~]# mount -o remount /
4.NFSサーバーの場合
NFS サーバーでは、NSF サーバーによってエクスポートされたファイル システムが ACL をサポートし、ACL が NFS クライアントによって読み取れる場合、ACL はクライアント システムによって利用されます。
NFS 共有で ACL を無効にするには、NFS サーバーの「/etc/exportfs」ファイルにオプション「no_acl」を追加する必要があります。 NSF クライアント側でこれを再度無効にするには、マウント時に「no_acl 」オプションを使用します。
Linux システムで ACL サポートを実装する方法
ACL には 2 つのタイプがあります。
- アクセス ACL: アクセス ACL は、ファイルまたはディレクトリに対するアクセス許可を付与するために使用されます。
- デフォルト ACL: デフォルト ACL は、特定のディレクトリのみにアクセス制御リストを付与/設定するために使用されます。
アクセス ACL とデフォルト ACL の違い:
- デフォルト ACL はディレクトリ レベルでのみ使用できます。
- サブディレクトリまたはそのディレクトリ内に作成されたファイルは、その親ディレクトリから ACL を継承します。一方、ファイルはデフォルト ACL をアクセス ACL として継承します。
- デフォルト ACL の設定には「–d 」を使用します。デフォルト ACL はオプションです。
デフォルトACLを設定する前に
特定のファイルまたはディレクトリのデフォルト ACL を確認するには、「getfacl」 コマンドを使用します。以下の例では、getfacl を使用してフォルダ「Music」のデフォルト ACL を取得します。
[root@linux ~]# getfacl Music/
file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-
デフォルトACLの設定後
特定のファイルまたはディレクトリにデフォルトの ACL を設定するには、「setfacl」 コマンドを使用します。以下の例では、setfacl コマンドは、フォルダ「Music」に新しい ACL (読み取りと実行)を設定します。強い>。
[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x
新しい ACL を設定する方法
ファイルまたはディレクトリの設定または変更には、「setfacl」 コマンドを使用します。たとえば、ユーザー「tecmint1」 に読み取りと書き込み権限を付与します。
setfacl -m u:tecmint1:rw /tecmint1/example
ACL を表示する方法
ファイルまたはディレクトリの ACL を表示するには、「getfacl」コマンドを使用します。たとえば、「/tecmint1/example」の ACL を表示するには、以下のコマンドを使用します。
getfacl /tecmint1/example
file: tecmint1/example/
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---
ACLを削除する方法
ファイル/ディレクトリから ACL を削除するには、以下に示すように x および b オプションを使用します。
setfacl -x ACL file/directory # remove only specified ACL from file/directory.
setfacl -b file/directory #removing all ACL from file/direcoty
次のシナリオに ACL を実装してみましょう。
2 人のユーザー (tecmint1 と tecmint2)。どちらも「acl」という名前の共通のセカンダリ グループを持っています。 「tecmint1」が所有するディレクトリを 1 つ作成し、そのディレクトリに対する読み取りと実行権限をユーザー「tecmint2<」に提供します。」。
ステップ 1: 2 人のユーザーを作成し、両方のユーザーのパスワードを削除します
[root@linux ~]# for user in tecmint1 tecmint2
> do
> useradd $user
> passwd -d $user
> done
Removing password for user tecmint1.
passwd: Success
Removing password for user tecmint2.
passwd: Success
ステップ 2: グループとユーザーをセカンダリ グループに作成します。
[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2
ステップ 3: ディレクトリ /tecmint を作成し、所有権を tecmint1 に変更します。
[root@linux ~]# mkdir /tecmint1
[root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/
drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1
getfacl: Removing leading '/' from absolute path names
file: tecmint1
owner: tecmint1
group: root
user::rwx
group::r-x
other::r-x
ステップ 4: tecmint1 でログインし、 /tecmint フォルダにディレクトリを作成します。
[tecmint@linux ~]$ su - tecmint1
Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/
[tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll
total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami
tecmint1
ステップ 5: 次に、「setfacl」を使用して ACL を設定します。これにより、「tecmint1」にすべての rwx 権限が付与されます。 「tecmint2」には「サンプル」フォルダに対する読み取り権限のみが与えられ、その他には権限がありません。
setfacl -m u:tecmint1:rwx example/
setfacl -m u:tecmint2:r-- example/
setfacl -m other:--- example/
getfacl example/
file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---
ステップ 6: 次に、別の端末で他のユーザー、つまり「tecmint2」でログインし、ディレクトリを「/tecmint1」に変更します。次に、「ls」コマンドを使用してコンテンツを表示し、ディレクトリを変更して、以下のような違いを確認してください。
[tecmint@linux ~]$ su - tecmint2
Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ ls -lR example/
example/:
total 0
[tecmint2@linux tecmint1]$ cd example/
-bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/
file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---
ステップ 7: ここで、「example」フォルダの「tecmint2」に「実行」権限を付与し、<効果を確認するには、strong>'cd' コマンドを使用します。現在、「tecmint2」にはディレクトリを表示および変更する権限がありますが、書き込み権限はありません。
[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/
[tecmint1@linux tecmint1]$ getfacl example/
file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[tecmint@linux ~]$ su - tecmint2
Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ cd example/
[tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test
mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test
touch: cannot touch ‘test’: Permission denied
注: ACL を実装すると、以下のように「ls –l」出力に追加の「+」記号が表示されます。
[root@linux tecmint1]# ll
total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example
参考リンク
ACL のドキュメント