簡體   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