一部のプログラムには、呼び出し元が通常持たないアクセスを狭く制御して与える必要があります。実行可能な通常ファイルで set-user-ID ビットを使うと、新しいプロセスがファイル所有者のユーザー ID を実効ユーザー ID として受け取る場合があります。そのプログラムは呼び出し元の情報を保持しつつ、その識別情報で認可された操作を行えます。
パーミッション · レッスン 5
Setuid
set-user-ID モードビットが実行可能プログラムへ与える影響と、慎重なセキュリティレビューが必要な理由を学びます。
Setuid は一般的な「root として実行」という命令ではありません。効果は実行ファイルの所有者、オペレーティングシステム、ファイルシステムとマウントオプション、プログラムによる資格情報管理に左右されます。
Setuid を見分ける
setuid の passwd 実行ファイルを使うシステムでは、長形式一覧が次のようになる場合があります。
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68248 Jan 10 09:30 /usr/bin/passwd
所有者の実行位置にある小文字 s は、setuid と所有者実行の両方が設定されていることを示します。setuid があって所有者実行がない場合、ls -l はその位置に大文字 S を表示します。
すべてのディストリビューションが同じモードや認証設計を使うとは限りません。例に依存せず、実際のシステムを確認してください。
所有者の実行位置にある小文字 s は何を示しますか?
資格情報の変更を理解する
実行時にカーネルが setuid を有効にすると、新しいプロセスは通常、実行ファイルの所有者に基づく実効ユーザー ID を得ます。root 所有のプログラムなら root として認可されるアクセスを提供できますが、それはプログラムの実行中に、そのコードが行う操作を通じてだけです。
この機構により、慎重に作られたプログラムが要求を検証し、保護された状態へ限定的な変更を加えられます。たとえば、ローカルのパスワード変更ツールには、通常ユーザーが直接編集できない認証データへの制御されたアクセスが必要な場合があります。現代の実装は PAM、ファイルロック、ポリシーなどの保護策にも依存し、setuid だけで完全なワークフローを説明することはできません。
Setuid 実行ファイルの効果が有効なとき、主にファイル所有者から得る識別情報はどれですか?
ビットを設定・削除する
Setuid はシンボリック形式で設定できます。
$ sudo chmod u+s myfile
8進表記では、setuid は先頭の特殊ビット桁に 4 を加えます。
$ sudo chmod 4755 myfile
ここでは先頭の 4 が setuid を、755 が通常の所有者、グループ、その他のビットを設定します。ほかのモードを変えず setuid だけを削除するには chmod u-s myfile を使います。
Setuid 特殊ビットを表す先頭の8進値はどれですか?
Setuid をセキュリティ上重要なものとして扱う
特権 setuid プログラムの欠陥は、権限昇格の経路になる可能性があります。このようなプログラムは入力を検証し、信頼する環境とファイルパスを制御し、安全でないサブプロセス動作を避け、特権コードを最小化し、できるだけ早く昇格済み資格情報を破棄しなければなりません。
Linux は通常、解釈されるスクリプトの setuid を有効にしません。安全に実現するには競合状態やインタープリターに関する問題があるためです。nosuid でマウントされたファイルシステムも、setuid と setgid の効果を抑止します。要件に合うなら、サービスが仲介する操作、慎重に範囲を絞った sudo ポリシー、ケーパビリティなど、より狭い仕組みを優先してください。
共有システム上での実験として、任意のシェル、インタープリター、コピーしたプログラムへ setuid を追加してはいけません。既存の setuid ファイルを監査し、隔離された破棄可能な環境だけで練習してください。
ファイルシステムを nosuid でマウントする目的は何ですか?
レッスン完了
Setuid を完了しました
Setuid を見分け、その資格情報とセキュリティ上の影響を説明できるようになりました。
所有者の実行位置にある
sまたはSを見つける。Setuid 実行を、実行ファイル所有者の実効ユーザー識別情報へ関連付ける。
シンボリック形式または8進形式の
chmodでビットを設定・削除する。すべての特権実行ファイルをセキュリティ上重要なコードとして扱う。