Solaris のシステム管理

第 51 章 ファイルのセキュリティの適用手順

この章では、ファイルにセキュリティを適用する手順について説明します。この章で説明する手順は次のとおりです。

ファイルのセキュリティについて

この節では、ファイルのセキュリティの概念と、ファイルのセキュリティを理解するために必要な用語を説明します。

ユーザークラス

各ファイルには、3 つのユーザークラスがあります。

ファイルのアクセス権を割り当てたり変更したりできるのは、スーパーユーザーかそのファイルの所有者だけです。

ファイルのアクセス権

表 51-1 に、ファイルのアクセス権を示します。

表 51-1 ファイルのアクセス権

記号 

アクセス権 

指定されたユーザーが実行できる操作 

r

読み取り 

ファイルを開いて内容を読み取る 

w

書き込み 

ファイルに書き込んだり (その内容を変更したり)、追加したり、削除したりできる 

x

実行 

ファイルを実行するか (プログラムまたはシェルスクリプトの場合)、exec(1) システムコールを使用して実行できる

-

拒否 

ファイルを読み取ったり、書き込んだり、実行したりできない 

これらのファイルアクセス権は、通常のファイルと同様にデバイス、ソケット、名前付きパイプ (FIFO) などの特殊ファイルにも適用できます。

シンボリックリンクには、そのリンクが指すファイルのアクセス権が適用されます。

ディレクトリのアクセス権

表 51-2 に、ディレクトリのアクセス権を示します。

表 51-2 ディレクトリのアクセス権

記号 

アクセス権 

指定されたユーザーが実行できる操作 

r

読み取り 

ディレクトリ内のファイルを表示できる 

w

書き込み 

ディレクトリ内のファイルやリンクを追加または削除できる 

x

実行 

ディレクトリ内のファイルを開いたり実行したりできる。また、ディレクトリを作成し、その下のディレクトリをカレントディレクトリにすることができる 

ディレクトリへアクセスできないようにすると、そのディレクトリ (およびすべてのサブディレクトリ) 内のファイルを保護できます。ただし、スーパーユーザーはシステム上のすべてのファイルとディレクトリへのアクセス権を持つので注意してください。

デフォルトの umask

ファイルやディレクトリを作成するときには、デフォルトのアクセス権が設定されます。これらのデフォルトのアクセス権は、システムファイル /etc/profile.cshrc、または .login ファイル内の umask の値によって決定されます。デフォルトでは、システムはテキストファイルのアクセス権を 666 に設定してユーザー、グループ、その他に読み取り権と書き込み権を与え、ディレクトリまたは実行可能ファイルに対しては 777 に設定します。

umask によって割り当てられる値は、デフォルトから差し引かれます。これには、chmod がアクセス権を与えるのと同じ方法で拒否する効果があります。たとえば、コマンド chmod 022 はグループとその他に書き込み権を与えますが、umask 022 はグループとその他の書き込み権を拒否します。

表 51-3 に、典型的な umask の設定とその設定が実行可能ファイルに与える影響を示します。

表 51-3 各種セキュリティレベルの umask 設定

セキュリティレベル 

umask

使用できないユーザー 

緩やか (744)

022

グループとその他による w

中程度 (740)

027

グループによる w、その他による rwx

中程度 (741)

026

グループによる w、その他による rw

厳しい (700)

077

グループとその他による rwx

ファイル形式

ファイルには 6 つの形式があります。表 51-4 にファイル形式を示します。

表 51-4 ファイル形式

記号 

形式 

-

テキストまたはプログラム 

d

ディレクトリ 

b

ブロック型特殊ファイル 

c

キャラクタ型特殊ファイル 

p

名前付きパイプ (FIFO) 

l

シンボリックリンク 

ファイル情報の表示

この節では、ファイルの情報を表示する方法について説明します。

ファイル情報を表示する方法

ls コマンドを使用して、ディレクトリ内のすべてのファイルに関する情報を表示します。

$ ls -la

-l

長形式で表示する 

-a

