linux - 以 root 身份运行的应用程序,创建任何人都可以读取的日志

标签 linux

我有这个问题,想看看业界的最佳实践。

我正在编写一个使用开源日志记录库的软件。该库的功能之一是能够创建循环日志文件。例如,如果最大日志大小为 2GB,则当达到限制时,将创建一个新文件并重命名旧文件。

我的应用程序必须以 root 身份运行,因为它需要访问较低范围的端口号。因此,应用程序创建的日志只能由根用户读取。

我希望任何用户都可以读取日志,而不仅仅是 root 用户。我怎样才能做到这一点?是否有解决此问题的行业标准?

最佳答案

可以赋予非根进程特定的管理员权限——比如绑定(bind)到特权端口的能力。这比以 root 用户身份简单地运行应用程序的全有或全无方法要安全得多,并且被认为是更好的解决方案。

在这种情况下,您可能希望为其提供 CAP_NET_BIND_SERVICE 功能。这answer是如何做到这一点的良好起点。

主要的两种方式似乎是

  1. 创建一个以 root 身份运行的 setuid 包装程序,并删除除您需要的功能之外的所有功能,然后 exec 实际程序
  2. 使用 setcap 设置单个系统上可执行文件的功能。

有关功能的更多信息,请从 Linux 终端运行以下命令

$ man 7 capabilities

或者,访问此站点:http://linux.die.net/man/7/capabilities

关于linux - 以 root 身份运行的应用程序,创建任何人都可以读取的日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31644318/

相关文章:

linux - CLONE_NEWNS 和安装传播

c++ - CMake find_* 不搜索子目录

Linux CAN socket - 处理错误帧

android - RLIMIT_NPROC 的正确定义是什么?

c - int 80h 会中断内核进程吗?

具有最小匹配的 Linux diff

linux - 将文件名中单词的首字母大写的脚本

linux - 如何设置虚拟主机以将同一 IP 上的两个端口指向不同的服务器名称?

c - 哪些 C 标准库函数在底层使用 malloc

Linux用户空间与内核空间的通信