特定のユーザーのauth.logでsudo PAMメッセージをどのように停止しますか?

特定のユーザーのauth.logでsudo PAMメッセージをどのように停止しますか?

私はZabbixを使って自分の環境を監視し、zabbix_agentdユーザーとして60秒ごとにzabbixカスタムスクリプトをsudo実行しますroot

私は/var/log/auth.logこれを60秒ごとに見る:

Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session closed for user root

このメッセージが私のログにあふれるのを防ぎたいと思います。/etc/pam.d/sudoファイルに次の行を追加しましたsession required pam_unix.so

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

その後、メッセージが消えた。

しかし問題はそれはすべてです。sudo誰かがasを使用してスクリプトを実行すると、すべてのPAMメッセージを抑制しますroot

zabbix他のすべてのユーザーではなく、そのユーザーに対してのみメッセージを停止したいと思います。ユーザーが権限を使用してスクリプトを実行したいことsudoを知り、PAMに通知する方法はありますか? PAMを使用しているときに特定のユーザーにログインしないようにするにはどうすればよいですか?zabbixrootsudo

ノート:システムログのメッセージをフィルタリングしてみましたが、上記の問題が発生しました。つまり、ログメッセージには、どのユーザーがrootになったのかが表示されないため、無差別的であるという問題があります。

答え1

PAM confラインに非常に近いようです。

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

マニュアルページを見ると、pam_succeed_ifリクエストユーザー(ruser)はいzabbix

だから私は以下を提案します:

session [success=1 default=ignore] pam_succeed_if.so quiet uid = 0 ruser = zabbix

zabbixユーザーが変更されると、root次のテストは抑制されます(他の移行はありません)。私はこれを私のユーザーのいくつかでテストしました。

uid = 0(単にルートではなく)ユーザーになりたくない場合は、zabbix上記のテストを削除してください。

テストを削除しましたservice in sudo。この行は/etc/pam.d/sudo

答え2

Tobyの答えに基づいて、Debian / Ubuntuで少し異なる方法で設定する方法を見つけました。文脈については、以下を参照してください。

だからDebian / Ubuntuには次のpam-auth-updateコマンドがあります/etc/pam.d/sudo

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive

次のようになります/etc/pam.d/common-session-noninteractive

#
# /etc/pam.d/common-session-noninteractive - session-related modules
# common to all non-interactive services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of all non-interactive sessions.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
session [default=1]         pam_permit.so
# here's the fallback if no module succeeds
session requisite           pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
# end of pam-auth-update config

もちろん、上記のファイルのどれでも編集できますが、ここには明らかに「より高い力」が作用しています。 Pamルールを追加したい他のパッケージと私の変更がうまく機能するようにするにはどうすればよいですか?さらに、/etc/pam.d/sudoこの2つの間に行を追加することはできないようです。@include

##### THIS DIDN'T WORK :( ######
@include common-auth
@include common-account
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
@include common-session-noninteractive

上記のリンクとは異なる例(参考資料を参照/usr/share/pam-configs/unix)を読んだ後、次の結果が得られました/usr/share/pam-configs/myapp

