setuid

提供: セキュリティ
2015年9月22日 (火) 18:15時点におけるDaemon (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

Unix (FreeBSD, Linux など) では、プロセス は、なんらかの UID (ユーザー) と呼ばれるID番号が設定されて、実行されます。setuid (SetUID) とは、一時的(もしくは、ずっと)にUIDを他の UID に変更する機能です。

読み方

setuid
せっとゆーあいでぃー

概要

プロセス には、UID と GID (グループのID) が設定されています。

Apache HTTP Serverhttpd は、root 権限で実行されますが、httpd の子プロセスは、www などの別のユーザーで実行されます。これは、 setuid で UID を変更することで実現されます。

最小権限の原則 を参照してください。

the setuid bit

Unix の パーミッション には、 the setuid bit があります。 SetUID が与えられている場合、ファイルのオーナーの権限でコマンドが実行できます。 passwd コマンドでは、ユーザーが自身のパスワードを変更しますが、それは、root ユーザーの [shadow]] ファイル/ master.passwd を更新します。 ユーザーは、直接、それらのファイルを編集できませんが、passwd コマンドを通して、自身のエントリを変更ができます。これを実現するのが the setuid bit です。

/path/to/command に SetUID を付与するには、chmod コマンドを使います。

chmod u+s /path/to/command

Cのプロトタイプ

FreeBSD では、libc で以下のシステムコールが提供されます。

#include <sys/types.h>
#include <unistd.h>
 
int
setuid(uid_t uid);
 
int
seteuid(uid_t euid);
 
int
setgid(gid_t gid);
 
int
setegid(gid_t egid);

使い方

関連項目




スポンサーリンク