以非 root 身份将文件安装到 /etc/ 的约定?

以非 root 身份将文件安装到 /etc/ 的约定?

这个问题可能与 Unix & Linux 和 Stack Overflow 相关;我首先在 Unix & Linux 上发帖,因为我想在任何具体的技术实现之前,我想从 Unix/Linux 约定的角度来理解这个问题。

我正在编写一个独立的 hello-world 应用程序,需要读取配置文件config.yml.
我被告知惯例是将文件安装在/etc/hello-world/config.yml.
现在,我注意到/etc/只有 root 才有写权限:

$ ls -ld /etc
drwxr-xr-x 127 root root 12288 Feb 14 21:16 /etc

我没有设置这台 Linux PC,而是一位称职的 Linux 管理员设置的,所以我认为这是标准/约定,/etc/只有用户可写root,其他人都可读。

所以我的问题是:如果进程由非 root 用户运行,我的 hello-world 应用程序 ( ) 的安装机制如何cmake && make install安装任何内容?/etc/

按照执行,我的“安装机制”是install我的声明CMakeLists.txt,例如:

install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/config.yml
  DESTINATION /etc/hello-world/config.yml)

make install...但同样,由于我将以非 root 身份运行,因此这将会失败。

再次,我是从学习Unix/Linux的角度来问这个问题的习俗- 我想这是一个常见的场景:一个单独的开发人员想要将他的配置文件安装到“标准”位置,我被告知是/etc/your-app/your-config。那么,如果/etc/只能由 root 写入,他如何做到这一点呢?

是否理解为make install只能由 root 或 sudo 特权用户完成,例如sudo make install
或者配置文件应该安装到(的子目录)是不正确的吗/etc/
或者/etc/的权限应该允许“其他人”写入?

答案1

根据设计,你不能。

您的应用程序应该存储每个用户配置在用户主目录中的某个位置,例如 ~/.config/your_app/config.yml

系统级配置文件属于/etc/.就像您的应用程序在网络上的某个位置有一个所有用户都应该连接到的本地服务器一样。文件将由系统管理员与应用程序一起安装。

也可以看看FHS最低有效位

相关内容