【特殊なアクセス権について】


このHPは特殊なアクセス権についてまとめたものです。


1-1 SUID(Set User ID) SGID(Set Group ID)

■SUID(Set User ID)

SUID(Set User ID)とは、実行ファイルに設定される属性。
プログラムを実行すると、通常、そのプロセスはプログラムを実行したユーザーの権限で実行される。しかし、 SUID(Set User ID)が設定された実行ファイルでは、 どのユーザーが実行したかに関わらず、そのファイルの所有ユー ザーの権限でそのプロセスが実行される。

ただしSUID(Set User ID)を設定できるのは、実行ファイルだけで、ディレクトリには設定できない。

SUID(Set User ID)の設定を確認するには、lsコマンドに-lオプションをつけて実行する。

これを見ると、所有者のアクセス権は「rws」となっており、実行権が「s」になっている。 これがSUID(Set User ID)で、実行権を持っているユーザーによってプログラムが実行された場合には、ファイルの所有者の権限で実行される事を意味する。

また、SUID(Set User ID)が設定されたアクセス権を数値で表すには、3桁の数値に4000を加える。例えばアクセス権が755である実行ファイルにSUID(Set User ID)を 追加した場合、アクセス権表記は4755となる。



■SGID(Set Group ID)

SUID(Set User ID)と同様にグループのアクセス権が適用されるように設定する事も出来る。これがSGID(Set Group ID)。SGID(Set Group ID)が設定されると、グループのアクセス権が「s」になる。
ディレクトリに設定した場合には意味が異なり、そのディレクトリ内に新規に作成したファイルの所有グループがそのディレクトリの所有グループと同じになるようになる。

つまりそのディレクトリ以下で作成したファイルおよびディレクトリの所有グループは、自動的に親ディレクトリと同じになる。

また、SGID(Set Group ID)の設定されているファイルは次のようにグループの実行権限が「s」で表記される。



数値で表現すには、3桁のアクセス権表記に2000を加える。例えばアクセス権が777であるディレクトリにSGID(Set Group ID)を追加した場合、アクセス権表記は2777となる。

また、chmodコマンドなどでSGID(Set Group ID)を指定する場合は、「2000」もしくは「g+s」を使用する。





1-2 スティッキービット

スティッキービットをディレクトリに設定すると、そのディレクトリ内では、実際のパーミッションに関係なく、ファイルもしくはディレクトリの所有者と、rootユーザーのみが名前の変更と削除を行える。

例えば、/tmpディレクトリは誰もがファイルの読み書きを出来るようになっているが、自分の 使っているファイルを他人に消されては困る。そこで、スティッキービットを設定しておけば、そのようなトラブルを防ぐことができるようになる。



その他のユーザーの実行権が「t」となっているが、これが スティッキービット。スティッキービットが設定されたディレクトリでは、書き込み権限はあっても、その他のユーザーが所有するファイルを削除する事は できない。

/tmpディレクトリは、どのユーザーも書き込みが可能になっているが、スティッキービットが設定されていることにより、その他のユーザーが作成したファイルを削除することはで きなくなる。

アクセス権を数値で表記する場合には、3桁のアクセス権表記に「1000」を加える。 chmodコマンドなどでSGIDを指定する場合は「1000」、もしくは「g+t」を使用する。

次の例では、sampleディレクトリにスティッキービットを設定している。


♯chmod g+t sample



1-3 デフォルトのアクセス権

一般ユーザーでファイルやディレクトリを作成すると、デフォルトではディレクトリのアクセス権が755(rwxr-xr-x)に、ファイルのアクセス権が644(rw-r--r--)になる。







ファイルやディレクトリを作成したときに設定されるアクセス権は、umask値 で決定される。ファイルは「666」から、ディレクトリは「777」からumask値を引いた値がデフォルトのアクセス権として適用される 。

デフォルトのアクセス権は、ユーザーごとに設定されたumask値によって決定される。 現在、どの様なumask値が設定されているかは、引数無しでumaskコマンドを実行すると表示される。


$ umask 022


ここでは、ファイルを作成した場合のアクセス権は644(=666-022)、ディレクトリを作成した場合のアクセス権は755(=777-022 ) となる。以下の例では、マスク値を027に設定している。その結果、新規作成されたファイルには、その他のユー ザーについては全ての権限が与えられない。

$umask 027
$touch file
$ls -l
-rw-r----- 1 test linux 0 Jun 27 12:00 file