SGID【setgid】Set Group ID
概要

UNIX系OSでは、ファイルやディレクトリごとに「所有者」「グループ」「その他」で区分されたそれぞれの利用者に対する読み書きや実行の可否を「パーミッション」(permission)として設定できる。SGIDはこのパーミッションに付帯する特殊なフラグの一つであり、区分ごとの通常のアクセス権とは独立に設定される。
通常、実行ファイルはそれを起動した利用者自身のグループに設定された権限で動作するが、SGIDが設定された実行ファイルは、そのファイルの所有者のグループの権限で実行される。これにより、一般利用者が特定のコマンドを実行する際に、管理者グループの権限を一時的に行使するといった構成を実現できる。
ディレクトリにSGIDを設定した場合の挙動は実行ファイルとは異なる。SGIDが有効なディレクトリ配下で新たに作成されたファイルやサブディレクトリは、作成した利用者のグループではなく、そのディレクトリのグループを自動的に継承する。複数の利用者が共有ディレクトリで作業する環境で、作成されるファイルのグループ所有権を統一する目的で用いられる。
SGIDの設定と解除にはchmodコマンドを使用する。数値表記では通常の3桁のパーミッション値(例:755)の前に「2」を付加した4桁の値(例:2755)を指定することで有効になり、「2」の無い通常の値を指定すると解除される。記号表記の場合は「g+s」で有効化、「g-s」で解除である。lsコマンドでパーミッションを確認した際、グループの実行権限ビットの位置に「s」が表示されていればSGIDが有効な状態であり、実行権限がない場合は大文字の「S」が表示される。
類似の仕組みとして、グループではなくファイルの所有ユーザーの権限でプログラムを実行させる「SUID」(setuid)がある。SGIDやSUIDは設定を誤るとセキュリティ上のリスクを生じさせる恐れがあるため、近年のシステムでは「ケーパビリティ」(capability)などより細かな権限管理の仕組みと組み合わせて運用されることも多い。