ドット (.) で始まるファイルを含め、すべてのファイルを表示する 

表示画面の各行には、ファイルに関して次の情報が表示されます。

例 - ファイル情報を表示する

次の例には、/sbin ディレクトリ内のファイルのリストの一部が表示されています。

$ cd /sbin
$ ls -la
total 5980
drwxrwxr-x   2 root  sys       512 May  1  1996 ./
drwxr-xr-x  33 root  root     1024 Sep  5 14:42 ../
-r-xr-xr-x   1 bin   bin    118840 Oct 25  1995 autopush*
lrwxrwxrwx   1 root  root       21 May  1  1996 bpgetfile -> ...
-r-xr-xr-x   1 bin   bin    515272 Oct 25  1995 hostconfig*
-r-xr-xr-x   1 bin   bin    569792 Oct 25  1995 ifconfig*
-r-xr-xr-x   1 root  sys    246688 Oct 25  1995 init*
-r-xr-xr-x   2 bin   root   189364 Oct 25  1995 jsh*
-r-xr-xr-x   1 bin   bin    161140 Oct 25  1995 mount*
-r-xr-xr-x   1 root  sys      6908 Jan  1  1970 mountall*
.
.
.

ファイル所有権の変更

この節では、ファイル所有権を変更する方法について説明します。

ファイルの所有者を変更する方法

  1. ファイルまたはディレクトリの所有者でない場合は、スーパーユーザーになります。

    現在の所有者またはスーパーユーザーだけが、chown コマンドを使用してファイルまたはディレクトリの所有者を変更できます。

  2. chown コマンドを使用してファイルの所有者を変更します。

       $ chown newowner filename
    

    newowner

    ファイルまたはディレクトリの新しい所有者名 

    filename

    ファイルまたはディレクトリ 

  3. ファイルの所有者が変更されていることを確認します。

       $ ls -l filename
    

例 - ファイルの所有者を変更する

次の例では、myfile の所有権をユーザー rimmer に設定します。

$ chown rimmer myfile
$ ls -l myfile
-rw-r--r--   1 rimmer   scifi   112640 May 24 10:49 myfile

ファイルのグループ所有権を変更する方法

  1. ファイルまたはディレクトリの所有者でない場合は、スーパーユーザーになります。

    現在の所有者またはスーパーユーザーだけが、chgrp コマンドを使用して、ファイルまたはディレクトリの所有者を変更できます。

  2. chgrp コマンドを使用して、ファイルのグループ所有者を変更します。

       $ chgrp group filename
    

    group

    ファイルまたはディレクトリの新しいグループ名 

    filename

    ファイルまたはディレクトリ 

  3. ファイルのグループ所有権が変更されていることを確認します。

       $ ls -l filename
    

例 - ファイルのグループ所有権を変更する

次の例では、myfile のグループ所有権をグループ scifi に設定します。

$ chgrp scifi myfile
$ ls -l myfile
-rwxrw-- 1 rimmer scifi 12985 Nov 12 16:28 myfile

ファイルのアクセス権の変更

chmod コマンドを使用すると、ファイルのアクセス権を変更できます。ファイルまたはディレクトリの所有者、またはスーパーユーザーだけがそのアクセス権を変更できます。

chmod コマンドを使用して、次のどちらかのモードでアクセス権を設定できます。

表 51-5 に、絶対モードでファイルのアクセス権を設定するための 8 進数値を示します。

表 51-5 絶対モードによるファイルのアクセス権の設定

8 進数値 

ファイルのアクセス権 

設定されるアクセス権 

0

---

なし 

1

--x

実行権のみ 

2

-w-

書き込み権のみ 

3

-wx

書き込み権と実行権 

4

r--

読み取り権のみ 

5

r-x

読み取り権と実行権 

6

rw-

読み取り権と書き込み権 

7

rwx

読み取り権、書き込み権、実行権 

表 51-6 に、記号モードでファイルのアクセス権を設定するための記号を示します。記号では、アクセス権を設定または変更できる対象ユーザー、実行される操作、あるいは割り当てるまたは変更するアクセス権を指定できます。

