「SUID(セットユーザーID)」属性の効果を試してみよう:“応用力”をつけるためのLinux再入門(12)(1/2 ページ)
ファイルやディレクトリのパーミッションには「r」「w」「x」という基本的な属性の他に、「SUID(セットユーザーID)」や「SGID(セットグループID)」という特殊な属性があります。前回はディレクトリでこれらの特殊な属性がどのように働くかを試しましたが、今回は実行可能ファイルに対するSUID属性を試します。
ファイルのパーミッションには何があるのか
前回に続き、今回のテーマも「パーミッション(許可属性)」です。まずは、ファイルのパーミッションを再確認しておきましょう(表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」が表示されています。
なお、CentOSでは、デフォルトで「ls」コマンドの「--color」オプションが有効なため、ファイル名がそれぞれ異なる色で表示されています。
4桁の数値によるパーミッションの値は「stat」コマンドで確認できます(画面2)。statコマンドは、ファイルの「状態(ステイタス)」を表示するコマンドです。
なお、SUIDとSGIDはバイナリの実行ファイルにのみ有効で、スクリプトには無効です。
SUID/SGIDが設定されているファイルを探してみよう
“特定の属性が設定されているファイル”は、「find」コマンドで探すことができます。
findコマンドでは、「find オプション 場所 検索式」でファイルやディレクトリを探します。属性の検索式は「-perm」で、“SUIDが有効”は「-perm -u+s」または「-perm -4000」、“SGIDが有効”は「-perm -g+s」または「-perm -2000」のように指定します(画面3)。
それぞれ、組み合わせの例を以下に示します。
(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」コマンドが該当します。
Copyright © ITmedia, Inc. All Rights Reserved.