微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

应用程序以root用户身份运行,创build应该被任何人读取的日志

我有这个问题,希望看到行业的最佳实践。

我正在编写一个使用开源日志库的软件。 这个库的特点之一是能够创build旋转的日志文件。 例如,如果最大日志大小为2GB,则在达到限制时,会创build一个文件,并重命名文件

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

我希望日志可以被任何用户读取,而不只是由root用户读取。 我怎样才能做到这一点? 解决这个问题有没有行业标准?

如何检测每秒animationGIF的刻度?

如何仅在C中列出第一级目录?

防止SIGPIPE

线程如何获得互斥锁?

如何防止用户读取存储在二进制文件中的string?

qmake – 在Linux中查询内部设置 – 他们在哪里?

生成已经被grep删除文件的logging,作为主要命令的辅助function

用libtinfo依赖关系编译ncurses的C代码

编辑shell脚本中的sudo文件

如何在Linux上使用gcc汇编在x86-64中设置控制寄存器0(cr0)位

可以给予非根进程特定的管理权限 – 就像绑定到特权端口的能力一样。 这比单纯以root用户身份运行应用程序的方法要安全得多,被认为是更好的解决方案。

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

主要的两种方法似乎是

创建一个以setuid身份运行的setuid包装程序,然后删除所需的所有功能,然后exec实际的程序

使用setcap在单个系统上设置可执行文件功能

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

$ man 7 capabilities

或者,访问这个网站: http : //linux.die.net/man/7/capabilities

在类Unix操作系统中,进程的umask控制新创建文件的权限。

你的进程显然已经把它的umask设置为077 (或类似),导致组和其他没有任何权限。 标准的解决方法是使用限制性较小的umask,如022 (组和其他不能写,但可以读取,如果适当的话,执行)。

请注意,更改您的umask可能会产生不必要的副作用:如果您希望由您的应用程序创建的文件只能被root用户读取,那么您需要弄清楚如何在日志记录时设置限制较少的umask,并设置更严格的umask创建其他文件。 有关umasks的更多信息,请参阅Wiki Ubuntu或此问题 。

其他更复杂的权限问题解决方案也是可能的。 例如:

您可以使用root权限启动进程,绑定到低编号的端口,然后删除权限(假设您不需要在初始化后绑定到其他端口)。

您应该可以使用setfacl在日志文件的目录上设置认ACL,除了标准用户/组/其他位授予的权限之外,您还可以授予读者权限。

但检查你的umask是开始的地方。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