Grep对非root用户的maillog访问

我想给我的maillogs( /var/log/maillog* )授予特定的(普通)用户grep访问权限

我不准备更改日志权限,因为他们应该保持root ,所以我认为首选解决scheme将通过sudoers

另外:我想授予尽可能less的其他权限,理想情况下,用户只能访问maillog(和旋转的文件)。

例如:

 username ALL= NOPASSWD: /bin/grep 

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

这里最好的解决scheme是什么?
仅供参考:本身不需要grep :用户只需要读取maillogs,并且可能只使用grep来访问它们。

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

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

这是允许用户使用他们希望的任何工具的优点。

这对maillog也是安全的。

除非你知道用户将search什么特定的string,他们将使用sudo检查的特定文件不是一个很好的解决scheme。 如果你创build一个这样的规则:

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

用户将能够像这样运行命令:

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

他们将能够读取系统上的任何文件。 你可以在这里find关于这个问题的更多信息:

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

如果您知道用户将要检查的string和文件,则可以为每个场景定义单独的规则。 例如:

 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 

但是,这可能会很麻烦,并可能导致过大的sudoconfiguration。

或者,也可以不使用grep ,而是通过more命令授予他们对文件的访问权限,然后他们可以交互地search文件:

 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 

但是,这不允许用户保存他们的search历史logging(例如.bash_history )或创build他们自己的脚本或别名用于search。 另外,如果你有日志轮换,他们将无法parsing压缩日志。

注意: 不要将 sudo访问权限授予less命令。 用户可以跳出这个过程,例如,运行!/bin/bash会让他们对系统有root访问权限。

另一个select是有规则让他们cat这些文件,这样他们就可以将他们的内容传递给grep 。 例如:

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

最后,最简单也是最好的解决scheme是通过更改日志文件的权限来授予他们读取日志的权限。 你可以做这样的事情:

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

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

这应该在sudoers文件中按预期工作:

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

(来自Ubuntu的日志path,如果需要的话更改)

使用像这样的通用输出工具是简单而安全的。 直接在sudoers中,你不需要像grep那样允许和限制特定的选项。 它也将允许使用任何grep-or-not工具来过滤日志,即。 awksed

不知道如何在CentOS中configurationsudo ,但是如果它提示input用户(不是目标用户)的密码,我会避免使用NOPASSWD 。 如果任何敌对方获得用户帐户的访问权限,而不知道用户的密码,则这可以是安全优势。