非ルートのメールログへの grep アクセス

非ルートのメールログへの grep アクセス

grep特定の(通常の)ユーザーにメールログ()へのアクセスを許可したいと思います/var/log/maillog*

ログ権限は -only のままにしておく必要があるため、ログ権限を変更するつもりはありません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/bashlessシステムへのルート アクセスが付与されます。

catもう 1 つのオプションは、ファイルにルールを設定して、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

これは期待通りに動作するはずですsudo ユーザファイル:

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

(Ubuntu からのログ パス、必要に応じて変更)

一般的な出力専用ツールを使用すると、シンプルで安全です。特定のオプションを許可したり制限したりする必要はありません。グレップsudoersに直接追加します。また、任意のログをフィルタリングすることもできます。grep かどうかツール、すなわち。awksed

よく分からない須藤CentOSではパスワードの入力を求められますが、呼び出しユーザー(目標使用者の場合、パスワードなし悪意のある第三者がユーザーのパスワードを知らずにユーザーのアカウントにアクセスした場合、これはセキュリティ上の利点となります。

関連情報