|
setuid と setgid は、UNIXにおけるアクセス権を表すフラグの名称であり、ユーザーが実行ファイルを実行する際にその実行ファイルの所有者やグループの権限で実行できるようにする。それぞれ、set user ID と set group ID の略。一般ユーザーが高い特権レベルでしか実行できないタスクを一時的に実行できるようにする仕組みである。提供されるユーザー識別子やグループ識別子によって必ず特権レベルが高くなるわけではないが、少なくともそれら識別子は特定のものが指定されている。 setuid と setgid は一般ユーザーよりも高い特権レベルが必要とされるタスクの実行に必要である。例えば、そのユーザーのログインパスワードの変更などである。中には意外なタスクで特権レベルを上げる必要があることもある。例えば、ping コマンドはネットワークインタフェース上で制御パケットを送り、応答を待つ必要があり、特権が必要である。 == 実行ファイルでの setuid == バイナリの実行ファイルに setuid 属性を付与したとき、一般ユーザーがそのファイルを実行すると、プロセス生成時にそのファイルの所有者(通常はroot)の特権を得ることができる。root の権限がそのプロセスに与えられると、そのアプリケーションは一般ユーザーが通常ならできないタスクを実行できるようになる。それを起動したユーザーがそのプロセスを何とかして通常でない動きをさせようとしても、それは禁止されている。例えば、ptrace を使ったり、LD_LIBRARY_PATH をいじったり、シグナルを送ったりといったことである(端末からのシグナルだけは受け付けられる)。セキュリティ上の危険性が増すため、多くのオペレーティングシステムではシェルスクリプト形式の実行ファイルへの setuid 属性付与を無視するようになっている。 setuid 機能は非常に便利だが、注意深く設計でされていないプログラムの実行ファイルに setuid 属性を付与すると、セキュリティ上の危険性が生じる。悪意あるユーザーがそのような実行ファイルを利用して特権を得たり、一般ユーザーが気づかないうちにトロイの木馬を実行してしまうといった可能性がある。 setgid 属性はプロセスのグループベースの特権を変更する。 setuid 属性があるのは、UNIXにおいて一般ユーザーが chroot システムコールを実行できないためである。 setuid ビットと setgid ビットは通常、chmod コマンドで八進数形式の最上位桁を 4 または 2(両方なら 6)を設定することでセットされる。'chmod 6711' としたとき、setuid ビットと setgid ビットがセットされ(6)、所有者は読み取り/書き込み/実行が可能で(7)、グループとその他のユーザーは実行だけ可能となる(11)。なお、最上位桁の最下位ビットはスティッキービットである。 chmod には多くの場合、これらのビットをシンボルで指定するシンボリックモードもある。下記の実施例で使っている 'chmod g+s' はその例である。 実施例にあるC言語のプログラムは、プロセスの実ユーザー識別子と実グループ識別子および実効ユーザー識別子と実効グループ識別子を表示するだけのものである。実施例ではまず、このプログラムを 'bob' というユーザーでコンパイルし、'chmod' を使って setuid と setgid をセットしている。'su' コマンド自身も setuid 機能を使っているが、ここではユーザーを 'alice' に変更するために使われている。'chmod' コマンドの効果は 'ls -l' でチェックでき、最終的にデモプログラムが実行され、識別子が変更されていることが表示される。/etc/passwd ファイルの内容と比較していただきたい。 なお、'nosuid' オプション付きでマウントされたボリューム上では、このプログラムの実効ユーザー識別子の変更は無視される(変更されず、エラーも表示されない)。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Setuid」の詳細全文を読む スポンサード リンク
|