表 51-6 記号モードによるファイルのアクセス権の設定

記号 

機能 

説明 

u

対象ユーザー 

ユーザー (所有者) 

g

対象ユーザー 

グループ 

o

対象ユーザー 

その他 

a

対象ユーザー 

すべて 

=

操作 

割り当て 

+

操作 

追加 

-

操作 

削除 

r

アクセス権 

読み取り 

w

アクセス権 

書き込み 

x

アクセス権 

実行 

l

アクセス権 

強制ロック、setgid ビットはオン、グループ実行ビットはオフ

s

アクセス権 

setuid または setgid ビットはオン

S

アクセス権 

suid ビットはオン、ユーザー実行ビットはオフ

t

アクセス権 

スティッキビットはオン、その他の実行ビットはオン 

T

アクセス権 

スティッキビットはオン、その他の実行ビットはオフ 

機能列の「対象ユーザー」、「操作」、および「アクセス権」を順番に連結した文字列によって、ファイルまたはディレクトリのアクセス権を変更する記号を指定します。

対象ユーザー 

アクセス権を変更する対象となるユーザーを指定する 

操作 

実行する操作を指定する 

アクセス権 

変更するアクセス権を指定する 

アクセス権を絶対モードで変更する方法

  1. ファイルまたはディレクトリの所有者でない場合は、スーパーユーザーになります。

    現在の所有者またはスーパーユーザーだけが、chmod コマンドを使用してファイルまたはディレクトリの所有者を変更できます。

  2. chmod コマンドを使用してアクセス権を絶対モードで変更します。

       $ chmod nnn filename
    

    nnn

    ファイルまたはディレクトリのアクセス権を変更する 8 進数値。有効な 8 進数値については、表 51-5 を参照

    filename

    ファイルまたはディレクトリ 

  3. ファイルのアクセス権が変更されていることを確認します。

       $ ls -l filename
    

例 - アクセス権を絶対モードで変更する

次の例では、myfilerwxr-xr-x アクセス権を設定します。

$ chmod 755 myfile
$ ls -l myfile
-rwxr-xr-x   1 kryten   staff   6144 May 24 10:49 myfile

アクセス権を記号モードで変更する方法

  1. ファイルまたはディレクトリの所有者でない場合は、スーパーユーザーになります。

    現在の所有者またはスーパーユーザーだけが、chmod コマンドを使用してファイルまたはディレクトリの所有者を変更できます。

  2. chmod コマンドを使用してアクセス権を記号モードで変更します。

       $ chmod who operator permission filename
    

    who operator permission

    who では、アクセス権を変更するユーザーを指定し、operator では実行する操作を指定し、permission では変更後のアクセス権を指定する。有効な記号については、表 51-6 を参照

    filename

    ファイルまたはディレクトリ 

  3. ファイルのアクセス権が変更されていることを確認します。

       $ ls -l filename
    

例 - アクセス権を記号モードで変更する

次の例では、その他のユーザーの読み取り権を削除します。

$ chmod o-r filea

次の例では、ユーザー、グループ、その他のユーザーの読み取り権と実行権を追加します。

$ chmod a+rx fileb

次の例では、グループに読み取り権、書き込み権、実行権を割り当てます。

$ chmod g=rwx filec

特殊なファイルアクセス権 (setuidsetgid、スティッキビット)

実行可能ファイルと公共ディレクトリには、3 つの特殊なアクセス権を使用できます。これらのアクセス権を設定すると、その実行可能ファイルを実行するユーザーは、そのファイルの所有者 (またはグループ) のアクセス権を持ちます。

特殊アクセス権はセキュリティ上のリスクを伴うので、設定時には細心の注意を払わなければなりません。たとえば、ユーザーはユーザー ID を root に設定するプログラムを実行して、スーパーユーザーアクセス権を取得できます。

