Open Source WEB

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)する。

--び


Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us