vHoge

VMwareのアレコレ備忘録。CLIでがんばるネタ多め。

vCenter アラームのスクリプト実行で権限エラーが発生する

最近の KB を眺めていると以下の KB を発見。
(KB:393465) "cannot execute: Permission denied", Alarm scripts are not getting executed on vCenter Server 8.0 U3e / 7.0 U3v and above versions

vCenter alarm scripts created before vCenter Server 8.0 U3e / 7.0 U3v may no longer work after upgrading the vCenter Server, if it didn't have the correct OS permissions and executed privileged actions.

vCenter Server 8.0 U3e / 7.0 U3v より前に作成された vCenter アラーム スクリプトは、適切な OS 権限がなく、特権アクションを実行した場合、vCenter Server のアップグレード後に機能しなくなる可能性があります。(Google 翻訳)

お、おぅ…ちょっと試してみる。

アラームのスクリプトを実行

vCenter のアラーム発生時のアクションとして「メール通知を送信」、「SNMP トラップを送信」に加えて「スクリプトを実行」が可能…というのは昔もネタにしたことがある。
vhoge.hateblo.jp

例えば vCenter Server Appliance 上で下記のような Slack 通知スクリプトを仕込み、

root@vcsa02 [ ~ ]# ls -l /usr/local/bin/alarm_slack.sh
-rwx------ 1 root root 304 Jul 27 16:18 /usr/local/bin/alarm_slack.sh
root@vcsa02 [ ~ ]# cat /usr/local/bin/alarm_slack.sh
#!/bin/sh
HOST=`/usr/bin/hostname`
/usr/bin/curl -X POST --data-urlencode "payload={\"text\": \"${HOST}\n${VMWARE_ALARM_NAME}\n${VMWARE_ALARM_TARGET_NAME}\n${VMWARE_ALARM_EVENTDESCRIPTION}\n${VMWARE_ALARM_ALARMVALUE} \"}" https://hooks.slack.com/services/【TOKEN 的な何か】

適当なアラームのアクション指定にて「スクリプト実行」を有効にし、実行するスクリプトのパスを指定。 アラームが発報されるとスクリプトが実行され、Slack に通知が飛ぶ。 vSphere Client 上でイベント確認すると実行ログが出ている。 ちなみに検証した Ver は vCenter 7.0 U3t。

root@vcsa02 [ ~ ]# vpxd -v
VMware VirtualCenter 7.0.3 build-24322018

vCenter 7.0 U3v にアップグレードする

KB に記載のある vCenter 7.0 U3v にアップグレードして試してみる。

Broadcom のダウンロード URL 変更の影響をうけ、patch ISO をダウンロードして適用…(面倒) 何事もなく vCenter 7.0 U3v に。

root@vcsa02 [ ~ ]# vpxd -v
VMware VirtualCenter 7.0.3 build-24730281

スクリプトは特に変わってなさそう。

root@vcsa02 [ ~ ]# ls -l /usr/local/bin/alarm_slack.sh
-rwx------ 1 root root 304 Jul 27 16:18 /usr/local/bin/alarm_slack.sh

再度アラームを発報させる

再度アラームを発報させてみるとイベントにスクリプト実行失敗の形跡が… vpxd.log にも失敗ログ。

2025-07-27T18:22:03.569+09:00 info vpxd[08188] [Originator@6876 sub=vpxLro opID=cm-inventory-192.168.100.81-74] [VpxLRO] -- FINISH lro-13061
2025-07-27T18:22:03.637+09:00 info vpxd[07479] [Originator@6876 sub=MoScheduledTask] Script command output:
--> /bin/sudo_command_wrapper.sh: line 9: /usr/local/bin/alarm_slack.sh: Permission denied
--> /bin/sudo_command_wrapper.sh: line 9: exec: /usr/local/bin/alarm_slack.sh: cannot execute: Permission denied

対処する

KB にある通り、スクリプトの所有者を "alarms_script" ユーザに変更する。

root@vcsa02 [ ~ ]# chown alarms_script:root /usr/local/bin/alarm_slack.sh
root@vcsa02 [ ~ ]# ls -l /usr/local/bin/alarm_slack.sh
-rwx------ 1 alarms_script root 304 Jul 27 16:18 /usr/local/bin/alarm_slack.sh

これで再度発報させる。 スクリプト実行は問題なく、Slack 側にも無事通知が飛ぶ。

今まで root(や vpxd) ユーザでそのままスクリプトを実行させていたのが、sudo を経由し alarms_script 権限で実行するようになったっぽい。
セキュリティ強化のためではあるが、もう既存 bug fix だけかと思っていたらまさかの影響が発生する系の変更だったりするので気を付けましょう。。。

ちなみに vCenter 8.0 U3e でも同様の変更が行われているらしい。

余談

権限設定だったりするので、アクセス権限を 755 の実行権限ガバガバでスクリプトを置いていたりすると所有者関係なく実行できていたりする。

root@vcsa02 [ ~ ]# ls -l /usr/local/bin/alarm_slack.sh
-rwxr-xr-x 1 root root 304 Jul 27 16:18 /usr/local/bin/alarm_slack.sh
root@vcsa02 [ ~ ]# date
Sun Jul 27 19:20:06 JST 2025


これが原因で最初試したときに「あれー通知飛ぶじゃん…」と思ってしまったり…
せっかくのセキュリティ強化なのに台無しである。余計な権限は与えないよう気を付けましょう。