如何在 Linux 中通过 C/C++ 创建另一个用户的文件?

How to create file as another user via C/C++ in Linux?

LinuxC/C++有openfopenAPI,但创建的文件属于进程uid。

如果我们想改变这个文件的owner/group,我们可以在文件创建后使用chownfchown API。

但是,是否有一个 API 用于作为另一个用户创建文件,而不是两个 API?

在 Linux 中不可能。

允许这样做可能会导致一些微妙的安全漏洞(远程代码执行、破坏其他用户的文件等),因此是不允许的。

相反,请 运行 sudo 下的过程。

没有专用于此的 Unix api,但您可以将当前用户更改为 创建文件之前的其他用户,例如:

  1. 确保您有权限。当前有效用户必须是 "root" 或在可执行文件上设置用户或组 ID。

  2. 呼叫 setgidsetuid 给其他用户。

  3. 创建文件。

  4. 如有需要请致电setuidsetgid给老用户。

因为用户是进程范围的,如果你的程序是多线程的,你可能 需要分叉一个子进程来执行我之前列出的步骤。

但是如果你想让非root用户(比如nobody)运行你的程序,你可以给 您的可执行文件的权限:

sudo chown root:root ./your_app && sudo chmod gu+s ./you_app

现在可以调用setuid(0)setgid(0)获取root权限