私は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を使用しているときに特定のユーザーにログインしないようにするにはどうすればよいですか?zabbix
root
sudo
ノート:システムログのメッセージをフィルタリングしてみましたが、上記の問題が発生しました。つまり、ログメッセージには、どのユーザーが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で少し異なる方法で設定する方法を見つけました。文脈については、以下を参照してください。
- https://manpages.debian.org/stretch/libpam-runtime/pam-auth-update.8.en.html
- https://wiki.ubuntu.com/PAMConfigFrameworkSpec
だから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
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
追加しても大丈夫です!pam-auth-update --package
postinst
prerm
警告する...
読んだら上記のPAMConfigFrameworkSpec記事、オプションを定義Session-Interactive-Only
しますが、非対話型ルールのみを指定する方法はありません。。これも/etc/pam.d/common-session
こうだまた更新しました。私はこの問題を解決する方法がないと思います。このユーザーの対話型セッションを記録しないことに同意した場合(サービスアカウントは正しいですか)、すべての準備が完了しました!
ボーナス:sudoログ出力を削除する方法
session openened|closed
PAM からエクスポートされた行に加えて、実行された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_input
(log_output
おそらく)より重要なのsyslog
はとですlogfile
。 Debianの最新バージョンでは、デフォルトはrsyslogまたはsudo
log 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文書が多いため、大部分の内容は非常に長いです。
- カスタム文字列フィルタを追加できます。システムログ から:以下を
/etc/rsyslog.d/anyname.conf
使用して:
:msg, contains, "session opened for user root by pi" stop
- 直接編集可能
/etc/pam.d/sudo
- 次の場所からカスタムPAM構成ファイルを生成して、正しい方法でこれを実行できます。
/usr/share/pam-configs/
- カスタマイズを作成していくつかの操作を実行できます。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)
あなたのジャーナルに。