setuid

提供: セキュリティ
2013年9月14日 (土) 18:25時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「Unix (FreeBSD, Linux など) では、プロセス は、なんらかの UID (ユーザー) と呼ばれるID番号が設定されて、実行され...」)

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

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

読み方

setuid
せっとゆーあいでぃー

概要

プロセス には、UIDGID (グループの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);

使い方

関連項目




スポンサーリンク