我有要求将进程作为root生成,然后将其权限放到非root用户,因此为了实现这一点,我使用setbit作为二进制文件并将所有者更改为root。然后我以非root用户的身份生成进程,最初以root身份启动,在完成必要的任务后,我使用setuid(getuid())调用将其权限丢弃给非root用户。这是怎么回事所有者:位置/ proc /(pid)/所有文件的组仍然是root:root。由于我的进程产生的线程(在删除权限之后)。在/ proc /(pid)/ exe中是否有拒绝访问权限。任何人都知道为什么setuid没有设置所有者:文件位置/ proc /(pid)的组?
答案 0 :(得分:3)
在Linux下,如果一个进程在启动时设置了id,或者如果用户有权执行二进制但没有读取它,并且可能在某些其他条件下,则在其中清除“dumpable”标志。核心。出于安全原因,此标志可以防止以下情况:它禁止核心转储(核心转储可能泄漏特权信息),阻止普通用户附加调试器,并限制对/proc/<pid>
中该大多数文件的访问
清除后,即使进程失去特权,也无法再次设置该标志。
(实际上,系统调用prctl(PR_SET_DUMPABLE)
可以更改标志的值,但我相信系统调用不适用于一般用途。)
更重要的是,我想知道你在程序中做了什么,这取决于/proc/<pid>/exe
或/proc/<pid>
中可读/可打开的其他文件。