2017.03.5

Debian ACL アクセス制御リスト

ACLパーミッション設定について

パーミッションの設定方法についての基本操作は、
Sambaのマニュアル - 3~5p - で学んだ。
sambaマニュアル:[pdf]

ACL(アクセス制御リスト)では、特定のユーザーやグループに対し、
より細かく柔軟にパーミッションを設定することができるようだ。
コマンドは、setfacl getfacl を使う。

ACLの設定について調べてみた。

■ ACLエントリーの書式

< 書 式 >

-- Options --

   配置順  : [-bkndRLPvh] [{-m|-x} acl-spec] [{-M|-X} acl_file]
 
   -b (--remove-all)  : 全ての拡張ACLを削除
   -k (--remove-default)  : デフォルトACLを削除    *2.デフォルトACL
   -n (--no-mask)  : 実効権マスクを再計算しない    *1.mask
   -d (--default)  : ディレクトリにデフォルトACLを加える
  -m (--modify)  : ファイルとディレクトリのACLを変更する
  -R  : 配下の全DIR FILESに対して再帰的に適用する
  -x (--remove)  : ACLエントリを指定して削除
  --set-file  : ファイルとディレクトリのACLを設定する
  --restore=file  : ディレクトリサブツリーのACL設定を復元する    *3.restore

e.g.

■ ACL設定の表示

< 書 式 >

-- Options --

   -a  : アクセス制御リストを表示
   -d  : デフォルトアクセス制御リストを表示
   -e  : 全ての実効権コメントを表示
   -R  : 全てのFILE DIRのACLを再帰的に一覧表示
   -u  : ユーザーとグループのIDを数字で表示

< 出力形式 >
  1. # file: someDIR/
  2. # owner: greenpen
  3. # group: miyagi
  4. # flags: -s-
  5. user::rwx
  6. user::hanako              #effective:r-x
  7. group::rwx                #effective:r-x
  8. group:tokyo:r-x
  9. mask::r-x
  10. other::r-x
  11. default:user::rwx
  12. default:user:hanako:rwx   #effective:r-x
  13. default:group::r-x
  14. default:mask::r-x
  15. default:other::---



*1:mask

○ マスクとは
    所有者以外に許可する最大のパーミッション値を設定すること。
コマンド umask は、新しくディレクトリやファイルを作成する際に
作用するデフォルト値。
umask の設定値は、フルアクセス値からの引き算の値で示される。
例えば、umask 0027 は、FILE:0666/DIR:0777 から、0027を引いた値、
FILE:0640/DIR:0750がデフォルトのパーミッションとなる。
    e.g.
 $ umask
 0022
 $ umask 0077
 $ mkdir ./someDIR
 $ ls -l ./someDIR
 drwx------ 2 User Group 4096 Jan 31 12:00 someDIR

○ ACLマスク
 ① 実効権(effective right)マスクの再計算
$ getfacl hoge.txt
 # file: hoge.txt
 # owner: greenpen
 # group: greenpen
 # user::rw-
 # user:hanako:rw-
 # group::rw-
 # other::r--
とされているhoge.txtファイルに対し新たに、
$ setfacl -m mask::r-- hoge.txt
とマスク値を設定すると、実効権が再計算される
$ getfacl hoge.txt
 # file: hoge.txt
 # owner: greenpen
 # group: greenpen
 # user::rw-
 # user:hanako:rw-     #effective:r--
 # group::rw-          #effective:r--
 # mask::r--
 # other::r--
hanako:rw-とgroup:rw-は、マスク値に制限され#effective:r--となる
 
 ② マスクの自動更新
次は、①とは逆のケース
$ getfacl hoge.txt
 # file: hoge.txt
 # owner: greenpen
 # group: greenpen
 # user::rw-
 # group::---
 # mask::r--
 # other::---
とマスク設定されているhoge.txtファイルに対し新たに、
$ setfacl -m user:hanako:rw- hoge.txt
とマスク値以上のエントリーすると、マスク値は自動修正される
$ getfacl hoge.txt
 # file: hoge.txt
 # owner: greenpen
 # group: greenpen
 # user::rw-
 # user:hanako:rw-
 # group::---
 # mask::rw-
 # other::---
 
 ③ -n (--no-mask) オプション
マスク自動修正の動作を受けないようにする
$ setfacl --no-mask -m user:hanako:rw- hoge.txt
$ getfacl hoge.txt
 # file: hoge.txt
 # owner: greenpen
 # group: greenpen
 # user::rw-
 # user:hanako:rw-     #effective:r--
 # group::---
 # mask::r--
 # other::---

*2:デフォルトACL

   ディレクトリには、デフォルトACLを設定できる。
   ディレクトリ直下に作成するサブディレクトリや
   ファイルに作用し、そのデフォルトエントリを継承する。


■ ACL設定の保持

*3:restore
 ACL設定のバックアップと復元には、以下の操作が有効。
 $ getfacle -R DIR > Acl_Backup
 $ setfacle --restore=Acl_Backup

 また、個々に書庫化やコピーを行う場合は注意を要する。

 ACL設定は、拡張属性として記録されている。
 そのため、例えば普通に書庫化やコピーを行っても
 ACL設定は引き継がれず失われてしまう。
 コマンドtarやcpでのバックアップには属性処理のオプションを用いる。

 tar option ACL属性の処理
 $ tar --acls -cf Archive.tar DIR01 DIR02   (書庫化)
 $ tar --acls -xf Archive.tar   (展開)
 *tar optionは記述順のこと

 cp option 指定した属性を保持する
 $ cp -r --preserve=all DIR Backup_DIR
 *all:保持でき得る全ての属性


Copyright(C) green-pen miyagi