首页 > 解决方案 > 共享对象上的 setuid 位

问题描述

我知道要加载 .so,必须设置 e'x'ecute 位。但是,我想知道 +s (setuid) 位对 .so 有什么影响?如果主程序没有设置“setuid”,但它加载的.so是setuid,它会改变uid吗?我发现没有,但很乐意得到一些解释。

$ cat a.c 
# include <stdio.h>


extern void func();


void main()
{

    func();
}
$ cat b.c 
# include <stdio.h>
# include <unistd.h>


void func()
{
    printf("UID %d",geteuid());
}


gcc --shared -o libb.so ./b.c
sudo chown root: libb.so ; sudo chmod +s ./libb.so
gcc a.c  -L. -Wl,-R. -lb

这并没有什么不同(好像 .so 中的 setuid 被忽略了)。

标签: cshared-objectssetuid

解决方案


推荐阅读