Solaris のシステム管理

アクセス制御リスト (ACL)

従来の UNIX ファイル保護機能は、所有者、グループ、その他という 3 つのユーザークラスに読み取り権、書き込み権、実行権を提供します。ACL を使用すると、所有者、所有者のグループ、その他、特定のユーザーとグループのファイルアクセス権を定義し、カテゴリごとにデフォルトのアクセス権を定義できるので、ファイルのセキュリティが高まります。

たとえば、グループ内の誰でもファイルを読み取れるようにしたいと仮定します。その場合は、そのファイルにグループ読み取り権を与えることになります。次に、グループのうち 1 人しかそのファイルに書き込めないようにしたいと仮定します。標準の UNIX では、このように設定できません。しかし、そのファイルの ACL を設定すると、グループのうち 1 人だけにファイルのグループ書き込み権を与えることができます。

表 51-8 に、ファイルやディレクトリに使用できる ACL コマンドを示します。

表 51-8 ACL コマンド

コマンド 

説明 

setfacl(1)

ACL エントリを設定、追加、変更、削除する 

getfacl(1)

ACL エントリを表示する 

ACL エントリはファイルの ACL を定義する手段であり、ACL コマンドにより設定します。ACL エントリは、次のようにコロンで区切ったフィールドからなっています。

entry_type:[uid|gid]:perms

エントリの意味

entry_type

ファイルのアクセス権を設定する ACL エントリのタイプ。たとえば、entry_typeuser (ファイルの所有者) または mask (ACL マスク) に設定できる

uid

ユーザー名または識別番号 

gid

グループ名または識別番号 

perms

entry_type に設定するアクセス権を表す。perms は、記号文字 rwx または番号 (chmod コマンドに使用するのと同じアクセス権番号) で指定できる

次の例に、ユーザー nathan の読み取り権および書き取り権を設定する ACL エントリを示します。

user:nathan:rw-

注意 - 注意 -

ACL などの UFS ファイルシステム属性は UFS ファイルシステムだけでサポートされます。つまり、/tmp ディレクトリ (通常は、TMPFS ファイルシステムとしてマウントされている) で ACL エントリを持つファイルを復元またはコピーすると、その ACL エントリは失われます。UFS ファイルの一時的な格納には、/var/tmp ディレクトリを使用してください。


ファイルの ACL エントリ

表 51-9 は、有効な ACL エントリを示しています。最初の 3 つの ACL エントリは、基本的な UNIX のファイル保護機能を提供します。

表 51-9 ファイルの ACL エントリ

ACL エントリ 

意味 

u[ser]::perms 

所有者のアクセス権 

g[roup]::perms 

所有者グループのアクセス権 

o[ther]:perms 

所有者や所有者グループのメンバー以外のユーザーのアクセス権 

m[ask]:perms 

ACL マスク。マスクエントリは、ユーザー (所有者以外) とグループに許される最大アクセス権を示す。マスクは、すべてのユーザーとグループのアクセス権を手早く変更する手段である。 

たとえば、mask:r-- マスクエントリは、ユーザーとグループが書き込み/実行権を持っていても、読み取り権しか使用できないことを示す

u[ser]:uid:perms

特定のユーザーのアクセス権 

g[roup]:gid:perms

特定のグループのアクセス権 

ディレクトリの ACL エントリ

表 51-9 に示した ACL エントリの他に、ディレクトリには、そのディレクトリ内で作成されるファイルに適用されるデフォルトの ACL エントリを設定できます。デフォルトの ACL エントリを持つディレクトリ内で作成されたファイルは、デフォルトの ACL エントリと同じ ACL エントリを持つことになります。表 51-10 に、ディレクトリのデフォルト ACL エントリを示します。

ディレクトリ上で特定のユーザーとグループのデフォルトの ACL エントリを初めて設定するときには、所有者、所有者グループ、その他、マスクごとのデフォルトの ACL エントリも設定しなければなりません (これらは必須であり、表 51-10 の最初の 4 つのデフォルト ACL エントリです)。

表 51-10 ディレクトリのデフォルト ACL エントリ

デフォルトの ACL エントリ 

意味 

