Setuid
setuid ビットと setgid ビットは通常、chmod コマンドで八進数形式の最上位桁を 4 または 2(両方なら 6)を設定することでセットされる。'chmod 6711' としたとき、setuid ビットと setgid ビットがセットされ(6)、所有者は読み取り/書き込み/実行が可能で(7)、グループとその他のユーザーは実行だけ可能となる(11)。なお、最上位桁の最下位ビットはスティッキービットである。
chmod には多くの場合、これらのビットをシンボルで指定するシンボリックモードもある。下記の実施例で使っている 'chmod g+s' はその例である。
実施例にあるC言語のプログラムは、プロセスの実ユーザー識別子と実グループ識別子および実効ユーザー識別子と実効グループ識別子を表示するだけのものである。実施例ではまず、このプログラムを 'bob' というユーザーでコンパイルし、'chmod' を使って setuid と setgid をセットしている。'su' コマンド自身も setuid 機能を使っているが、ここではユーザーを 'alice' に変更するために使われている。'chmod' コマンドの効果は 'ls -l' でチェックでき、最終的にデモプログラムが実行され、識別子が変更されていることが表示される。/etc/passwd ファイルの内容と比較していただきたい。
なお、'nosuid' オプション付きでマウントされたボリューム上では、このプログラムの実効ユーザー識別子の変更は無視される(変更されず、エラーも表示されない)。
setuid と setgid はディレクトリでは全く別の意味を持つ。
ディレクトリでsetgidパーミッションを設定すると(chmod g+s)、その後そのディレクトリ配下に作成されるファイルやサブディレクトリはそのグループを継承する(作成したユーザーの主グループは無視される。影響を受けるのはグループだけで、所有者は通常通りである)。新たに作成されるサブディレクトリは setgid ビットも継承する。
典型的な使用例は、グループ間で共有されるディレクトリ、特にCVSやSubversionのリポジトリに対して設定することである。バージョン管理システムのプロセスが適切なumask(一般的に002)でリポジトリにアクセスすることで、GIDを利用したアクセス制御が可能となる。
既存のファイルやサブディレクトリは元のままである点に注意が必要である。既存のサブディレクトリへの setgid ビットの設定は手で行う必要がある。そのコマンド行は以下のようになる。
または
setuidパーミッションをディレクトリに設定しようとしても、UNIX や Linux では無視される。FreeBSDでは設定が可能であり、setgid と同様に解釈される。すなわち、配下のファイルやサブディレクトリはそのディレクトリと同じ所有者となるよう設定される。