SUID,SGID,Sticky bit

4月 3, 2009

前回に引き続きパーミッション絡みで、もう少し。
以下のように、Linuxには通常のパーミッションの他に特殊なものがある。

SUID(Set User ID,setuid)
SUIDをセットしたファイルは、所有者ユーザの権限で実行可能となる。
設定対象は実行可能ファイル。

SGID(Set Group ID,setgid)
SGIDをセットしたファイルやディレクトリは、所属グループの権限で実行可能となる。
設定対象は実行可能ファイル・ディレクトリ。
これらはchmodコマンドで以下のように設定する。

SUID
$ chmod u+s file name

SGID
$ chmod g+s file name


通常のパーミッションの設定と合わせて、絶対モードで以下のようにすることもできる。
(SUID,SGIDはそれぞれ8進数で4000,2000と表す)

$ chmod 4755 file name
$ chmod 2755 file name


SUID、SGIDを設定すると、パーミッションにおいてxの代わりにsフラグが立つ。
passwdコマンドの実行ファイルをls -lで確認してみると、パーミッションは以下のような
表示になっているはず(OSのデフォルトで設定)。

-r-sr-xr-x 1 root root 35572 Oct 3 2007 passwd


passwdコマンドを実行する際には/etc/shadowなど、rootでしか操作できないファイルに
変更を加える必要があるため、本来ならrootでしか実行できないはずだけど、
「それでは困るんじゃー!」てな時の対応として、SUIDというものがあるワケだ。
passwdコマンドファイルにSUIDがセットされているおかげで、一般ユーザでも
パスワードの変更ができるんですね。

SGIDは特定のディレクトリで、特定のグループのメンバーで作業する場合に便利。
対象ディレクトリ配下においては、ディレクトリに設定したグループ権限を引継いだ
ファイルが作成される。そのため合わせて所属メンバーのumask設定を002などにして
おけば(ディレクトリのパーミッションは775となる)、同じ所属グループのメンバー
なら誰でもファイルの編集が可能となる。

Sticky bit
Sticky bit(スティッキービット)をディレクトリに設定すると、所有者以外はそのディレクトリ内の
ファイルについて、読み・書き・実行は可能だが削除ができない、というパーミッションになる。

設定対象は通常、ディレクトリ(ファイルに対してスティッキービットを設定しても
無意味とのこと)。
あるディレクトリで、誰でも自由にファイルを作成したり、書き込んだりできるように
したい、でも勝手にファイルを削除されては困る、という時に使う。
通常は、/tmpディレクトリにはstickyがデフォルトで設定されているもの、だそうだ。

スティッキービットもSUIDなどと同様にchmodコマンドで設定。

$ chmod o+t Directory name


ちなみにスティッキービットの8進数は1000。当然、これを用いてchmod 1755などと
して絶対モードで設定することも可能。
スティッキービットを設定したディレクトリにはtフラグが立つ。
実行可能権限が与えられていないディレクトリにスティッキービットを設定すると、
大文字のTフラグが立つ。

これらの特殊なパーミッションは使い方を誤るとセキュリティホールとなりかねないので、
細心の注意が必要。必要のないSUIDは落としておくことが推奨されているし、業務や
運用の状況と照らし合わせて、適切に設定しなければいけない、ということですねw

こうしてまとめてみると、Linux、UNIX系OSの概念を理解するにあたって、パーミッション
というのはかなり重要な「キモ」なのだなぁ、と改めて実感。

追記
スティッキービットについてはいろんなところで書かれているが、以下サイトの記事が
面白かったのでメモ。書かれた時期は結構古いけど、他の話も参考になる。
↓ ↓ ↓
http://www.atm.ox.ac.uk/user/hiro/Linux_memo/m00file/m029_web/m029.htm

Categories: Linux

No Responses so far | Have Your Say!

Comments are closed.