d[efault]:u[ser]::perms 

所有者のデフォルトアクセス権 

d[efault]:g[roup]::perms 

所有者グループのデフォルトアクセス権 

d[efault]:o[ther]:perms 

所有者や所有者グループのメンバー以外のユーザーのデフォルトアクセス権 

d[efault]:m[ask]:perms 

デフォルトの ACL マスク 

d[efault]:u[ser]:uid:perms

特定のユーザーのデフォルトアクセス権 

d[efault]:g[roup]:gid:perms

特定のグループのデフォルトアクセス権 

ファイルの ACL エントリを設定する方法

  1. setfacl コマンドを使用してファイルの ACL エントリを設定します。

       $ setfacl -s user::perms,group::perms,other:perms,mask:perms,acl_entry_list filename ...
    

    -s

    ファイル上にすでに ACL が存在する場合は、ACL 全体を新しい ACL エントリに置き換える 

    user::perms
    

    所有者のアクセス権 

    group::perms
    

    所有者グループのアクセス権 

    other:perms
    

    所有者または所有者グループのメンバー以外のユーザーのアクセス権 

    mask:perms
    

    ACL マスクのアクセス権。マスクは、ユーザー (所有者以外) とグループに許される最大アクセス権を示す 

    acl_entry_list

    ファイルまたはディレクトリ上で特定のユーザーとグループに関して設定する 1 つ以上の ACL エントリのリスト。ディレクトリ上でデフォルトの ACL エントリを設定することもできる。有効な ACL エントリについては、表 51-9表 51-10 を参照

    filename

    ACL エントリを設定するファイルまたはディレクトリ 

  2. ファイルに ACL が設定されたかどうかを確認する方法については、「ファイルに ACL が設定されているかどうかをチェックする方法」を参照してください。ファイルにどの ACL エントリが設定されているかを確認するには、getfacl コマンドを使用します。

       $ getfacl filename
    

注意 - 注意 -

ファイルにすでに ACL が存在する場合に -s オプションを指定すると、ACL 全体が新しい ACL エントリに置き換えられます。


例 - ファイルの ACL エントリを設定する

次の例では、ch1.doc ファイルで、ユーザーに読み取り/書き込み権、グループに読み取り権のみ、その他のユーザーアクセス権を「なし」に設定します。また、ユーザー george には、このファイルの読み取り/書き込み権が与えられ、ACL マスクに読み取り/書き込み権が設定されます。これは、ユーザーやグループは実行権を持たないことを意味します。

$ setfacl -s user::rw-,group::r--,other:---,mask:rw-,user:george:rw- ch1.doc
$ ls -l
total 124
-rw-r-----+  1 nathan  sysadmin   34816 Nov 11 14:16 ch1.doc
-rw-r--r--   1 nathan  sysadmin   20167 Nov 11 14:16 ch2.doc
-rw-r--r--   1 nathan  sysadmin    8192 Nov 11 14:16 notes
$ getfacl ch1.doc
# file: ch1.doc
# owner: nathan
# group: sysadmin
user::rw-
user:george:rw-    #effective:rw-
group::r--         #effective:r--
mask:rw-
other:---

次の例では、ch2.doc ファイルで、ユーザーに読み取り/書き込み/実行権を、グループに読み取り権のみ、その他のユーザーのアクセス権を「なし」に設定します。また、sysadmin グループ内のユーザーには、ファイルの読み取り/書き込み権が与えられ、ACL マスクには読み取り/書き込み権が設定されます。

$ setfacl -s u::7,g::4,o:0,g:sysadmin:6,m:6 ch2.doc 
$ getfacl ch2.doc

ファイルに ACL が設定されているかどうかをチェックする方法

ls コマンドを使用して、ファイルに ACL が設定されているかどうかをチェックします。

$ ls -l filename

filename

チェックするファイルまたはディレクトリ 

モードフィールドの右側の「+」は、ファイルに ACL が設定されていることを示します。

例 - ファイルに ACL が設定されているかどうかをチェックする

次の例は、ch1.doc に ACL が設定されていることを示しています。

$ ls -l ch1.doc
-rwxr-----+  1 nathan   sysadmin      167 Nov 11 11:13 ch1.doc

