私は自分の環境を監視するためにZabbixを使用しており、zabbix_agentd
はユーザーとして実行されますzabbix
60秒ごとに1つのカスタムスクリプト。 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
をroot
としてスクリプトを実行しているときに、すべてのPAMメッセージを抑制したことです。
ユーザーzabbix
(他のすべてのユーザーではない)に対してのみメッセージを停止します。 Sudo
は、zabbix
ユーザーがroot
特権でスクリプトを実行したいことを知っており、PAMにそれを伝える方法はありますか? Sudo
を使用するときに、特定のユーザーのログを記録しないようにPAMに指示するにはどうすればよいですか?
注:syslogのメッセージをフィルタリングしてみました。これは機能しますが、上記と同じ問題があります。つまり、どのユーザーがrootになっているのかをログメッセージが示していないため、無差別すぎます。
あなたはあなたの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
になったときに次のテストが抑制されます(他の遷移はありません)。私は自分のユーザーのペアでこれをテストしました。
Rootだけでなく、zabbix
がユーザーにならないようにする場合は、上記のuid = 0
テストを削除してください。
service in Sudo
テストを削除しました。この行が/etc/pam.d/Sudo
にあるとすると、冗長です。
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ルールを追加する可能性のある他のパッケージで、Niceを変更する方法を教えてください。さらに、このように2つの/etc/pam.d/Sudo
の間に@include
を1行追加することはできないようです。
##### 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
Session
とSession-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
ファイルを追加し、postinst
およびprerm
スクリプトにpam-auth-update --package
を追加しました。行ってよかった!
上記でリンクしたPAMConfigFrameworkSpecの記事 を読んだ場合、Session-Interactive-Only
オプションが定義されていますが、非対話型ルールのみを指定する方法はありません。したがって、/etc/pam.d/common-session
も更新されました。これを回避する方法はないと思います。そのユーザーの対話型セッションがログに記録されていなくても問題ない場合(ISサービスアカウントですよね?)
PAMが発行するsession openened|closed
行に加えて、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 OPTIONSセクション を見てください。興味深いビットには、log_input
、log_output
が含まれますが、(おそらく)より重要なのは、syslog
とlogfile
です。最近のバージョンのDebianでは、デフォルトでrsyslogまたはSudo
がstdout
またはstderr
にログを記録しているようです。したがって、私にとっては、これは私のサービスのジャーナルログに表示されていました。 /var/log/auth.log
の場合、アプリケーションログに混入しません。 Sudoログを削除するために、次のように/etc/sudoers.d/10_myuser
に追加しました。
Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping
YMMV、ロギングを無効にするとセキュリティ監査で問題が発生すると思われる場合は、rsyslogフィルターを使用してこれを解決することもできます。
かなり恐ろしいテストと調査の結果、Debian Stretch(Raspberry)の実用的な解決策を見つけました。 OPが求めることを達成する方法は確かに複数あります。しかし、PAMのドキュメントは圧倒的であるため、ほとんどのものは実際にはTL; DRです。
/etc/rsyslog.d/anyname.conf
::msg, contains, "session opened for user root by pi" stop
/etc/pam.d/Sudo
を直接編集できます/usr/share/pam-configs/
/etc/sudoers.d/020_pi
に作成することで、いくつかを実行できます。(2)と(4)の方法を紹介します。
[〜#〜]警告[〜#〜]
/etc/pam.d/
内のファイルを編集する場合は、最初にファイルの書き込み権限を変更しないでください。そうしないと、間違えた場合、将来Sudo/sを使用できなくなる可能性があります。したがって、元に戻す前に、新しい設定をテストしたことを確認してください。 (デフォルトは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
から:
ignore-モジュールのスタックで使用した場合、モジュールの戻りステータスは、アプリケーションが取得する戻りコードには影響しません。
done-モジュールスタックを終了し、PAMがすぐにアプリケーションに戻るという副作用のあるokと同等です。
[〜#〜] n [〜#〜]-スタック内の次のN個のモジュールを飛び越すという副作用があるokと同等です。
次に、再起動し、数時間実行して(たとえば、cronジョブを確認するため)、これが機能することをテストします。次に、ファイルのアクセス許可を元に戻します。そうしないと、システムに大きなセキュリティホールができます。 (Sudo chmod 644 /etc/pam.d/Sudo
)
次のようなメッセージも削除したいと思います。
May 11 18:23:20 xxx Sudo: pi : TTY=unknown ; PWD=... ; USER=root ; COMMAND=/usr/bin/arp-scan -q -l
私の場合、これは数分ごとにarp-scan実行されていたIDSスクリプトによって生成されました。ログに表示されないようにするには、次のファイルを作成します。
# 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
はユーザー名です。)