From: Hidetoshi NAGAI Date: 2003-07-23T10:00:36+09:00 Subject: [ruby-list:37942] Re: control user ID / group ID 永井@知能.九工大です. ちょっとお尋ねします. From: Hidetoshi NAGAI Subject: [ruby-list:37933] Re: control user ID / group ID Date: Tue, 22 Jul 2003 18:05:01 +0900 Message-ID: <20030722.180500.112612239.nagai@ai.kyutech.ac.jp> > > やはり必要性がないという位置づけなんでしょう。setreuid(2)の冒頭が、 > > DESCRIPTION > > This interface is made obsolete by the saved ID functionality in > > setuid(2) and seteuid(2). > > となっていて、DESCRIPTIONの直後の最初の行が強調されています。 > やはり 4.4 BSD 系の場合は,「 setreuid()/setregid() は使用不可」 > ということで良さそうですね. と書きましたが,もともと setregid() がこわれている defined(__bsdi__) || (defined(__APPLE__) && defined(__MACH__)) な皆様はともかく, defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) な皆様は「 obsolete だから setreuid() は使わない」で構いませんか? これを使わない場合,つまり,setuid() + seteuid() での実装の場合, root で起動して (r,e,s) == (root,root,root) の状態から (r,e,s) == (user1, user2, user2) というようなユーザ権限の状態に 到達することはできません (のはずです). 「 OS がその方向に進もうとしているんだから仕方ない or そうすべき」 ということでしたら, -------------------------------------------------------------------- #if defined(__APPLE__) && defined(__MACH__) && !defined(__MacOS_X__) #define __MacOS_X__ 1 #endif #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) #define HAVE_44BSD_SETUID 1 #define HAVE_44BSD_SETGID 1 #endif #if defined(__MacOS_X__) || defined(__bsdi__) #define BROKEN_SETREUID 1 #define BROKEN_SETREGID 1 #endif #if defined(HAVE_44BSD_SETUID) || defined(__MacOS_X__) #if !defined(USE_SETREUID) && !defined(BROKEN_SETREUID) #define OBSOLETE_SETREUID 1 #endif #if !defined(USE_SETREGID) && !defined(BROKEN_SETREGID) #define OBSOLETE_SETREGID 1 #endif #endif -------------------------------------------------------------------- としておいて,「 defined(OBSOLETE_SETREUID) であれば使用不可」 というように実装してしまうことにします. いかがでしょうか? -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp