「setuid」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「Unix (FreeBSD, Linux など) では、プロセス は、なんらかの UID (ユーザー) と呼ばれるID番号が設定されて、実行され...」)
 
 
行1: 行1:
[[Unix]] ([[FreeBSD]], [[Linux]] など) では、[[プロセス]] は、なんらかの [[UID]] (ユーザー) と呼ばれるID番号が設定されて、実行されます。[[setuid]] (SetUID) とは、一時的(もしくは、ずっと)にUIDを他の [[UID]] に変更する機能です。
+
[[Unix]] ([[FreeBSD]], [[Linux]] など) では、プロセス は、なんらかの UID (ユーザー) と呼ばれるID番号が設定されて、実行されます。[[setuid]] (SetUID) とは、一時的(もしくは、ずっと)にUIDを他の UID に変更する機能です。
  
 
'''読み方'''
 
'''読み方'''
行6: 行6:
  
 
== 概要 ==
 
== 概要 ==
 
+
プロセス には、UID と GID (グループのID) が設定されています。
[[プロセス]] には、[[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]] の [[パーミッション]] には、 the setuid bit があります。
+
 
SetUID が与えられている場合、ファイルのオーナーの権限でコマンドが実行できます。
 
SetUID が与えられている場合、ファイルのオーナーの権限でコマンドが実行できます。
[[passwd]] コマンドでは、ユーザーが自身の[[パスワード]]を変更しますが、それは、[[root]] ユーザーの [shadow]] ファイル/ master.passwd を更新します。
+
passwd コマンドでは、ユーザーが自身の[[パスワード]]を変更しますが、それは、[[root]] ユーザーの [shadow]] ファイル/ master.passwd を更新します。
ユーザーは、直接、それらのファイルを編集できませんが、[[passwd]] コマンドを通して、自身のエントリを変更ができます。これを実現するのが the setuid bit です。
+
ユーザーは、直接、それらのファイルを編集できませんが、passwd コマンドを通して、自身のエントリを変更ができます。これを実現するのが the setuid bit です。
  
/path/to/command に SetUID を付与するには、[[chmod]] コマンドを使います。
+
/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]] では、[[libc]] で以下の[[システムコール]]が提供されます。
+
[[FreeBSD]] では、libc で以下の[[システムコール]]が提供されます。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
#include <sys/types.h>
 
#include <sys/types.h>
行44: 行41:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
== 使い方 ==
 
== 使い方 ==
 
 
== 関連項目 ==
 
== 関連項目 ==
* [[chmod]]
+
* 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 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);

使い方

関連項目