[英]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_bootstrap
和myprog
,只能用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/
目录并且属于相应的用户(或组)并且可写入该用户(或组)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.