繁体   English   中英

如何使用C在Linux的`/ etc`文件夹中创建文件?

[英]How to create a file inside the `/etc` folder in Linux with C?

我正在用C编写一个程序,每次开始设置一些变量时都必须检查一个配置文件

在程序的第一次启动时,我想不会有任何配置文件,所以我需要创建它 (使用默认设置)。

我曾经说过程序的配置文件属于文件夹/etc ,更具体地说是为程序本身创建的特定文件夹(即/etc/myprog )。 这是我应该问的第一个问题:这是真的吗? 为什么/etc

在任何情况下,我都尝试使用以下方法创建该文件:

open("/etc/myprog/myprog.conf", O_WRONLY | O_CREAT, 0644);

open返回-1并将errno全局变量设置为2 (即文件夹不存在 )。 如果我尝试直接在/etc创建文件(因此将"/etc/myprog.conf"作为open第一个参数),我"/etc/myprog.conf" errno设置为13 (即权限被拒绝 )。

有没有办法授予我的程序权限写入/etc

编辑:我看到大多数用户建议使用sudo 如果可能的话,我宁愿避免使用此选项,因为此文件只需创建一次(在第一次启动时)。 也许我应该制作2个不同的可执行文件? (例如myprog_bootstrapmyprog ,只能用sudo运行第一个)

您需要root权限才能在/etc创建文件。 使用sudo在前面运行您的可执行文件:

sudo executable_name

另一种可能是制作可执行的setuid 然后,您的程序将非常适当地调用setreuid(2)系统调用。

但是,要非常小心。 诸如/bin/login (或/usr/bin/sudo本身)之类的程序以这种方式编码,但程序中的任何细微错误都会打开一堆安全漏洞。 所以在编写这样的代码时请偏执,并让其他人审阅。

也许更好的方法可能是让你的安装过程使/etc/yourfile有一些符号链接(在安装时创建一次到别处的某个可写文件)....

顺便说一句,您可以为您的程序创建一个组,并使-at /etc/yourfile写入组,并使您的程序设置为setgid。 甚至,为您的程序指定一个用户,并将此/etc/yourfile属于该用户。

或者,在安装时,创建/etc/myprog/目录并且属于相应的用户(或组)并且可写入该用户(或组)。

PS。 另请阅读高级Linux编程功能(7)凭据(7)execve(2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM