kazmax - Linux で自宅サーバー

SUID(Set User ID) - 特殊なアクセス権

SUID(Set User ID)という特殊なアクセス権があります。このページでは、SUID(Set User ID)について説明します。

Last Update : 2013年07月25日

SUID(Set User ID) - 特殊なアクセス権 項目

  1. SUID(Set User ID)とは
  2. SUID(Set User ID)の確認の仕方
  3. SUID(Set User ID)を設定する
  4. 使用例

1. SUID(Set User ID)とは

SUID(Set User ID)とは、実行権のあるファイルに設定される特殊なアクセス権です。

通常、実行ファイルを実行すると、そのファイルを実行したユーザーの権限で実行されますが、SUID(Set User ID)が設定されたファイルでは、その実行ファイルの所有者のアカウント権限で実行されます。

もともとLinux入っているコマンド類にもSUID(Set User ID)が設定されているコマンドがあり、例えば、「passwd」コマンドがこれにあたります。

2. SUID(Set User ID)の確認の仕方

SUID(Set User ID)が設定されているかどうかは、「ls -l」で確認することができます。

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 22984  1月  7  2007 /usr/bin/passwd

パーミッションの所有者の部分が、「rws」となっています。実行権の部分は、通常「x」ですが、ここが「s」になっているとSUID(Set User ID)が設定されている事を意味します。

memo

passwdコマンドは、/etc/passwdや、/etc/shadow の様な一般ユーザーでは通常変更できないファイルを更新します。

一般ユーザーがこのコマンドを実行し、、/etc/passwdや、/etc/shadowを更新できるのは、passwdコマンドにSUIDが設定されていて、root権限で実行されているからです。

3. SSUID(Set User ID)を設定する

SUID(Set User ID)を設定するには、chmodコマンドで以下のように指定します。

chmod u+s file

数値モードでアクセス権を設定する場合には、数値に4000を足します。 例えばアクセス権が755の実行ファイルにSUID(Set User ID)を追加したい場合の数値表記は、「4755」となります。

chmod 4755 file

4. 使用例

実際に、SUID(Set User ID)を設定して、動作を確認してみます。

# id 現在rootアカウント
uid=0(root) gid=0(root) 所属グループ=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

# cp /bin/touch .  ← touchコマンドをコピー
# chown user1 touch  ← touchコマンドの所有者をuser1にする
# chmod u+s touch  ← SUIDを設定

# ls -l touch
-rwsr-xr-x 1 user1 root 42284  7月 25 12:39 touch ← SUIDが設定されている

# ./touch test.txt ← SUIDが設定されているtouchコマンドでtest.txtを作成

# ls -l test.txt
-rw-r--r-- 1 user1 root 0 7月 25 12:39 test.txt ← test.txtのファイルの所有者がuser1となっている

touchコマンドをrootアカウントで実行したので、本来ならtest.txtの所有者はrootになる。

touchコマンドにSUIDが設定されている為、コマンドがファイルの所有者であるuser1として実行され、作成されたファイルの所有者もuser1となる。

Linux 基礎知識 関連記事