# Don't log "session opened" messages for myapp user
# See: https://wiki.ubuntu.com/PAMConfigFrameworkSpec
#      https://manpages.debian.org/stretch/libpam-modules/pam_succeed_if.8.en.html
Name: myapp disable session logging
Default: yes
Priority: 300
Session-Type: Additional
Session:
    [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser

SessionSession-Type編集するファイルを制御し、順序Priorityを定義します。ファイルを追加して実行すると、次のようになりpam-auth-updateます/etc/pam.d/common-session-noninteractive。 (下段:)

#... omitted
session required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
session required pam_unix.so 
# end of pam-auth-update config

pam_succeed_if...私たちの行は前面になければならないので、これが私たちが望むものですsession required pam_unix.so。 (行はから /use/share/pam-configs/unix来ているPriority: 256ので2番目の位置になります。)また、service = sudoこの述語はcommon-session-noninteractive他の構成に含めることができるので省略しましたsudo

私の場合、私はすでにコードを.debインストーラとしてパッケージ化しているので、そのファイルを追加してスクリプトに/usr/share/pam-configs/myapp追加しても大丈夫です!pam-auth-update --packagepostinstprerm

警告する...

読んだら上記のPAMConfigFrameworkSpec記事、オプションを定義Session-Interactive-Onlyしますが、非対話型ルールのみを指定する方法はありません。。これも/etc/pam.d/common-sessionこうだまた更新しました。私はこの問題を解決する方法がないと思います。このユーザーの対話型セッションを記録しないことに同意した場合(サービスアカウントは正しいですか)、すべての準備が完了しました!

ボーナス:sudoログ出力を削除する方法

session openened|closedPAM からエクスポートされた行に加えて、実行されたsudoコマンドに関する追加情報が記録されます。次のようになります。

[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...

もしあなたなら返品削除するには、このリンクを開き、以下から続けてください。

/etc/sudoers.d/___したがって、特定のタスクを実行するためにスーパーユーザー権限を必要とするサービスアカウントに対して、次のタスクを実行できる一般的な設定に精通しています。

myuser ALL=(ALL) NOPASSWD: /bin/ping

それが入るかもしれません/etc/sudoers.d/10_myuser。まあ、何よりも指定することもできます。Defaults。この構文に特に注意してください。'Defaults' ':' User_List

さて、一度見てくださいSUDOERSオプションセクション。興味深い部分にはが含まれますがlog_inputlog_outputおそらく)より重要なのsyslogはとですlogfile。 Debianの最新バージョンでは、デフォルトはrsyslogまたはsudolog tostdoutまたはlogのようです。したがって、私の場合、これは私のアプリケーションログに混在しない場所stderrではなく、私のサービスのログログに表示されます。 sudoロギングを削除するために、以下のように/var/log/auth.log以下を追加しました。/etc/sudoers.d/10_myuser

Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping

YMMV、ロギングを無効にするとセキュリティ監査に問題があると思われる場合は、rsyslogフィルタを使用してこの問題を解決することもできます。

答え3

数多くの恐ろしいテストと研究の最後に、Debian Stretch(Raspberry)を使用して動作するソリューションを見つけました。 OPが求めているものを達成する方法は確かにいくつかあります。しかし、PAM文書が多いため、大部分の内容は非常に長いです。

  1. カスタム文字列フィルタを追加できます。システムログ から:以下を/etc/rsyslog.d/anyname.conf使用して:
    :msg, contains, "session opened for user root by pi" stop
  2. 直接編集可能/etc/pam.d/sudo
  3. 次の場所からカスタムPAM構成ファイルを生成して、正しい方法でこれを実行できます。/usr/share/pam-configs/
  4. カスタマイズを作成していくつかの操作を実行できます。sudoersファイル入力:/etc/sudoers.d/020_pi

(2)と(4)を行う方法を紹介します。

警告する

/etc/pam.d/グローバル書き込み権限を最初に変更せずにファイルを編集しないでください。これを守らずにミスをすると、今後の利用が制限されることがあります。Sudo / Su!そのため、もう一度変更する前に新しい設定をテストしてください。 (基本設定は644話)


「セッションを開く/閉じる」を削除するには:

私たちは次の/var/log/auth.logスパムを削除したいと思います:

May 10 11:28:03 xxx sudo[26437]: pam_unix(sudo:session): session opened for user root by (uid=0)
May 10 11:28:07 xxx sudo[26437]: pam_unix(sudo:session): session closed for user root

これを行う:

# sudo chmod 666 /etc/pam.d/sudo
# sudo cat /etc/pam.d/sudo

#%PAM-1.0

@include common-auth
@include common-account
session [success=1 default=ignore] pam_succeed_if.so quiet_success uid = 0 ruser = pi
@include common-session-noninteractive

ここで最も重要なことは、success=1成功すると、次のセクション1をスキップすること(またはPAM用語で「スタックから次のモジュールをスキップする」)を意味することです。

からman pam.conf

無視する - モジュールスタックで使用する場合、モジュールの戻り状態はアプリケーションから取得した戻りコードには影響しません。

完璧 - OKと同じですが、モジュールスタックを終了し、PAMがすぐにアプリケーションを返す副作用があります。

窒素 - okと同じですが、スタックの次のN個のモジュールをスキップする副作用があります。

その後、再起動して数時間実行して(クローンジョブの確認など)動作しているかどうかをテストします。次に、ファイル権限をリセットしたことを確認します。そうしないと、システムにセキュリティホールが発生します。 ( sudo chmod 644 /etc/pam.d/sudo)


重複した「TTY PWD COMMAND」メッセージを削除するには:

また、次のメッセージを削除したいと思います。

May 11 18:23:20 xxx sudo:       pi : TTY=unknown ; PWD=... ; USER=root ; COMMAND=/usr/bin/arp-scan -q -l

私の場合、実行中のIDSスクリプトによって生成されました。arpスキャン数分ごと。ログから削除するには、次のファイルを生成します。

# sudo nano /etc/sudoers.d/020_pi
# sudo cat /etc/sudoers.d/020_pi

Defaults:pi     !logfile, !syslog
pi xxx = (root) NOPASSWD: /usr/bin/arp-scan

(これはxxxあなたのコンピュータ名、piあなたのユーザー名です。)

答え4

あなたは得るでしょう:

pam_succeed_if(sudo:session): unknown attribute "ruser"

あなたの答えで。

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive
session     [success=1 default=ignore] pam_succeed_if.so service in zabbix quiet use_uid
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

うまくいきますが、まだ次のようになります。

pam_unix(sudo:session): session opened for user root by (uid=0)

あなたのジャーナルに。

関連情報