Linux下,程序加了sgid位后为何取不到环境变量?
大侠们,以下这段程序,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