Linux下,程序加了sgid位后为何取不到环境变量?

joysunstar 2009-12-25 07:48:13
大侠们,以下这段程序,Linux下编译成可执行程序后,为何加了sgid( chmod 2755)后就不能得到环境变量了?添加s属性前没有问题,输出正常。 谢谢!

1 #include <iostream>
2 #include <unistd.h> // For using setuid()
3 using namespace std;
4
5 void outputEnv(char *env)
6 {
7 char *en=getenv(env);
8 if(en)
9 cout<<"env "<<env<<" = "<<en<<endl;
10 else
11 cout<<"env var"<<env<<" is null"<<endl;
12 }
13
14 int main(int argc, char *argv[])
15 {
16 int gid = 0;
17
18 cout<<"-------Initial setRgid---------"<<endl;
19 outputEnv("LD_LIBRARY_PATH");
20 if ( gid = getegid())
21 {
22 cout<<"-------before setRgid---------"<<endl;
23 cout<<"get GEid =" <<gid<<endl;
24 outputEnv("LD_LIBRARY_PATH");
25 }
26 if(setgid(getgid())==-1)
27 return 1;
28 cout<<"-------after setRgid---------"<<endl;
29 cout<<"get Gid =" <<getgid()<<endl;
30 outputEnv("LD_LIBRARY_PATH");
31
32 return 0 ;
33 }
34

输出:
-------Initial setRgid---------
env varLD_LIBRARY_PATH is null
-------before setRgid---------
get GEid =201
env varLD_LIBRARY_PATH is null
-------after setRgid---------
get Gid =752
env varLD_LIBRARY_PATH is null


...全文
69 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xparmenides 2009-12-25
  • 打赏
  • 举报
回复
mark
太乙 2009-12-25
  • 打赏
  • 举报
回复
up
~~
joysunstar 2009-12-25
  • 打赏
  • 举报
回复
我找到答案了,这是linux的安全特性
$LD_LIBRARY_PATH omitted from environment of setuid/setgid programs run by non-owner user
the environment variable LD_LIBRARY_PATH. Except if the executable is a setuid/setgid binary, in which case it is ignored.
do_fork 2009-12-25
  • 打赏
  • 举报
回复
哪里不正常了?

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