連載
» 2017年06月15日 05時00分 UPDATE

“応用力”をつけるためのLinux再入門(12):「SUID(セットユーザーID)」属性の効果を試してみよう (1/2)

ファイルやディレクトリのパーミッションには「r」「w」「x」という基本的な属性の他に、「SUID(セットユーザーID)」や「SGID(セットグループID)」という特殊な属性があります。前回はディレクトリでこれらの特殊な属性がどのように働くかを試しましたが、今回は実行可能ファイルに対するSUID属性を試します。

[西村めぐみ,@IT]
「“応用力”をつけるためのLinux再入門」のインデックス

連載目次

ファイルのパーミッションには何があるのか

 前回に続き、今回のテーマも「パーミッション(許可属性)」です。まずは、ファイルのパーミッションを再確認しておきましょう(表1)。

ls -lの表示 意味
r 4 読み出し可能
w 2 書き込み可能
x 1 実行可能
- 0 許可がない
表1 ファイルのパーミッションと数値の対応

 読み出し可能(r)=4、書き込み可能(w)=2、実行可能(x)=1で、読み出しと書き込みが可能な場合は4+2=6、全て可能な場合が4+2+1=7となります。

 ファイルのパーミッションは「所有者(Users)」と「グループ(Groups)」と「それ以外(Others)」に対して設定されています。従って、“所有者と所有グループは全て可能で、それ以外のユーザーは読み出しだけ”であれば「774」となります。

 そして、もう1桁、以下の表2のような特殊な属性があります。

ls -lの表示 意味
所有者のxがsまたはS 4 set-user-ID(SUID)、実行時に所有者の権限を引き継ぐ
グループのxがsまたはS 2 set-group-ID(SGID)、実行時のグループの権限を引き継ぐ
その他のxがtまたはT 1 sticky()、ディレクトリの場合は削除制限(第11回参照)
表2 ファイルの特殊な属性

【※】実行可能ファイルにセットしている場合、そのファイルが読み込んだテキストイメージを終了後もメモリに残すという働き。



 これらの属性が有効になっているファイルやディレクトリは、「ls -l」コマンドではパーミッションの「x」の箇所が「s」または「t」で表示されます。もともと「x」が有効(実行可能)である場合は小文字、無効である場合は大文字です。

「ls -l」コマンドではどのように表示されるのか

 それでは「ls -l」コマンドでは、どのように表示されるかを実際に見てみましょう(画面1)。例えば、「/tmp」ディレクトリは削除制限があるので「t」、「passwd」コマンド(パスワードを設定するコマンド)はSUID、「wall」コマンド(ログインしている端末に一斉メッセージを送る)はSGIDが有効なので「s」が表示されています。

画面1 画面1 「ls -l」コマンドでの表示

 なお、CentOSでは、デフォルトで「ls」コマンドの「--color」オプションが有効なため、ファイル名がそれぞれ異なる色で表示されています。

 4桁の数値によるパーミッションの値は「stat」コマンドで確認できます(画面2)。statコマンドは、ファイルの「状態(ステイタス)」を表示するコマンドです。

画面2 画面2 「stat」コマンドでの表示

 なお、SUIDとSGIDはバイナリの実行ファイルにのみ有効で、スクリプトには無効です。

SUID/SGIDが設定されているファイルを探してみよう

 “特定の属性が設定されているファイル”は、「find」コマンドで探すことができます。

 findコマンドでは、「find オプション 場所 検索式」でファイルやディレクトリを探します。属性の検索式は「-perm」で、“SUIDが有効”は「-perm -u+s」または「-perm -4000」、“SGIDが有効”は「-perm -g+s」または「-perm -2000」のように指定します(画面3)。

画面3 画面3 「find」コマンドでSUID/SGIDが設定されているファイルを探す

 それぞれ、組み合わせの例を以下に示します。

(1)SUIDが有効

find /usr/bin/ -perm -u+s

find /usr/bin/ -perm -4000



(2)SGIDが有効

find /usr/bin/ -perm -g+s

find /usr/bin/ -perm -2000



(3)SUIDまたはSGIDが有効

find /usr/bin/ -perm -u+s -o -perm -g+s

find /usr/bin/ -perm -4000 -o -perm -2000

find /usr/bin/ -perm /6000



(4)SUIDとSGIDが有効(

find /usr/bin/ -perm -u+s -a -perm -g+s

find /usr/bin/ -perm -4000 -a -perm -2000

find /usr/bin/ -perm -6000


【※】CentOSの場合、「/usr/bin」にSUIDとSGIDが有効なファイルはありません。Ubuntu環境では、「/usr/bin/X」コマンドが該当します。



       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。