「setuid」の版間の差分
提供: セキュリティ
(相違点なし)
|
2013年9月14日 (土) 18:25時点における版
Unix (FreeBSD, Linux など) では、プロセス は、なんらかの UID (ユーザー) と呼ばれるID番号が設定されて、実行されます。setuid (SetUID) とは、一時的(もしくは、ずっと)にUIDを他の UID に変更する機能です。
読み方
- setuid
- せっとゆーあいでぃー
概要
プロセス には、UID と GID (グループのID) が設定されています。
Apache HTTP Server の httpd は、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);