差分

移動先: 案内検索

ユーザ権限とアクセス制御

170 バイト追加, 2015年7月27日 (月) 17:20
/* ACL */
Access Control Lists(ACL)は元々のUNIXにはないアクセス制御方式で、その仕様に関してはPOSIXで定義されています。Linuxカーネル2.6以降で採用されています。Linuxカーネル2.6以降ではLinuxの主要ファイルシステムで利用可能です。
 
UNIXでは自分以外のユーザにアクセスを許可する場合は、グループに許可するか、それともすべてのユーザに許可するかの大まかな条件でアクセス制御をしています。一方、ACLではアクセス許可を特定のユーザの単位で、あるいはグループ単位で設定できます。ACLの導入により、これまでのUNIXのアクセス制御よりも複雑な設定をすることが可能になります。
 
次のようなファイルがあるとします。
 
<pre class="bash">
$touch foo.txt
$ ls -l foo.txt
-rw-rw-r-- 1 hironobu hironobu 0 Aug 31 08:15 foo.txt
</pre>
 
コマンドgetfaclを使ってパーミッションを表示すると次のようになります。
 
<pre class="bash">
$ getfacl foo.txt
# file: foo.txt
group::rw-
other::r--
</pre>
 
次に自分以外のユーザが読み書きできないようにしてみます。
 
<pre class="bash">
$ chmod go-rw foo.txt
$ ls -l foo.txt
-rw------- 1 hironobu hironobu 0 Aug 31 08:15 foo.txt
</pre>
 
この状態でwww-dataユーザのみにfoo.txtの読み込みを許諾するとなると、グループを使う方法だとwww-dataとhironobuだけのグループを作り、そのグループを設定し、グループの読み込みを許可する、といったことをしなければなりません。しかしACLの機能を使えばwww-dataのみに読み込みを許諾することができます。属性を設定にはコマンドsetfaclを使用します。
 
=== ACLの設定 ===
コマンドsetfaclはaclをセットするためのものです。ユーザwww-dataに"r"だけ許可をしてみます。
 
<pre class="bash">
$ setfacl -m user:www-data:r foo.txt
</pre>
 
ではコマンドgetfaclを使って、どう変化したか見てみましょう。
 
<pre class="bash">
$ getfacl foo.txt
# file: foo.txt
mask::r--
other::---
</pre>
先ほどの内容から2点変わっているのがわかるはずです。まず1点はuserの表示が増えたこと、そしてmaskという新しい項目ができたことです。maskは所有するユーザ以外に与えることのできる最大限の権限です。この場合はmaskに対して指定していないのでデフォルトの"r"が設定されています。
先ほどの内容から2点変わっているのがわかるはずです。まず1点はuserの表示が増えたこと、そしてmaskという新しい項目ができたことです。maskは所有するユーザ以外に与えることのできる最大限の権限です。この場合はmaskに対して指定していないのでデフォルトの"r"が設定されています。
ここではwww-dataのみですが、複数のユーザに対しても同様に個別の設定をすることができます。
 
ここではユーザのみに関して説明していますが、グループに対しても複数のグループを割り当てたりすることが可能です。
 
さらに詳しく知るためには
さて、この状態でls -lでファイルのパーミッションの状況をみてみましょう。
 
<pre class="bash">
% ls -l foo.txt
-rw-r-----+ 1 hironobu hironobu 0 Aug 31 08:15 foo.txt
</pre>
 
最後に"+"と表示されているのは、ACLが設定されているということを意味しています。