[英]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.