「setuid」の版間の差分
提供: セキュリティ
行1: | 行1: | ||
− | [[Unix]] ([[FreeBSD]], [[Linux]] など) | + | [[Unix]] ([[FreeBSD]], [[Linux]] など) では、プロセス は、なんらかの UID (ユーザー) と呼ばれるID番号が設定されて、実行されます。[[setuid]] (SetUID) とは、一時的(もしくは、ずっと)にUIDを他の UID に変更する機能です。 |
'''読み方''' | '''読み方''' | ||
行6: | 行6: | ||
== 概要 == | == 概要 == | ||
− | + | プロセス には、UID と GID (グループのID) が設定されています。 | |
− | + | ||
[[Apache HTTP Server]] の [[httpd]] は、[[root]] 権限で実行されますが、[[httpd]] の子プロセスは、www などの別のユーザーで実行されます。これは、 [[setuid]] で UID を変更することで実現されます。 | [[Apache HTTP Server]] の [[httpd]] は、[[root]] 権限で実行されますが、[[httpd]] の子プロセスは、www などの別のユーザーで実行されます。これは、 [[setuid]] で UID を変更することで実現されます。 | ||
[[最小権限の原則]] を参照してください。 | [[最小権限の原則]] を参照してください。 | ||
− | |||
== the setuid bit == | == the setuid bit == | ||
− | + | [[Unix]] の パーミッション には、 the setuid bit があります。 | |
− | [[Unix]] の | + | |
SetUID が与えられている場合、ファイルのオーナーの権限でコマンドが実行できます。 | SetUID が与えられている場合、ファイルのオーナーの権限でコマンドが実行できます。 | ||
− | + | passwd コマンドでは、ユーザーが自身の[[パスワード]]を変更しますが、それは、[[root]] ユーザーの [shadow]] ファイル/ master.passwd を更新します。 | |
− | + | ユーザーは、直接、それらのファイルを編集できませんが、passwd コマンドを通して、自身のエントリを変更ができます。これを実現するのが the setuid bit です。 | |
− | /path/to/command に SetUID | + | /path/to/command に SetUID を付与するには、chmod コマンドを使います。 |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
chmod u+s /path/to/command | chmod u+s /path/to/command | ||
行26: | 行23: | ||
== Cのプロトタイプ == | == Cのプロトタイプ == | ||
− | [[FreeBSD]] | + | [[FreeBSD]] では、libc で以下の[[システムコール]]が提供されます。 |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#include <sys/types.h> | #include <sys/types.h> | ||
行44: | 行41: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 使い方 == | == 使い方 == | ||
− | |||
== 関連項目 == | == 関連項目 == | ||
− | * | + | * chmod |
* [[sudo]] | * [[sudo]] | ||
* [[最小権限の原則]] | * [[最小権限の原則]] | ||
− | * | + | * パーミッション |
− | <!-- | + | <!-- vim: filetype=mediawiki |
− | vim: filetype=mediawiki | + | |
--> | --> |
2015年9月22日 (火) 18:15時点における最新版
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);