ls -l /usr/bin/passwd を見たら -rwsr-xr-x って出た
x のところが s になってる。これ何なん
【疑問】passwd の「rws」の s って何?SUID・SGID・スティッキービット【LPICレベル1】
>>1
SUID(セットユーザーID)。このファイルを実行すると、実行した人ではなくファイルの所有者の権限でプロセスが動く
passwd の所有者は root やから、誰が実行しても root の権限で動く
>>2
なんでわざわざそんなことするん
>>3
パスワードは /etc/shadow に保存されてて、このファイルは root しか書き換えられない
一般ユーザーが自分のパスワードを変えるには、passwd が root として動いて書き込む必要がある
>>4
それ危なくない?root で動くプログラムを誰でも起動できるってことやろ
>>5
危ない。プログラムにバグがあると、そこから root の権限を乗っ取られることがある
だから SUID はどうしても必要なプログラムにだけつける。ついているファイルは find /usr/bin -perm -4000 で一覧にできて、passwd や sudo、chsh などが出てくる
数字で指定するときはどう書くん
>>7
いつもの3桁の前にもう1桁つける。SUID が 、SGID が 、スティッキービットが
chmod 4755 file で -rwsr-xr-x になる。8進数の桁ごとの足し算やから、繰り上がりは起きない
>>8
SGID とスティッキービットの例も
>>9
SGID は chmod 2755 で rwxr-sr-x(グループの x が s になる)
スティッキービットは chmod 1777 で rwxrwxrwt(その他の x が t になる)。/tmp がまさにこの
大文字の S を見たことあるんやけど、小文字と何が違うん
>>11
x がないのに SUID だけ立ってると大文字になる。chmod 4644 file は -rwSr--r--
実行できないファイルに SUID をつけても意味がないから、大文字の S は設定ミスを疑う合図
スティッキービットも、その他の x がないと大文字の T になる
SGID は、ファイルとディレクトリで意味が違うって聞いた
>>13
ファイルにつけると、実行したときにファイルのグループの権限で動く(SUID のグループ版)
ディレクトリにつけると、中に新しく作ったファイルのグループが、作った人のグループではなくディレクトリのグループになる。中に作ったサブディレクトリにも SGID が引き継がれる
>>14
それ何に使うん
>>15
チームの共有ディレクトリ。グループを dev にして chmod g+s しておけば、誰が作ったファイルも dev グループになるから、メンバー全員がグループの権限で読み書きできる
>>16g+s をつける前から入ってたファイルも dev に変わるんか
>>17
変わらない。引き継ぐのは、つけたあとに作るファイルだけ
前からあるファイルは chgrp で自分で直す
スティッキービットは何をするん
>>19
ディレクトリにつけると、中のファイルを削除したり名前を変えたりできるのが、そのファイルの所有者、ディレクトリの所有者、root だけになる/tmp は全員が書き込めるけど、他人のファイルは消せない
>>20
ディレクトリに w があれば中のファイルは消せる、って習ったんやけど
なら全員に w があるやん
>>21
普通はそう。スティッキービットはその例外を作るためのビット
の w で新しいファイルは誰でも作れるけど、消したり名前を変えたりできるのは自分のファイルだけになる
シェルスクリプトに SUID をつけたら、root として動かせるんちゃうの
>>23
Linux では、#! で始まるスクリプトの SUID と SGID は無視される
スクリプトを root で動かしたいなら、sudo で許可するのが普通
記号で指定する書き方もある?
>>25
ある。SUID は chmod u+s、SGID は chmod g+s、スティッキービットは chmod +t
外すときは u-s、g-s、-t
SUID は所有者の権限で実行、SGID はグループの権限で実行かグループの引き継ぎ、スティッキービットは自分のファイルしか消せなくする
数字は ・・ を先頭の桁に足す。これで全部やな
管理人のひとこと
- SUID():実行するとファイル所有者の権限で動く。passwd(、
-rwsr-xr-x)が root として/etc/shadowを書き換えられるのはこのため。 - SGID():ファイルならグループの権限で実行。ディレクトリなら、あとから作るファイルがディレクトリのグループを引き継ぐ(既存のファイルは変わらない)。
- スティッキービット():ディレクトリ内のファイルを消したり名前を変えたりできるのは、ファイルの所有者・ディレクトリの所有者・root だけ。
/tmpは 。 - x がないのに立っていると大文字(S、T)になる。SUID は権限の乗っ取りの入口になりうるので最小限にし、
find -perm -4000で確認する。Linux はスクリプトの SUID を無視する。