web-dev-qa-db-ja.com

SELinuxがzabbix_agentdからのSudoをブロックしている

ハードウェアRAID CLIツール(arcconf/megacli)を呼び出し、アレイが劣化していないかどうかをチェックするZabbixのカスタムユーザーパラメーターがあります。これらのツールはroot専用であるため、パスワードなしでzabbixユーザーアクセスを許可するようにsudoerを構成しました。

Defaults:zabbix !requiretty
Cmnd_Alias ZABBIX_MEGACLI_CMDS = /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL
zabbix  ALL     = (ALL) NOPASSWD: ZABBIX_MEGACLI_CMDS

CentOS 5では、zabbix_agentdは制限なく実行され、すべてが順調でした。 CentOS 6では、エージェントは別のzabbix_agent_tドメインで実行されるようになりました。これにより問題が発生しました。最初はSudoバイナリ自体を実行できませんでしたが、このポリシーを追加しました。

Sudo_exec(zabbix_agent_t)

今では別の方法で死ぬ:

type=AVC msg=audit(1407137597.193:157): avc:  denied  { create } for  pid=3145 comm="Sudo" scontext=unconfined_u:system_r:zabbix_agent_t:s0 tcontext=unconfined_u:system_r:zabbix_agent_t:s0 tclass=unix_dgram_socket
type=SYSCALL msg=audit(1407137597.193:157): Arch=c000003e syscall=41 success=no exit=-13 a0=1 a1=80002 a2=0 a3=1 items=0 ppid=3121 pid=3145 auid=0 uid=496 gid=495 euid=0 suid=0 fsuid=0 egid=495 sgid=495 fsgid=495 tty=(none) ses=3 comm="Sudo" exe="/usr/bin/Sudo" subj=unconfined_u:system_r:zabbix_agent_t:s0 key=(null)
type=AVC msg=audit(1407137597.193:158): avc:  denied  { create } for  pid=3145 comm="Sudo" scontext=unconfined_u:system_r:zabbix_agent_t:s0 tcontext=unconfined_u:system_r:zabbix_agent_t:s0 tclass=netlink_audit_socket
type=SYSCALL msg=audit(1407137597.193:158): Arch=c000003e syscall=41 success=no exit=-13 a0=10 a1=3 a2=9 a3=7fffce049a20 items=0 ppid=3121 pid=3145 auid=0 uid=496 gid=495 euid=0 suid=0 fsuid=0 egid=495 sgid=495 fsgid=495 tty=(none) ses=3 comm="Sudo" exe="/usr/bin/Sudo" subj=unconfined_u:system_r:zabbix_agent_t:s0 key=(null)

これは物事を行うための正しいアプローチですか? zabbix_agent_tがsudoを実行できるように、他にどのようなポリシーを追加できますか? Sudoが機能する場合、それはzabbix_agent_tドメイン内に制限されますか、または追加する必要があります。 TYPE=unconfined_t sudoers行へ? https://bugzilla.redhat.com/show_bug.cgi?id=917157 とs/nrpe_t/zabbix_agent_t /を採用すべきですか?

編集:

これが最善のアイデアかどうかはわかりませんが...

Sudo_exec(zabbix_agent_t)
domtrans_pattern(zabbix_agent_t, Sudo_exec_t, unconfined_t)

動作するようです。最悪のケースはSudoとsudoersファイルのセキュリティに依存していると思います。

4
lmz

これを処理する方法は、プログラムが必要とするアクセスに関するすべての情報を収集し、カスタムポリシーモジュールでそのアクセスのみを明示的に許可することです。

これはかなり簡単です。

最初に、あなたは ドメインの寛容さを設定する なので、SELinuxは一時的にそのルールを強制しません。それでも拒否はlog拒否され、後でこれらのログが使用されます。

semanage permissive -a zabbix_agent_t

次に、プログラムを実行させ、必要なことをすべて実行させます。 監査ログ は拒否された内容で一杯になり、これらのログはどのアクセス許可を付与する必要があるかも示します。次に これらのログをausearch で表示します。

ausearch -r -m avc -ts today

ローカルポリシーモジュールを生成 に必要な権限を含めます。 (ここで-rオプションをausearchと共に使用して、出力を他のスクリプトで処理できるようにする必要があります。)

明らかに無関係なエントリを見つけた場合は、出力をファイルにリダイレクトし、編集して削除します。次に、代わりにここでファイルを使用します。

ausearch -r -m avc -ts today | audit2allow -M zabbix_megacli

最後に、新しいローカルポリシーモジュールをインストールし、SELinux強制を再度有効にします。

semodule -i zabbix_megacli.pp
semanage permissive -d zabbix_agent_t
9
Michael Hampton