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)とは
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となる。