linux) setuid/gid & sticky bit

SetUID/GID

  • SetUID: ファイル実行時にプロセスをユーザーのIDではなく、ファイルの所有者のIDで実行する
  • SetGID: ファイル実行時にプロセスをユーザーのグループIDではなく、ファイルのグループIDで実行する

用途

ユーザーにはない権限をプログラムに付与

一般的に特定のコマンドをroot権限で実行する際に使用

Warning

権限昇格につながる可能性があるため、
権限を細分化したcapabilityを使用する方がセキュリティ的に有利

設定と解除

 1# setuid
 2## set
 3chmod u+s my_binary
 4chmod 4___ my_binary
 5## unset
 6chmod u-s my_binary
 7
 8# setgid
 9## set
10chmod g+s my_binary
11chmod 2___ my_binary
12## unset
13chmod g-s my_binary
14
15## rwx の x 部分が s で表示される

User ID

  • UID (User ID): ユーザーに付与された固有のID番号
  • Login name: UIDとマッピングされる文字列形式のユーザー名

プロセスの観点

  • Real user ID
    • 最初にプロセスを実行したユーザーのUID
  • Effective user ID (EUID)
    • 現在のプロセスが行使しているUID
    • プロセスが持つ権限の判断に使用される
    • 基本的にReal UIDと同じ
  • Saved user ID (SUID)
    • プロセス最初のeffective user ID
    • 元のEUIDに戻るために使用される
    • setuid実行ファイルを実行する際に、以前のEUIDを保存する
setuid
  • ファイル実行時に、そのファイルの所有者のUIDがプロセスのeffective UIDになる

    例: root所有のsetuidファイルを一般ユーザーが実行すると、そのプロセスはroot権限を得る

Sticky bit

ディレクトリ内のファイルの削除権限を制限する

ファイル所有者、ディレクトリ所有者、またはrootユーザーのみが
ファイルを削除および名前変更可能

ファイル名の変更

既存のファイルをディレクトリのエントリから削除し、
新しい名前で再度リンクする作業

  • ファイル作成: 可能
  • ファイル編集: ファイルに対してwrite権限があれば可能

設定と解除

1# set stickybit
2## set
3chmod +t /testdir
4chmod 1___ my_binary
5## unset
6chmod -t /testdir
7
8## rwx の x 部分が t で表示される

ディレクトリでの権限

権限 ディレクトリに適用される場合
r (読み取り) lsコマンドでディレクトリ一覧を表示できる
w (書き込み) ディレクトリ内でファイルの作成、削除が可能
x (実行) ディレクトリにアクセス可能 (cd実行可能)

Reference


Post
Category
Series