如何在不以根用户身份运行的程序中以root身份写入文件?

问题描述:

我有一个程序,不应该作为根运行,因为它根据用户的名字和其他东西做事情。但是,我可能需要编写一个(并且应该)只能以root身份写入的文件。如何在不以根用户身份运行的程序中以root身份写入文件?

我可以做什么,但宁可不写,将文件写入一些临时文件,然后(system "sudo mv /tmp/myfile /destination/myfile")。这将sudo要求输入密码,以root身份移动文件,然后该程序将继续以普通用户身份运行。如果用户不能使用sudo,那么他不应该使用该程序,这并不重要。

我想只是能够从程序中写入文件,而没有临时文件,有没有办法做到这一点?

仔细阅读关于setuid可执行文件(这是如何sudosu或工作)。请阅读credentials(7),capabilities(7),execve(2),setreuid(2)。另请阅读Advanced Linux Programming

但要小心。您可以引入安全漏洞或vulnerabilities

顺便说一句,sudo(或super)可以配置为避免询问任何密码(但这样做可能是不明智的)。