2011年10月1日土曜日

パーミッションの復習と ACLの基礎


このエントリーをはてなブックマークに追加


理解してるつもりでもいざ使おうとするとアワワしてしまう権限の話。


パーミッションの復習

■ファイルの属性
u user
g group
o others

■ファイルの場合
1 x ファイルの実行が可能
2 w ファイルへの書込みが可能
4 r ファイルの読取りが可能

■ディレクトリの場合
1 x ディレクトリへの移動が可能
2 w ディレクトリへのファイル・ディレクトリの作成が可能
4 r ディレクトリの内容表示が可能

0は権限無し。

現場で詳細を忘れた場合は以下で思い出す。
# man chmod
# chmod 124 test

こういう指定も可能(ugo +- rwx の組合せ)
# chmod u+x file
# chmod g-r file


特殊ビット

以下が存在する。chmodでは4桁目として設定。

1000 sticky
2000 setgid
4000 setuid


■sticky

所有ユーザのみがファイルを削除できるようになる。主に/tmpのような777権限を持つ誰でもアクセスできるディレクトリに設定する。その他あまり使い道は無い。

■setuid, setgid

実行ファイルの場合、そのファイルを実行したユーザにかかわらず、プロセスの実行権限をファイルの所有者・グループに設定する。passwd, sudoコマンド等に使われる。非常に強力な効果がある。

ディレクトリに設定した場合、その中で作られるファイル・ディレクトリの所有者・グループがsetuid,setgidされた親ディレクトリのユーザ・グループに設定される。


パーミッション補足

rootユーザは全てのパーミッションを無視した操作が可能(実行権限 x 以外)


ACL

ACLは通常のUNIX(POSIX)パーミッションで表現できないアクセス権限を実現する。ほぼファイルサーバ用途。


ACLを使うためには

ACLはファイルシステムの機能なので使用するにはACL対応のext3,4,xfsなどを、ACLオプションを有効にしてマウントする必要がある。

# mount -o acl /dev/xxxx /mnt/yyyyyy


もしくは、tune2fsを使ってデフォルトのマウントオプションとして設定する。

■設定する
# tune2fs -o acl /dev/mapper/vg_f15console-lv_root

■設定を外す
# tune2fs -o ^acl /dev/mapper/vg_f15console-lv_root
* 「^」を付ける

■確認する
# tune2fs -l /dev/mapper/vg_f15console-lv_root
~~~省略~~~
Default mount options:    user_xattr acl
~~~省略~~~


ACLに基礎

ファイル・ディレクトリに対する権限の動作はパーミションと同じ。ugo + rwx で指定し特殊ビットは存在しない。その代わりumaskに相当するm[ask]が存在する。


ACLに関係するコマンド

以下のコマンドを使う。

getfacl ACLを確認する。
setfacl ACLを設定する。

その他、ACLが設定されているファイル・ディレクトリはls -lで確認するとパーミッションの最後に「+」が付加される。
-rw-rw-r--+ 1 root root     0 10月  1 10:07 aclfile
-rw-r--r--. 1 root root     0 10月  1 10:07 noacl


ACLを設定する

# setfacl -m permission file_or_dir

この permission 部分で権限を指定していく。-m permission を複数個つけると同時に権限を設定できる。書式は、

man setfaclより
setfacl ユーティリティは以下の ACL エントリ書式を認識する (分かりやすいように空白を挿入してある):

[d[efault]:] [u[ser]:]uid [:perms]
指名ユーザの許可。 uid が空の場合は、ファイル所有者の許可。

[d[efault]:] g[roup]:gid [:perms]
指名グループの許可。 gid が空の場合は、所有者グループの許可。

[d[efault]:] m[ask][:] [:perms]
実効権マスク。

[d[efault]:] o[ther][:] [:perms]
その他の許可。
最初の「d」はデフォルト権限を意味する。デフォルト権限はこれが設定されたディレクトリ配下で作成されたファイルに設定される権限を指定する。デフォルト権限と通常権限(d無しで設定される権限)は独立しており、デフォルト権限はディレクトリに対するアクセスを制御しない(あくまで配下で作られるfile/dirの権限を指定するだけ)

ユーザ testuser1にr権限を付ける
-m u:testuser1:r

ユーザ testuser2を明示的にアクセス禁止にする
-m u:testuser2:-

グループ testgroup1 にRWを与える
-m g:testgroup1:rw

配下で作られるファイルにグループtestgroup2へ実行権限を与える
-m d:g:testgroup2:x



ACL補足

root はACLを無視した操作が可能。

パーミションよりもACLが優先される
 ・777で設定されたファイルでもACLでアクセスできなければ操作できない。
 ・自分が所有者でもACLでアクセスできなければ操作できない。

0 件のコメント:

コメントを投稿