我有这个问题,希望看到行业的最佳实践。
我正在编写一个使用开源日志库的软件。 这个库的特点之一是能够创build旋转的日志文件。 例如,如果最大日志大小为2GB,则在达到限制时,会创build一个新文件,并重命名旧文件。
我的应用程序必须以root身份运行,因为它需要访问较低范围的端口号。 因此,应用程序正在创build的日志只能由root用户读取。
我希望日志可以被任何用户读取,而不只是由root用户读取。 我怎样才能做到这一点? 解决这个问题有没有行业标准?
如何检测每秒animationGIF的刻度?
如何仅在C中列出第一级目录?
防止SIGPIPE
线程如何获得互斥锁?
qmake – 在Linux中查询内部设置 – 他们在哪里?
生成已经被grep删除的文件的logging,作为主要命令的辅助function
用libtinfo依赖关系编译ncurses的C代码
编辑shell脚本中的sudo文件
如何在Linux上使用gcc汇编在x86-64中设置控制寄存器0(cr0)位
可以给予非根进程特定的管理权限 – 就像绑定到特权端口的能力一样。 这比单纯以root用户身份运行应用程序的方法要安全得多,被认为是更好的解决方案。
在这种情况下,您可能希望为其提供CAP_NET_BIND_SERVICE功能。 这个答案是如何做到这一点的一个很好的起点。
主要的两种方法似乎是
创建一个以setuid身份运行的setuid包装程序,然后删除所需的所有功能,然后exec实际的程序
有关功能的更多信息,请从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] 举报,一经查实,本站将立刻删除。