非root使用者對郵件日誌的Grep訪問
我想授予
grep
對我的郵件日誌 ( ) 的特定(正常)使用者訪問權限/var/log/maillog*
。我不准備更改日誌權限,因為它們應該保持
root
-only,所以我認為首選的解決方案是通過sudoers
.另外:我想授予盡可能少的其他權限,理想情況下,使用者只能訪問郵件日誌(和旋轉文件)。
例如:
username ALL= NOPASSWD: /bin/grep
允許該使用者基本上
grep
訪問系統上的任何文件,這是我想避免的。這裡最好的解決方案是什麼?
僅供參考:它本身不需要
grep
:使用者只需要對郵件日誌的讀取權限,並且可能只會用於grep
訪問它們。
您可以在文件上使用 acl 向使用者授予讀取權限
setfacl -m user:grepuser:r /var/log/maillog*
這是允許使用者使用他們希望使用的任何工具的優勢。
這對於郵件日誌也是 logrotate 安全的*
除非您知道使用者將搜尋哪些特定字元串以及他們將使用哪些特定文件進行檢查
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
)或創建他們自己的腳本或搜尋別名。另外,如果您有日誌輪換,他們將無法解析壓縮日誌。注意:不要授予對
less
命令的 sudo 訪問權限。使用者可以中斷該程序,例如,執行!/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
,zgrep
,less
,more
,view
等)。