Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
2006-09-25 [Gauche] 実効時にユーザ/グループを切り替える
特権ポートをlisten(2)するようなサーバプログラムを書く場合、 サーバソケットを開いた直後に特権を放棄するようにユーザを切り替えるのが定番だ。
(define (setuidgid! user . may-be-group)
(and-let* ((pw (sys-getpwnam user))
(uid (ref pw 'uid))
(gid (or (and-let* ((g (get-optional may-be-group #f)))
(sys-group-name->gid g))
(ref pw 'gid))))
(format (current-error-port) "~d:~d\n" uid gid)
(sys-setgid gid)
(sys-setuid uid)
#t))
これを
(setuidgid! foo)
と呼び出すとユーザfooのプライマリグループにsetgid(2)してからfooに setuid(2)する。
(setuidgid! foo bar)
なら、グループbarにsetgid(2)してからユーザfooにsetuid(2)する。
--び
There is no comment.