システムを監視し、setuidsetgid アクセス権をアクセス権なしに使用して、スーパーユーザー特権が取得されていないかどうかに絶えず注意する必要があります。これらのアクセス権を使用してファイルシステムを検索する方法と全プログラムのリストを出力する方法については、setuid アクセス権が設定されているファイルを検索する方法」を参照してください。この種のプログラムの所有権を binsys 以外のユーザーに与えている場合が出力の中にあれば、セキュリティ違反の可能性があります。これらのアクセス権はスーパーユーザーしか設定できません。

setuid アクセス権

set-user 識別 (setuid) アクセス権を実行可能ファイルに設定すると、このファイルを実行するプロセスには、プロセスを生成したユーザーではなく、ファイルの所有者 (通常は root) に基づいてアクセス権が与えられます。このため、通常は所有者しか利用できないファイルやディレクトリにユーザーがアクセスできます。たとえば次に示すように、passwd コマンドは root の setuid アクセス権が設定されているので、ユーザーは root の権限でパスワードを変更できます。

-r-sr-sr-x   1 root     sys        10332 May  3 08:23 /usr/bin/passwd

これは、プロセスの実行が終了した後でも、高度な知識のあるユーザーは setuid プロセスによって与えられたアクセス権を維持する手段を見つけることができるため、セキュリティ上危険であることを示しています。


注 -

プログラムから予約済み UID (0 - 99) で setuid アクセス権を使用しても、実効 UID は正しく設定されない場合があります。シェルスクリプトを代わりに使用するか、setuid アクセス権では予約済み UID を使用しないようにしてください。


setgid アクセス権

set-group 識別 (setgid) アクセス権は setuid に似ていますが、プロセスの実効グループ ID (GID) はファイルのグループ所有者に変更され、ユーザーにはそのグループに与えられたアクセス権に基づくアクセス権が与えられます。/usr/bin/mail プログラムには setgid アクセス権が設定されています。

-r-x--s--x   1 bin      mail       62504 May  3 07:58 /usr/bin/mail

setgid アクセス権がディレクトリに適用されると、このディレクトリ内で作成されたファイルは、生成するプロセスが所属するグループではなく、ディレクトリが所属するグループに含まれることになります。ディレクトリ内で書き込み権を持つユーザーは、そこでファイルを作成できます。ただし、そのファイルは、そのユーザーのグループではなく、ディレクトリのグループに所属することになります。

管理者は、setuid アクセス権や setgid アクセス権の認証されていない使用によってスーパーユーザー特権が獲得されないようにシステムを監視しなければなりません。ファイルシステムを検索して、このようなアクセス権を使用しているすべてのプログラムのリストを出力する方法については、setuid アクセス権が設定されているファイルを検索する方法」を参照してください。このようなプログラムの所有権が、binsys ではなく、一般ユーザーになっているものが疑わしいと考えられます。これらのアクセス権を設定できるのは、スーパーユーザーだけです。

スティッキビット

「スティッキビット」は、ディレクトリ内のファイルを保護するアクセス権ビットです。ディレクトリにスティッキビットが設定されている場合、そのファイルを削除できるのはその所有者、ディレクトリの所有者、または root だけです。これにより、ユーザーは uucppublic などの公共ディレクトリから他のユーザーのファイルを削除できなくなります。

drwxrwxrwt   2 uucp     uucp     512 May 24 09:48 /var/spool/uucppublic

TMPFS ファイルシステム上で公共ディレクトリを設定するときには、スティッキビットを手作業で設定してください。

特殊アクセス権の設定と検索

ファイルには、絶対モードまたは記号モードで特殊アクセス権を設定できます。絶対モードでは、3 つ 1 組のアクセス権の左端に新しい 8 進数値を追加して、特殊アクセス権を設定します。表 51-7 に、ファイルに特殊アクセス権を設定する 8 進数値を示します。

表 51-7 絶対モードによる特殊アクセス権の設定

8 進数値 

特殊アクセス権の設定 

1

スティッキビット 

2

setguid

4

setuid

記号モードで特殊アクセス権を変更するための記号については、表 51-6 を参照してください。

