如何在 Linux 中通过 C/C++ 创建另一个用户的文件?
How to create file as another user via C/C++ in Linux?
LinuxC/C++有open
或fopen
API,但创建的文件属于进程uid。
如果我们想改变这个文件的owner/group,我们可以在文件创建后使用chown
或fchown
API。
但是,是否有一个 API 用于作为另一个用户创建文件,而不是两个 API?
在 Linux 中不可能。
允许这样做可能会导致一些微妙的安全漏洞(远程代码执行、破坏其他用户的文件等),因此是不允许的。
相反,请 运行 sudo
下的过程。
没有专用于此的 Unix api,但您可以将当前用户更改为
创建文件之前的其他用户,例如:
确保您有权限。当前有效用户必须是 "root" 或在可执行文件上设置用户或组 ID。
呼叫 setgid
和 setuid
给其他用户。
创建文件。
如有需要请致电setuid
和setgid
给老用户。
因为用户是进程范围的,如果你的程序是多线程的,你可能
需要分叉一个子进程来执行我之前列出的步骤。
但是如果你想让非root用户(比如nobody)运行你的程序,你可以给
您的可执行文件的权限:
sudo chown root:root ./your_app && sudo chmod gu+s ./you_app
现在可以调用setuid(0)
和setgid(0)
获取root权限
LinuxC/C++有open
或fopen
API,但创建的文件属于进程uid。
如果我们想改变这个文件的owner/group,我们可以在文件创建后使用chown
或fchown
API。
但是,是否有一个 API 用于作为另一个用户创建文件,而不是两个 API?
在 Linux 中不可能。
允许这样做可能会导致一些微妙的安全漏洞(远程代码执行、破坏其他用户的文件等),因此是不允许的。
相反,请 运行 sudo
下的过程。
没有专用于此的 Unix api,但您可以将当前用户更改为 创建文件之前的其他用户,例如:
确保您有权限。当前有效用户必须是 "root" 或在可执行文件上设置用户或组 ID。
呼叫
setgid
和setuid
给其他用户。创建文件。
如有需要请致电
setuid
和setgid
给老用户。
因为用户是进程范围的,如果你的程序是多线程的,你可能 需要分叉一个子进程来执行我之前列出的步骤。
但是如果你想让非root用户(比如nobody)运行你的程序,你可以给 您的可执行文件的权限:
sudo chown root:root ./your_app && sudo chmod gu+s ./you_app
现在可以调用setuid(0)
和setgid(0)
获取root权限