非 root 用户使用 Grep 访问邮件日志

非 root 用户使用 Grep 访问邮件日志

我想授予特定(常规)用户grep访问我的邮件日志的权限(/var/log/maillog*)。

我不准备更改日志权限,因为它们应该保留root为仅权限,所以我认为首选的解决方案是通过sudoers

另外:我想授予尽可能少的其他权限,理想情况下用户只能访问邮件日志(和轮换的文件)。

例如:

username ALL= NOPASSWD: /bin/grep 

允许该用户基本上grep访问系统上的任何文件,这是我想要避免的。

这里最好的解决方案是什么?
仅供参考:它本身不需要grep:用户只需要读取邮件日志的权限,并且可能只会用来grep访问它们。

答案1

您可以在文件上使用 acl 来授予用户读取权限

setfacl -m user:grepuser:r /var/log/maillog*

其优点是允许用户使用他们想要的任何工具。

对于 maillog 来说这也是安全的 logrotate*

答案2

除非您知道用户将搜索哪些特定字符串以及他们将使用哪些特定文件进行检查,否则sudo这不是一个好的解决方案。如果您创建如下规则:

blizz ALL=root NOPASSWD: /bin/grep * /var/log/maillog*

用户将能够运行如下命令:

grep root /etc/shadow /var/log/maillog
grep = /root/my.cnf /var/log/maillog

他们将能够读取系统上的任何文件。您可以在此处找到有关此问题的更多信息:

http://blog.csnc.ch/2012/10/dangerous-sudoers-entries-part-4-wildcards/

如果您知道用户将检查哪些字符串和文件,则可以为每种情况定义单独的规则。例如:

Cmnd_Alias  MAILLOGA = /bin/grep 'Connection refused' /var/log/maillog
Cmnd_Alias  MAILLOGB = /bin/grep 'Connection refused' /var/log/maillog.1
Cmnd_Alias  MAILLOGC = /bin/grep 'imap-login' /var/log/maillog
Cmnd_Alias  MAILLOGD = /bin/grep 'imap-login' /var/log/maillog.1
blizz ALL=root NOPASSWD: MAILLOGA, MAILLOGB, MAILLOGC, MAILLOGD

但是,这可能很麻烦并且可能导致 sudo 配置过大。

或者,grep您也可以通过命令授予他们访问文件的权限more,然后他们可以以交互方式搜索文件:

Cmnd_Alias  MAILLOG = /bin/more /var/log/mailllog
Cmnd_Alias  MAILLOG1 = /bin/more /var/log/mailllog.1
Cmnd_Alias  MAILLOG2 = /bin/more /var/log/mailllog.2
Cmnd_Alias  MAILLOG3 = /bin/more /var/log/mailllog.3
blizz ALL=root NOPASSWD: MAILLOGA, MAILLOGB, MAILLOGC, MAILLOGD

但是,这不允许用户保留他们的搜索历史记录(例如.bash_history)或创建自己的搜索脚本或别名。另外,如果您设置了日志轮换,他们将无法解析压缩日志。

笔记:不要授予 sudo 对该less命令的访问权限。用户可以脱离该进程,例如运行!/bin/bash即可less获得系统的 root 访问权限。

另一个选择是为cat文件制定规则,以便他们可以grep根据自己的意愿将文件传输到管道。例如:

sudo cat /var/log/maillog | grep "anything can go here"

最后,最简单、也可能是最好的解决方案是通过更改日志文件的权限授予他们读取日志的权限。您可以这样做:

groupadd logcheck
chgrp logcheck /var/log/maillog*
chmod g+r /var/log/maillog*
useradd -G logcheck blizz

然后他们可以使用任何他们想要的工具来分析文件(例如,,,,,grep等等)。zgreplessmoreview

答案3

这应该可以按预期工作sudoers文件:

%users  ALL= /bin/cat /var/log/mail.log
%users  ALL= /bin/cat /var/log/mail.err

(来自 Ubuntu 的日志路径,如果需要可更改)

使用通用的、仅输出的工具,如简单又安全。您无需像使用grep直接在 sudoers 中。它还允许使用任何grep 或 not工具,即awksed

不确定如何须藤在 CentOS 中配置,但如果提示输入密码呼叫用户(不是目标用户),我会避免使用禁止密码。如果任何敌对方在不知道用户密码的情况下访问了用户的帐户,那么这可能是一个安全优势。

相关内容