ファイルに ACL エントリを追加または変更する方法

  1. setfacl コマンドを使用してファイルに ACL エントリを追加または変更します。

       $ setfacl -m acl_entry_list filename1 [filename2...]
    -m

    既存の ACL エントリを変更する 

    acl_entry_list

    ファイルまたはディレクトリに追加または変更する 1 つ以上の ACL エントリのリスト。ディレクトリにデフォルト ACL エントリを追加または変更することもできる。有効な ACL エントリについては、表 51-9表 51-10 を参照

    filename ...

    ACL エントリを追加または変更するファイルまたはディレクトリ 

  2. ファイルに ACL エントリが追加または変更されたことを確認するには、getfacl コマンドを使用します。

       $ getfacl filename
    

例 - ファイルに ACL エントリを追加または変更する

次の例では、ch3.doc ファイルにユーザー george の読み取り/書き込み権を追加します。

$ setfacl -m user:george:6 ch3.doc
getfacl ch3.doc
# file: ch3.doc
# owner: george
# group: staff
user::rw-				
user::george:rw-				#effective:rw-
group::r-						#effective:r--
mask:r--
other:r--

次の例では、book ディレクトリにデフォルトの ACL エントリを追加します。book ディレクトリには、ディレクトリの所有者、ディレクトリのグループ所有者、その他のユーザー用のデフォルトのエントリがすでに指定されています。staff グループ内のユーザーには読み取り権が与えられ、必要なデフォルトマスクに読み取り/書き込み権が設定されます。

$ setfacl -m default:group:staff:4,default:mask:6 book
$ getfacl book

ファイルから ACL エントリを削除する方法

  1. setfacl コマンドを使用してファイルから ACL エントリを削除します。

       $ setfacl -d acl_entry_list filename1 ... 
    
    -d

    指定した ACL エントリを削除する 

    acl_entry_list

    ファイルまたはディレクトリから (アクセス権を指定せずに) 削除する ACL エントリのリスト。特定のユーザーとグループの ACL エントリとデフォルトの ACL エントリ以外は削除できない。有効な ACL エントリについては、表 51-9表 51-10 を参照

    filename ...

    ACL エントリを削除するファイルまたはディレクトリ 

    また、setfacl -s コマンドを使用すると、ファイルからすべての ACL エントリを削除して、新しく指定した ACL エントリに置き換えることができます。

  2. ファイルから ACL エントリが削除されたことを確認するには、getfacl コマンドを使用します。

       $ getfacl filename
    

例 - ファイルから ACL エントリを削除する

次の例では、ユーザー nigel の ACL エントリを ch4.doc ファイルから削除します。

$ setfacl -d user:nigel:4 ch4.doc
$ getfacl ch4.doc
# file: ch4.doc
# owner: nigel
# group: staff
user::r--
group::r--					#effective:r--
other:r--

ファイルの ACL エントリを表示する方法

getfacl コマンドを使用してファイルの ACL エントリを表示します。

$ getfacl [-a | -d] filename1 ...

-a

指定するファイルまたはディレクトリのファイル名、所有者、グループ、ACL エントリを表示する 

-d

指定するディレクトリのファイル名、所有者、グループ、デフォルトの ACL エントリを表示する 

filename ...

ACL エントリを表示するファイルまたはディレクトリ 

コマンド行で複数のファイル名を指定すると、各 ACL エントリはブランク行で区切られます。

例 - ファイルの ACL エントリを表示する

次の例は、ch1.doc ファイルのすべての ACL エントリを示しています。ユーザーエントリとグループエントリの隣の #effective: は、ACL マスクによって変更された後のアクセス権の設定を示しています。

$ getfacl ch1.doc

# file: ch1.doc
# owner: nathan
# group: sysadmin
user::rw-
user:george:rw-         #effective:rw-
group::r--              #effective:r--
mask:rw-
other:---

次の例は、book ディレクトリのデフォルトの ACL エントリを示しています。

$ getfacl -d book

# file: book
# owner: nathan
# group: sysadmin
default:user::rw-
default:user:george:r--
default:group::rw-
default:mask:rw-
default:other:r--