特殊アクセス権を絶対モードで設定する方法

  1. ファイルまたはディレクトリの所有者でない場合は、スーパーユーザーになります。

    現在の所有者またはスーパーユーザーだけが、chmod コマンドを使用してファイルまたはディレクトリの所有者を変更できます。

  2. chmod コマンドを使用して特殊アクセス権を絶対モードで変更します。

       $ chmod nnnn filename
    

    nnnn

    ファイルまたはディレクトリのアクセス権を変更する 8 進数値。左端の 8 進数値で、ファイルの特殊アクセス権を設定する。特殊アクセス権に有効な 8 進数値のリストについては、表 51-7 を参照。

    filename

    ファイルまたはディレクトリ 

  3. ファイルのアクセス権が変更されていることを確認します。

       $ ls -l filename
    

例 - 特殊アクセス権を絶対モードで設定する

次の例では、dbprog ファイルに setuid アクセス権を設定します。

$ chmod 4555 dbprog
$ ls -l dbprog
-r-sr-xr-x   1 db     staff        12095 May  6 09:29 dbprog

次の例では、dbprog2 ファイルに setgid アクセス権を設定します。

$ chmod 2551 dbprog2
$ ls -l dbprog2
-r-xr-s--x   1 db     staff       24576 May  6 09:30 dbprog2

次の例では、pubdir ディレクトリにスティッキビットアクセス権を設定します。

$ chmod 1777 pubdir

setuid アクセス権が設定されているファイルを検索する方法

  1. スーパーユーザーになります。

  2. find コマンドを使用して setuid アクセス権が設定されているファイルを検索します。

       # find directory -user root -perm -4000 -exec ls -ldb {}¥; >/tmp/filename
    
    find directory
    

    指定したディレクトリから始めて、マウントされているすべてのパスをチェックする。ディレクトリとしてルート (/)、sysbin、または mail を指定できる

    -user root

    root が所有するファイルのみを表示する 

    -perm -4000

    アクセス権が 4000 に設定されているファイルのみを表示する 

    -exec ls -ldb

    find コマンドの出力を ls -ldb 形式で表示する

    >/tmp/filename

    結果がこのファイルに書き込まれる 

  3. 結果を /tmp/filename に出力する。

    setuid については、setuid アクセス権」を参照してください。

例 - setuid アクセス権が設定されているファイルを検索する

# find / -user root -perm -4000 -exec ls -ldb { }¥; > /tmp/ckprm 
	# cat /tmp/ckprm 
	-r-sr-xr-x 1 root bin 38836 Aug 10 16:16 /usr/bin/at
	-r-sr-xr-x 1 root bin 19812 Aug 10 16:16 /usr/bin/crontab
	---s--x--x 1 root sys 46040 Aug 10 15:18 /usr/bin/ct
	-r-sr-xr-x 1 root sys 12092 Aug 11 01:29 /usr/lib/mv_dir
	-r-sr-sr-x 1 root bin 33208 Aug 10 15:55 /usr/lib/lpadmin
	-r-sr-sr-x 1 root bin 38696 Aug 10 15:55 /usr/lib/lpsched
	---s--x--- 1 root rar 45376 Aug 18 15:11 /usr/rar/bin/sh
	-r-sr-xr-x 1 root bin 12524 Aug 11 01:27 /usr/bin/df
	-rwsr-xr-x 1 root sys 21780 Aug 11 01:27 /usr/bin/newgrp
	-r-sr-sr-x 1 root sys 23000 Aug 11 01:27 /usr/bin/passwd
	-r-sr-xr-x 1 root sys 23824 Aug 11 01:27 /usr/bin/su
	#

アクセス権のないユーザー (rar) が /usr/bin/sh の個人用コピーを作成し、setuid としてのアクセス権を root に設定しています。これは、rar/usr/rar/bin/sh を実行して特権付きユーザーになれることを意味します。この出力を参考のために保存したい場合は、ファイルを /tmp ディレクトリの外へ移動してください。

アクセス制御リスト (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--