setuid(セットユーアイディー)とは | 意味や読み方など丁寧でわかりやすい用語解説
setuid(セットユーアイディー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
セットユーアイディー (セットユーアイディー)
英語表記
setuid (セットユーアイディー)
用語解説
setuidは、UNIXやLinuxなどのOSにおいて、ファイルに設定される特殊なパーミッション(権限)の一種である。通常、ファイルを実行する際は、そのコマンドを実行するユーザー自身の権限で動作する。しかし、特定の処理では、一般ユーザーが一時的にシステム管理者やファイルの所有者の権限を借りて実行する必要が生じる場合がある。setuidは、このような場面で利用され、一般ユーザーがファイルを実行する際に、一時的にそのファイルの所有者の権限で動作させる機能を提供する。
具体的には、setuidビットが設定された実行ファイルをユーザーが実行すると、プロセスの実効ユーザーIDが、そのファイルの所有者のユーザーIDに変更される。例えば、ファイルの所有者がroot(スーパーユーザー)であり、setuidビットが設定されている場合、そのファイルを一般ユーザーが実行すると、一時的にrootユーザーの権限で動作することになる。この機能は、パスワード変更コマンド(passwdなど)のように、一般ユーザーが直接アクセスできないシステムファイル(/etc/shadowなど)を更新する必要があるコマンドで利用されることが多い。これにより、一般ユーザーは自分のパスワードを変更できるが、システム全体に不正な変更を加えることはできないように制御される。
詳細について説明する。UNIX/Linuxにおけるファイルパーミッションは、読み取り(r)、書き込み(w)、実行(x)の3種類が、それぞれファイルの所有者、ファイルのグループ、その他のユーザーに対して設定される。これらは通常、chmodコマンドで数値(例: 755)や記号(例: u=rwx,g=rx,o=rx)で設定される。setuidはこれらとは異なる特殊なパーミッションビットの一つで、シンボリックモードでは実行権限のxの部分がsに置き換わって表示される(例: -rwsr-xr-x)。数値モードでは、通常のパーミッション値の先頭に4を追加することで設定される(例: 4755)。
setuidが設定されたファイルが実行されると、プロセスには複数のユーザーIDが関連付けられる。主なものに、コマンドを実行したユーザーを示す「実ユーザーID(Real User ID; RUID)」、プロセスが実際に使用する権限を示す「実効ユーザーID(Effective User ID; EUID)」、そして将来的に実効ユーザーIDを元に戻すために保存される「保存set-user-ID(Saved Set-User-ID; SUID)」がある。setuidビットが設定されたファイルを実行すると、実効ユーザーIDがファイルの所有者のIDに一時的に変更される。このとき、実ユーザーIDは実行したユーザーのIDのままであり、保存set-user-IDにはファイルの所有者のIDが保存される。これにより、プログラムは必要に応じて一時的に高い権限で動作し、処理が完了すれば実効ユーザーIDを実ユーザーIDに戻すなどして権限を降格させることが可能となる。
setuidは非常に強力な機能であるため、その利用には重大なセキュリティリスクが伴う。もし悪意のあるプログラムや脆弱性を持つプログラムにsetuidが設定され、かつファイルの所有者がrootである場合、一般ユーザーがそのプログラムを実行するだけで、システム全体を掌握される可能性がある。特にスクリプトファイル(シェルスクリプトやPerlスクリプトなど)にsetuidを設定することは、ほとんどの場合推奨されない。スクリプトはインタプリタを介して実行されるため、環境変数(特にPATH)の悪用や、スクリプト自体の脆弱性を突かれて意図しないコマンドが実行されるリスクが高まるためである。また、ダイナミックリンクライブラリの読み込みを操作する環境変数LD_PRELOADなどを悪用した攻撃も存在する。
そのため、setuidの設定は、セキュリティが十分に考慮されたバイナリファイルにのみ限定すべきである。システム管理者は、setuidビットが設定されたファイルを定期的に監査し、不必要なものがないか、あるいは脆弱性を持つプログラムに設定されていないかを確認することが重要である。たとえば、システム内のsetuidが設定されたファイルを検索するには、find / -perm /4000 2>/dev/nullのようなコマンドが利用できる。これにより、root権限を持つユーザーが不注意で設定したsetuidファイルを発見し、潜在的なリスクを排除することができる。
setuidと似た機能としてsetgid(set-group-ID)も存在する。setgidは、ファイルが実行された際に、プロセスがファイルのグループの権限で動作するように一時的に実効グループIDを変更する機能である。また、ディレクトリにsetgidが設定されている場合は、そのディレクトリ内に作成されるファイルやサブディレクトリが、親ディレクトリと同じグループを継承するようになる。これらもsetuidと同様に、権限管理とセキュリティ上の注意を要する特殊なパーミッションビットである。