s-bit, sticky-bit について

今更ながら、基本のおさらい

s-bit (sビット)

setuid, setgid のことで、そのファイルのオーナーまたはグループの権限で実行する

ただし、各オーナーやグループに実行権が付いている、かつ、実行するユーザが実行できるパーミッション(オーナーかグループかその他か)になっている必要がある。

例えば、setuid が付いているがパーミッションが 744 、オーナーが root になっている場合、root 以外の他のユーザは実行できない。

ディレクトリの s-bit の場合
  • グループに付くs-bit (setgid) はその配下に作るファイルのグループが継承される。
  • ディレクトリを作ると、s-bit も継承する

sticky-bit (スティッキービット)

典型的な例は /tmp のディレクト

このsticky-bit が付いたディレクトリ配下に作ったファイルは作ったオーナーしか移動や削除などディレクトリのlinkを操作する行為は不可能になる

s-bit 同様パーミッションで許可されていないとlink操作は不能

chmod 等で指定する4桁目の8進数値

setuid 4000 (1 << 2)
setgid 2000 (1 << 1)
sticky-bit 1000 (1 << 0)

ls -l で見た s, S, t, T

大文字になっていると、そこには実行権を表す x が付いていないことを示す

ls -l
-rwxr-Sr-x 2 teramako teramako 4.0K 2013-04-22 19:15 a
-rwS------ 2 teramako teramako 4.0K 2013-04-22 19:15 b

のような場合、ファイル a はグループに実行権が付いていない。8進数で 2745 の状態。
ファイル b は オーナーに実行権が付いていなくて、8進数で 4600 の状態。