允许用户读取日志文件的最安全方法是什么?

gAM*_*OKa 22 linux permissions centos file-permissions

我的应用程序需要对/var/log/messages属于用户和组的 的读取访问权限root/var/log/messages我的应用程序可以读取它所需的最低暴露级别是多少?

目前,我的计划是将 的组所有权更改/var/log/messages为一个新组,并将 root 和我的应用程序用户添加到该组中,但这也会赋予应用程序对/var/log/messages.

操作系统:Centos 5.5

小智 22

只是为了扩展上面的答案,这里是一个真实世界的用例。我在 Redhat 机器上运行企业日志分析应用程序 Splunk。它在 splunk 用户和 splunk 组下运行。这可以防止 splunk 访问 /var/log 中的日志,因为它们只能由 root(或 sudo 管理员)访问

为了只允许对 splunk 进行只读访问,我使用了一些 ACL 并修改了 logrotate 来保留它。

您可以手动设置 ACL

sudo setfacl -m g:splunk:rx /var/log/messages
Run Code Online (Sandbox Code Playgroud)

这不会持续,因为 logrotate 不会重新应用 ACL 设置,因此为了更持久的解决方案,我添加了一条规则来 logrotate 以重置 ACL。我添加了文件..

/etc/logrotate.d/Splunk_ACLs
Run Code Online (Sandbox Code Playgroud)

{
    postrotate
        /usr/bin/setfacl -m g:splunk:rx /var/log/cron
        /usr/bin/setfacl -m g:splunk:rx /var/log/maillog
        /usr/bin/setfacl -m g:splunk:rx /var/log/messages
        /usr/bin/setfacl -m g:splunk:rx /var/log/secure
        /usr/bin/setfacl -m g:splunk:rx /var/log/spooler
    endscript
}
Run Code Online (Sandbox Code Playgroud)

使用以下命令检查文件的 ACL 状态

$ getfacl /var/log/messages
Run Code Online (Sandbox Code Playgroud)

有关 ACL 的更多信息,请参阅 https://help.ubuntu.com/community/FilePermissionsACLs http://bencane.com/2012/05/27/acl-using-access-control-lists-on-linux/

  • 请注意,splunk 不需要日志文件的执行权限,只需读取即可。 (2认同)

rfe*_*urg 8

无需将 root 添加到组中,因为无论如何它都可以通过用户 privs 访问,只需将组读取到您决定的任何组即可。请记住也使用 logrotate 进行更改,否则组更改将在每晚被清除。

  • /etc/logrotate.d/ 是分解的 logrotate 脚本的文件夹。/var/log/messages 在 /etc/logrotate.d/syslog 中。您需要将 /var/log/messages 移动到 /etc/logrotate.conf 中它自己的文件,然后使用诸如“create 0640 root new_group”之类的东西告诉它正确创建文件。 (2认同)

vor*_*aq7 5

你的计划是可以接受的,在“传统”的 Unix 权限方案中是最好的方法。
另一种选择是让 syslog 将感兴趣的消息转移到另一个文件(这样可以避免让应用程序用户访问/var/log/messages.

如果您不想受用户/组/其他的传统权限方案的约束,您还可以使用POSIX ACL(其他,可能通过 Google 获得更好的操作方法/信息)为您的应用程序用户提供对/var/log/messages-的只读访问权限-这是更细粒度的,不会冒险将其他人意外地放入应用程序组中,并让他们访问他们不应该看到的东西。