[Exp2016]ファイルのモード#s ビット

s ビット

s ビットとは, あるファイルの実行者を「成り変わる」機能のことを言います.

s ビットには, SUID ビットと SGID ビットの二種類あります.

具体例で見て行きましょう. SUID の例として /usr/bin/passwd を見てみます.

午前の実習で, passwd コマンドが出てきました (ログイン用パスワードの変更法). passwd は /usr/bin/ ディレクトリに存在します. passwd コマンドを実行してパスワードを変更すると, /etc/shadow が書き変わるのでしたね. そこで, /etc/shadow のパーミッションを見てみると,

$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1349 Apr 20 03:34 /etc/shadow

となっていますから, このファイルの書き込みができるのは, このファイルの持ち主, すなわち root だけです. しかし, 誰もがパスワードを変更したい (/etc/shadow が書き変わって欲しい) と思っています. どうやって /etc/shadow を書き変えることができるのでしょうか?

そこで /usr/bin/passwd のパーミッションを見てみます. すると,

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 28480 Feb 27  2007 /usr/bin/passwd 

となっています.

モードの左から 4 番目に s という文字が書かれています. これが SUID ビットで, このファイルが実行されると, プログラムの持ち主がこのファイルを実行したものと解釈されることを表します. つまり, passwd コマンドを一般ユーザが実行すると, root が実行したものと解釈されるのですから, /etc/shadow を書き換えることができるという訳です.

SGID は上のグループ版です. 似たようなものなので説明は割愛します.

Last modified:2016/07/09 18:53:52
Keyword(s):
References: