(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Linux】chmodと拡張ACLを操作するsetfaclの違い

スポンサーリンク

はじめに

ファイルやディレクトリの権限を操作するコマンドchmodと似たコマンドにsetfacl(set file access control lists)があります。本記事ではコマンドの違いを実例付きで分かりやすく説明しました。

環境情報
  • RHEL 7.5

chmodはオーナーとグループでしか制御できない

以下の記事にもある通りでchmodでは読み取り(r) 書き込み(w) 実行(x)をファイルオーナーとファイルグループに対して指定します。

一方で「rootユーザが作ったファイルを一時的に特定個人ユーザに書き込み権限を与えたい」と思った際にchmodの世界で考えると

  • オーナーをそのユーザにする
  • グループをそのユーザの属するグループにする
  • Otherに書き込み権限を与える

といった本来実施したい効用以外が発生する操作をする必要があります。

拡張ACL

setfaclでは特定のユーザーやグループに対してファイルごとのアクセス制限(拡張ACL)が可能です。

コマンドは以下のパスに存在し

$ which setfacl
/usr/bin/setfacl

一般ユーザでも利用可能です。

$ ls -l /usr/bin/setfacl
-rwxr-xr-x. 1 root root 37608  xx /usr/bin/setfacl

詳細は以下で確認できますが

$ man setfacl

今回は上記で述べた「rootユーザが作成したファイルを特定ユーザtestuserにのみ書き込み権限を与えるハンズオンを記載します。

特定ユーザにのみ権限を付与する流れ

rootユーザがファイルを作成すると以下のような権限のため

# touch hoge
# ls -l
..
-rw-r--r-- 1 root     root             0 .. hoge

個人ユーザであれば読み取りはOKで書き込みはNGです。

$ cat hoge
$ echo a > hoge
-bash: hoge: Permission denied

拡張ACLの権限確認はgetfacl hogeでできます。操作前の実行結果は以下。

# file: hoge
# owner: root
# group: root
user::rw-
group::r--
other::r--

ここでtestuserに書き込み権限を与える設定は以下で実施すると

# setfacl -m u:testuser:w hoge

ls -lにて+マークが付与され

$ ls -l
...
-rw-rw-r--+ 1 root     root             0 .. hoge

testuserに書き込み権限が付与されていることが分かります。

$ getfacl hoge
# file: hoge
# owner: root
# group: root
user::rw-
user:testuser:-w-
group::r--
mask::rw-
other::r--

一点注意で、上記設定を入れるとtestuserは本来持っていた読み取り権限がなくなってしまいます。拡張ACLの設定が優先されることが原因のためsetfacl -m u:testuser:rw hogeと実施すれば読み取り権限も付与できます。

終わりに

以下のようにbオプションを用いれば設定した拡張ACLは全て削除できます。

# setfacl -b hoge
# ls -l
...
-rw-r--r-- 1 root     root             .. hoge

chmodでできない細かい制御を入れる際には重宝するコマンドなので、覚えておくと役立つと思います。

以上、ご参考になれば幸いです。