set-group-ID ビットは一般に setgid または SGID と呼ばれ、二つの重要な用途があります。実行可能な通常ファイルでは、新しいプロセスの実効グループ ID を変更できます。ディレクトリでは、新しく作られるエントリーにそのディレクトリのグループを継承させるため、共同作業用ツリーで特に便利です。
パーミッション · レッスン 6
Setgid
set-group-ID が実行時の資格情報と、共有ディレクトリのグループ継承へ与える影響を学びます。
実行可能ファイルの Setgid
長形式一覧では、グループの実行位置に setgid が表示されます。
$ ls -l /path/to/program
-rwxr-sr-x 1 root operators 24576 Jan 10 09:30 /path/to/program
小文字 s は setgid とグループ実行の両方が設定されていることを示します。大文字 S は setgid が設定され、グループ実行がないことを示します。
実行時にカーネルがこのビットを有効にすると、プロセスは実行ファイルのグループ所有者に基づく実効グループ ID を受け取ります。nosuid マウントなどの制御によって動作が抑止される場合があり、あらゆるファイル種別と環境に共通する保証として扱ってはいけません。
実行可能ファイルの setgid が有効なとき、実行ファイルのグループ所有者から得る資格情報はどれですか?
ディレクトリの Setgid
ディレクトリの setgid には別の目的があります。新しいファイルとサブディレクトリは通常、作成者の既定グループではなく、そのディレクトリのグループを継承します。Linux では新しいサブディレクトリが setgid ビットも継承するため、共有プロジェクトツリーで一貫したグループを維持できます。
Setgid 自体がグループ書き込み権限を与えるわけではありません。ディレクトリのモード、プロセスの umask、要求された作成モード、既定 ACL などの制御によって、引き続きアクセスが決まります。
$ sudo chgrp developers /srv/project
$ sudo chmod g+s /srv/project
$ ls -ld /srv/project
drwxr-sr-x 2 root developers 4096 Jan 10 09:30 /srv/project
/srv/project の setgid によって、新しく作成したファイルは通常何を継承しますか?
Setgid を設定・削除する
シンボリック形式でビットを設定します。
$ sudo chmod g+s myfile
先頭の8進数 2 を使い、通常モードビットと同時に設定できます。
$ sudo chmod 2755 myfile
特殊ビットだけを削除するには chmod g-s myfile を使います。
Setgid が先頭の特殊ビット8進桁へ加える値はどれですか?
共有ディレクトリを安全に使う
共同作業用ディレクトリでは、意図したグループ所有者、setgid、範囲を絞ったアクセスビットを組み合わせます。代表的なユーザーとして作成をテストし、ls -ld で結果を確認してください。グループ共有の問題を解決するためだけにツリーを全ユーザー書き込み可能にしてはいけません。専用グループ、適切な umask または既定 ACL、setgid ディレクトリを組み合わせれば、通常はより明確に制御できます。
Setgid だけを設定すれば、グループメンバーはディレクトリにファイルを作成できますか?
レッスン完了
Setgid を完了しました
実行可能ファイルとディレクトリにおける setgid の意味を区別できるようになりました。
グループの実行位置にある setgid を認識する。
実行可能ファイルの setgid を実効グループ ID へ関連付ける。
ディレクトリの setgid で共有ツリーのグループ所有権を維持する。
通常の書き込み権限と混同せず、ビットを設定・削除する。