我有这个问题,希望看到行业的最佳实践。
我正在编写一个使用开源日志库的软件。 这个库的特点之一是能够创build旋转的日志文件。 例如,如果最大日志大小为2GB,则在达到限制时,会创build一个新文件,并重命名旧文件。
我的应用程序必须以root身份运行,因为它需要访问较低范围的端口号。 因此,应用程序正在创build的日志只能由root用户读取。
我希望日志可以被任何用户读取,而不只是由root用户读取。 我怎样才能做到这一点? 解决这个问题有没有行业标准?
可以给予非根进程特定的管理权限 – 就像绑定到特权端口的能力一样。 这比单纯以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或此问题 。
其他更复杂的权限问题解决方案也是可能的。 例如:
但检查你的umask是开始的地方。