LoginSignup
2
1

More than 1 year has passed since last update.

アクセス制御リスト(ACL)の使い方

Last updated at Posted at 2022-10-28

最新版は、以下に記載しました。
https://hana-shin.hatenablog.com/entry/2022/05/31/221357

#1 アクセス制御リスト(ACL)とは?
ファイルやディレクトリに対するアクセス制御方式には、以下の方式があります。
・任意アクセス制御(DAC):パミッション(rwx)による方式、ACL(アクセス制御リスト)
・強制アクセス制御(MAC):SELinux,AppArmor,Smack

本記事では、ACLで使うgetfacl,setfaclコマンドの使い方を説明します。
・setfacl:ファイルやディレクトリにACLを設定する
・getfacl:ファイルやディレクトリに設定されたACLを取得する

ACLは、パミッションによるアクセス方式に比べ、粒度の細かいアクセス制御ができます。

#2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンのOS版数は以下のとりです。

OS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

[root@server ~]# uname -r
3.10.0-957.el7.x86_64

#3 インストール方法
aclパッケージをインストールします。

インストール
[root@server ~]# yum install acl

aclパッケージに含まれているgetfacl,setfaclコマンドの版数を確認します。

版数確認
[root@server ~]# getfacl -v
getfacl 2.2.51
[root@server ~]# setfacl -v
setfacl 2.2.51

#4 ACLの設定、削除方法(ユーザ編)
ユーザに対して、ACLの設定、削除をおこなってみます。

##4.1 事前準備
テスト用に使うユーザ(usere1,user2)とファイルを作成します。

user1の作成
[root@server ~]# useradd user1
user2の作成
[root@server ~]# useradd user2
ファイルの作成
[root@server ~]# touch /tmp/test.txt

##4.2 ファイルの初期状態確認
ファイル所有者、グループはともにrootであることがわかります。

パミッションの確認
[root@server ~]# ls -l /tmp/test.txt
-rw-r--r--. 1 root root 2  2月 20 17:52 /tmp/test.txt

上記で説明したファイルのパミッションが設定されていますが、
ACLはまだ設定されていないことがわかります。

初期状態のACL確認
[root@server ~]# getfacl /tmp/test.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

##4.3 設定方法(-m)
test.txtuser1の拡張ACL(リード、ライト)を設定します。

user1にリード、ライト権を設定
[root@server ~]# setfacl -m u:user1:rw /tmp/test.txt

test.txtuser2の拡張ACL(リード)を設定します。

user2にリード権を設定
[root@server ~]# setfacl -m u:user2:r /tmp/test.txt

ACLを設定すると、パミッションの右端に+が表示されます。

パミッションの確認
[root@server ~]# ls -l /tmp/test.txt
-rw-rw----+ 1 root root 0  1月  8 21:10 /tmp/test.tx

test.txtのACLを確認します。
test.txtに対して、各ユーザは次のことができることがわかります。
user1はリード・ライト
user2はリードのみ

ACLの確認
[root@server ~]# getfacl /tmp/test.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/test.txt
# owner: root
# group: root
user::rw-
user:user1:rw-
user:user2:r--
group::r--
mask::rw-
other::---

##4.4 削除方法(-x)

test.txtからuser1の拡張ACLを削除します。

ACLの削除
[root@server ~]# setfacl -x u:user1 /tmp/test.txt

test.txtのACLを確認します。
test.txtからuser1の拡張ACLが削除されたことがわかります。

ACLの確認
[root@server ~]# getfacl /tmp/test.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/test.txt
# owner: root
# group: root
user::rw-
user:user2:r--
group::r--
mask::r--
other::---

test.txtからuser2の拡張ACLを削除します。

ACLの削除
[root@server ~]# setfacl -x u:user2 /tmp/test.txt

test.txtのACLを確認します。
test.txtからuser1user2の拡張ACLが削除されたことがわかります。

ACLの確認
[root@server ~]# getfacl /tmp/test.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/test.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::---

#5 ACLの設定、削除方法(グループ編)
グループに対して、ACLの設定、削除をおこなってみます。

##5.1 事前準備

テスト用ファイルの作成
[root@server ~]# touch /tmp/test.txt

テスト用に使うグループ(staff)を作成します。

テスト用グループ作成
[root@server ~]# groupadd staff

作成したグループを確認します。

追加したグループの確認
[root@server ~]# getent group|grep staff
staff:x:1009:

##5.2 設定方法(-m)
test.txtに対して、staffグループの拡張ACLを設定します。

グループにrwxを設定
[root@server ~]# setfacl -m g:staff:rw /tmp/test.txt

staffグループは、test.txtに対してリード・ライトができることがわかります。

