setuid()の家族のメモ

setuid(), getuid(), setgid(), getgid()
実ユーザIDと実効ユーザID (実グループIDと実効グループID)。

seteuid(), geteuid(), setegid(), getegid()
実効ユーザID、実効グループID。実行しているプロセスのことで、呼び出し元のことではないので注意。
ファイルシステムのUID,GIDのパーミッションのビットと関係が深い。よくわからない人は passwd プログラムのパーミッションを確認してみるとよい。

setpgid(), getpgid()
プロセスグループID。killのpidにマイナスの値を設定する用途に使う。セッションIDにも関係するらしいけど私がまだよく理解できてない。setpgrp(), getpgrp() はもう使わなくてよいみたい。

setsid(), getsid()
セッションID。ログインセッションの単位を管理する。Wikipedia: プロセスグループによると、CUIのころのこれらの考え方がGUI時代になってほとんど通用しなくなっているらしい、けど私がまだよく理解できていない。このへんも読んどくといいかもしれない → なぜnohupをバックグランドジョブとして起動するのが定番なのか?(擬似端末, Pseudo Terminal, SIGHUP他)

setreuid(), setregid()
実ユーザIDと実効ユーザID、実グループIDと実効グループID。rootじゃない場合は、権限の関係で実ユーザと実効ユーザIDを入れ替えることもできないのでその用途で使う・・・と思う。でも↓の保存ユーザID(保存グループID)を使えばいいような・・・

● 保存ユーザID, 保存グループID
実ユーザID(実グループID)や実効ユーザID(実効グループID)が変更された場合、つまりsetuid(),setguid(),seteuid(),setegui()に、規則に基づいて変更前のIDがこの保存ユーザID(保存グループID)にコピーされる。再びseteuid()して元の権限に戻ろうとした時などに使われる。いつコピーされていつコピーされないかとか、保存ユーザIDと一致するものにのみseteuid()できるとか、この辺の規則が非常にややこしいので注意。

一言でまとめると、rootが所有者のファイルのUID/GIDビットを立てたりrootにsetuid()したりするのは、たいていセキュリティ的にろくなことがないのでやめておこう。

このブログ記事について

このページは、らるるが2015年9月18日 00:00に書いたブログ記事です。

ひとつ前のブログ記事は「/dev/sda は /dev/sdz の次どうなるのか」です。

次のブログ記事は「pigzで圧縮を並列処理して高速化」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0