排除错误的文件权限

时间:2017-05-21 13:50:02

标签: gdb shared-libraries file-permissions

我有一个创建日志文件的进程,文件权限为644.但是,当我运行使用LD_PRELOAD加载特定共享对象库的进程时,文件权限设置为2101(特别是设置了setgid权限)。我没有创建进程的程序的源代码,但我确实有.so文件的源代码。我确定文件权限是加载.so文件的结果,因为当我为创建文件的程序(我写的)加载.so文件时,文件权限设置了setuid / setgid位。我尝试将gdb用于我编写的程序,但我无法单步执行代码。我在使用gdb加载的.so文件启动程序的那一刻就得到了一个分段错误错误。我该如何解决这个问题?我没有看到.so文件的源代码中设置了任何文件权限。我写的程序非常简单,它看起来像这样 -

#include <stdio.h>

int main(){
    printf(" This is my program");
    system("touch /tmp/myfile.txt");

    return(0);
} 

1 个答案:

答案 0 :(得分:0)

  

我没有在.so文件的源代码中看到任何文件权限。

您的.so是否介入open

使用&#34;随机&#34;创建文件的一种方法权限是(错误地)插入open,如下所示:

int open(const char *fname, int flags)
{
    ... do whatever
    return real_open(fname, flags);  // problem: omits 3rd argument to open
                                     // and passes "garbage" permissions when
                                     // O_CREATE is in flags.
}
  

我在使用gdb加载的.so文件启动程序的那一刻就出现了分段错误错误。

当GDB运行你的程序时,它会调用$SHELL(以处理任何输入/输出重定向)。您的shell可能不会错误地插入open