ACLの確認
[root@server ~]# getfacl /tmp/test.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/test.txt
# owner: root
# group: root
user::rw-
group::r--
group:staff:rw-
mask::rw-
other::r--

##5.3 削除方法(-x)

グループのACL削除
[root@server ~]# setfacl -x g:staff /tmp/test.txt
ACL確認
[root@server ~]# getfacl /tmp/test.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/test.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--

#6 ACLの一括削除方法(-b)
test.txtに設定されている拡張ACLを確認します。
user1,user2の拡張ACL(★印)が設定されていることがわかります。

ACLの確認
[root@server ~]# getfacl /tmp/test.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/test.txt
# owner: root
# group: root
user::rw-
user:user1:rw- ★
user:user2:r-- ★
group::r--
mask::rw-
other::---

拡張ACLを一括削除してみます。

ACLの一括削除
[root@server ~]# setfacl -b /tmp/test.txt

user1,user2の拡張ACLが削除されたことがわかります。

ACLの確認
[root@server ~]# getfacl /tmp/test.txt
getfacl: Removing leading '/' from absolute path names
# file: tmp/test.txt
# owner: root
# group: root
user::rw-
group::r--
other::---

#7 再帰的に表示する方法(-R)
ファイルやディレクトリのACLを再帰的に表示してみます。
まず、テスト用に使うディレクトリを作成します。

テスト用ディレクトの作成
[root@server ~]# mkdir -p dir1/dir2

dir1,dir2のACLを確認します。
dir1,dir2のACLが表示されていることがわかります。

dir1に対する再帰的な表示
[root@server ~]# getfacl -R dir1/
# file: dir1/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

# file: dir1//dir2
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

#8 ファイルを使って拡張ACLを設定する方法(-M)
拡張ACLを定義したファイルを作成します。

ファイル作成
[root@server ~]# vi acl.txt
[root@server ~]# cat acl.txt
user:user1:rw
user:user2:rwx

file.txtのACLを確認します。
拡張ACLは、まだ設定されていないことがわかります。

ACLの確認
[root@server ~]# getfacl file.txt
# file: file.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

file.txtに拡張ACLを設定します。

[root@server ~]# setfacl -M acl.txt file.txt

file.txtに設定されているACLを確認します。
user1user2の拡張ACLが設定されたことがわかります。

ACLの確認
[root@server ~]# getfacl file.txt
# file: file.txt
# owner: root
# group: root
user::rw-
user:user1:rw-
user:user2:rwx
group::r--
mask::rwx
other::r--

#9 デフォルトACLを設定、削除する方法
dir1ディレクトリに対し、デフォルトACLとして、user1にrwの許可を与える。

デフォルトACLの設定
[root@server ~]# setfacl -m d:u:user1:rw dir1/

dir1に設定したデフォルトACLを確認します。
デフォルトACLが設定されたことがわかります。

デフォルトACLの確認
[root@server ~]# getfacl dir1/
# file: dir1/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:user1:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

ディレクトリ(dir1)に設定されたデフォルトACLを削除します。

デフォルトACLの削除
[root@server ~]# setfacl -k dir1

dir1に設定したデフォルトACLを確認します。

デフォルトACLの確認
[root@server ~]# getfacl dir1/
# file: dir1/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

#10 実験
file.txtに対して、拡張ACLを設定します。
file.txtに対して、user1はリード・ライト、user2にはリードを許可します。

拡張ACL設定
[root@server ~]# setfacl -m u:user1:rw /tmp/file.txt
[root@server ~]# setfacl -m u:user2:r /tmp/file.txt

user1file.txtに対するリード・ライトを確認します。
file.txtに対して、リード・ライトができることがわかります。

user1の確認
[root@server ~]# su - user1
[user1@server ~]$ echo "12345" > /tmp/file.txt
[user1@server ~]$ cat /tmp/file.txt
12345

user2に切り替えます。

user2に切り替え
[user1@server ~]$ exit
ログアウト
[root@server ~]# su - user2

user2file.txtに対するリード・ライトを確認します。
file.txtのリードはできますが、ライトができないことがわかります。

user2の確認
[user2@server ~]$ echo "12345" > /tmp/file.txt
-bash: /tmp/file.txt: 許可がありません
[user2@server ~]$ cat /tmp/file.txt
12345

#Z 参考情報
徹底攻略LPIC Level3 303教科書+問題集[Version 2.0]対応
【 setfacl 】コマンド(基礎編)――ファイルのアクセス制御リスト(ACL)を設定/削除する
【 setfacl 】コマンド(応用編その1)――デフォルトのアクセス制御リスト(ACL)を設定する

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1