Linux 文件所有者:组不';t在位置/proc/处更改<;pid>;/在setuid()之后?

Linux 文件所有者:组不';t在位置/proc/处更改<;pid>;/在setuid()之后?,linux,process,linux-kernel,setuid,Linux,Process,Linux Kernel,Setuid,我需要生成一个作为根的进程,然后将其权限下放给非根用户,因此为了实现这一点,我对二进制文件使用了setbit,并将所有者更改为根。然后,我以非root用户的身份生成了该进程,最初它以root用户的身份启动,在完成必要的任务后,我使用setuid(getuid())调用将其权限放弃给非root用户。这样做的结果是/proc/(pid)/位置的所有文件的所有者:组仍然是root:root。因此,我的进程产生的线程(在删除权限后)将被删除。确实在/proc/(pid)/exe中拒绝访问。任何人都知道为

我需要生成一个作为根的进程,然后将其权限下放给非根用户,因此为了实现这一点,我对二进制文件使用了setbit,并将所有者更改为根。然后,我以非root用户的身份生成了该进程,最初它以root用户的身份启动,在完成必要的任务后,我使用setuid(getuid())调用将其权限放弃给非root用户。这样做的结果是/proc/(pid)/位置的所有文件的所有者:组仍然是root:root。因此,我的进程产生的线程(在删除权限后)将被删除。确实在/proc/(pid)/exe中拒绝访问。任何人都知道为什么setuid不在文件位置/proc/(pid)设置owner:group吗?

在Linux下,如果进程启动时设置了id,或者如果用户有权限执行二进制文件但不读取它,并且可能在其他一些条件下,内核内部会清除“dumpable”标志。出于安全原因,此标志防止了一些事情:它不允许核心转储(核心转储可能泄漏特权信息),防止普通用户附加调试器,并限制对该进程的
/proc/
中大多数文件的访问

清除后,即使进程放弃特权,也无法再次设置该标志

(实际上,有一个系统调用
prctl(PR\u SET\u DUMPABLE)
,它可以更改标志的值,但我相信该系统调用并非用于一般用途。)


更重要的是,我想知道您在依赖于
/proc//exe
/proc/
中的其他文件可读/可打开的程序中正在做什么。

实际上,此过程会生成多个线程。假设使用克隆生成20个线程,并且setuid()(在代码流中)在生成18个线程之后发生,然后REST2线程会遇到一些存储在/proc/pid的文件的权限问题。我在setuid()调用之后使用了prctl(pr_set_dumpable,1)来启用coredumps生成。我发现使用prctl(pr_set_dumpable,1)也会更改/proc/(pid)位置上所有文件的所有者:组。我不是OP,但有同样的问题:我的程序必须绑定到1024以下的TCP端口,但没有其他成为root的原因,所以我使用setuid(getuid)技巧,在阅读了您的答案后,现在使用prctl(PR_SET_DUMPABLE,1)调用,但这还不够,因为我需要我的进程出现在“fuser-v”和“lsof”中“由同一非根用户运行时输出,但这不起作用,因为对于该非根用户,/proc/PID/fd中的虚拟符号链接仍然无法读取:readlink在EACCES上失败(权限被拒绝)