2017-06-01 45 views
3

我正在用C编写一个程序,每次开始设置一些变量时,必须检查配置文件如何在Linux中使用C创建`/ etc`文件夹内的文件?

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

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

在任何情况下我试图创建使用此该文件:

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

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

有没有办法让我的程序权限写在/etc

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

+0

您是否正在将该程序作为拥有该目录写权限的人运行? –

+0

'sudo your_exec' ....? – LPs

+0

_ [sudo](https://www.sudo.ws/)_ 获取特权 – ryyker

回答

5

需要根特权/etc创建一个文件。在前面的运行与sudo可执行文件:

sudo executable_name 
+0

最可能的是,你甚至不想*在* etc/...中创建该文件 – tofro

3

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

但是,要非常小心。像/bin/login(或/usr/bin/sudo本身)这样的程序就是这样编码的,但是程序中的任何细微的错误都会带来一堆安全漏洞。所以在写这样的代码时请注意偏执狂,并让其他人阅读。

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

顺便说一句,你可能会为你的程序创建一个组,并创建安装时间 - /etc/yourfile可写入该组,并让您的程序setgid。 甚至,为用户指定一个用户,并让这个用户属于这个/etc/yourfile

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

PS。另请参见Advanced Linux Programmingcapabilities(7)credentials(7)execve(2)

+1

我不确定为什么你建议创建一个符号链接 - 在你不允许创建文件的地方,你不太可能创建符号链接。 – tofro

相关问题