zabbixの起動をrootでなくzabbixユーザーで行いたい

環境
zabbix2.2.11
CentOS5.8

表題の件です。
zabbixやagentの起動はrootで行います。
/etc/init.d/zabbix-agent startなど

ですがrootは危ないのでzabbixユーザーで行いたいです。
※検索しても、zabbix内部ユーザーの話ばかりで、見つけることができませんでした。

情報がなかったので、まずは試したところ
zabbix起動は大丈夫そうでした。

以下試したことです。
----------------------------------------------------
zabbixユーザーはnologinなので、
usermod -d /etc/zabbix -s /bin/bash zabbix
としてログインできるようにします。

/etc/zabbix/フォルダ権限を見ると、rootやzabbixやapacheが入り混じっていたので、
chown -R zabbix.zabbix /etc/zabbix/
chown -R apache.apache /etc/zabbix/web/
としました。

/etc/init.d/zabbix-agent start で起動すると、

⇒権限がなく起動できないというエラー
-bash-3.2$ /etc/init.d/zabbix-agent start
Starting Zabbix agent: [ OK ]
touch: cannot touch `/var/lock/subsys/zabbix-agent': Permission denied

ダメでした。
/etc/init.d/zabbix-agentを見ると、
lockfile=/var/lock/subsys/zabbix-agent

そこのフォルダはroot権限なのでロックファイルが作れないということで
lockfile=/tmp/zabbix-agent
に変更すると起動できました!
----------------------------------------------------

このようにzabbixユーザーだけで操作(起動や停止)してるという方いらっしゃいますか?

zabbixユーザーだけで、zabbixとagentとJavaGateway起動したいです!

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

もともとZabbixサーバーもZabbixエージェントもzabbixユーザーで
実行されるようになっています。
起動するときにroot権限を利用するだけです。

わざわざ書かれていたようなことをする必要はありません。

ユーザー sin の写真

TNKさん
回答ありがとうございます。

/etc/init.d/zabbix-agent はrootで実行してもzabbixユーザーとして実行されるようになってますね!そこはわかるのですが...

ですが、zabbixユーザーで同様に実行すると、agentの起動シェルに
lockfile=/var/lock/subsys/zabbix-agent
とあり、ここはrootじゃないと権限がなくファイル作成できなくて、
起動できません。。。

ユーザー TNK の写真

ですが、zabbixユーザーで同様に実行すると、agentの起動シェルに
lockfile=/var/lock/subsys/zabbix-agent
とあり、ここはrootじゃないと権限がなくファイル作成できなくて、
起動できません。。。

そのディレクトリは、OS上で稼働しているサービスを管理するため
のディレクトリですので一般ユーザでは書き込みできないでしょう。
OSの起動時や終了時に、各種デーモンの状態を確認しつつ処理を行
うようにするために、initやsystemdが利用しています。

OSからの管理から外して個別に起動して利用されたいのであれば、
別のディレクトリを利用してください。

ただし、OSからの管理下から外すということは、例えばOSのシャッ
トダウンをするとき、サービスのstopではなくプロセスを強制的に
killされたりすることになり、正常にサービスを停止できなくなる
可能性が考えられます。

ですから、そのまま起動時にはrootの権限を利用してください。

ユーザー TNK の写真

Zabbixでも1つだけ例外があって、zabbix_agentd.conf内で

 AllowRoot

という設定があります。
これを有効にしてしまうと、zabbix_agentdがrootで動いてしまい
ます。

この状態では、zabbix_agentdを経由してroot権限で様々なコマン
ドを実行できてしまう可能性があります。
root権限で様々なコマンドを実行させてしまうと、OS自体にも影響
を与えてしまう可能性がありますし、攻撃にも悪用されてしまう可
能性があるので、AllowRootを有効にすることは絶対にお勧めしま
せん。

どうしてもroot権限が必要であるならば、sudoなどを適切に設定し
て、限定されたコマンドの実行のみに限定すべきでしょう。

ユーザー sin の写真

TNKさん

すみません、zabbixユーザーで起動できないの部分、間違っていました。
-bash-3.2$ /etc/init.d/zabbix-agent start
Starting Zabbix agent: [ OK ]
touch: cannot touch `/var/lock/subsys/zabbix-agent': Permission denied
⇒正しくは、起動はできるけど、/var/lock/subsysにロックファイルが作れないでした。

/var/lock/subsysは何か調べましたところ、
TNKさんのおっしゃる通りOS停止時にzabbixを停止してくれないとのことです。

ですので、visudoに、
zabbix ALL=(root) NOPASSWD: /etc/init.d/zabbix-agent, /etc/init.d/zabbix-server
と書いて、rootとして実行できるようにして、

su - zabbix
sudo /etc/init.d/zabbix-agent start
とすると、zabbixユーザーで起動できました(ロックファイルも作成)

# 目的は、rootユーザーで操作は危ないので使わず、「zabbixユーザーだけで起動・停止など行いたい」ですので
これで大丈夫なんじゃ...と思っています。

ユーザー TNK の写真

その方法では、デフォルトの時と同様に起動処理はrootで実行され
ています。

そもそも、rootで起動することで何が問題なのですか?
root権限は、あくまでも起動して、initなどで起動しているデーモ
ン群を集中管理できるようにしているだけです。

デーモンがプロセス起動されたあとは、各デーモンで指定されてい
るアカウントで実行されています。
デーモン起動後には、特殊な設定や脆弱性の問題がない限り、root
権限で実行されることはありません。

そこまで気にされるのであれば、SELinuxなどを利用して、より権
限を厳密に管理するようにすればよいと思います。

ユーザー sin の写真

すみません、私の意図が伝わっているか不安になってきたので、
経緯をお話いたします。

これまでzabbix-agentやserverの起動・停止はrootユーザーで行っていました。
# /etc/init.d/zabbix-agent start
↑通常rootユーザーで行うのは合っていますよね(?)

ですが、その作業中、私の不注意で別アプリを停止させる事故がありました。
# /etc/init.d/jira stop

ですので、「rootユーザーで操作したくなく」、
zabbix-agentやzabbix-serverの起動・停止をzabbixユーザーで行いたいというだけになります。

※起動後については何も気にしておりません。。。(プロセスやデーモンのアカウントなど)

ユーザー TNK の写真

ですので、「rootユーザーで操作したくなく」、
zabbix-agentやzabbix-serverの起動・停止をzabbixユーザーで行いたいというだけになります。

まず、rootでログインして操作を行うことをやめるべきです。

各サービスを独立して操作させたいのであれば、それぞれのアカウ
ントを作成して、そのアカウントでのみsudoを利用して操作させる
ようにすれば、他のサービスを不用意に停止させてしまうことは防
げるでしょう。

ユーザー sin の写真

>まず、rootでログインして操作を行うことをやめるべきです。
確かにそうですね。
自分なりにまとめてみました。

・zabbix-serverやagentの起動・停止は、通常rootユーザーで行う
# /etc/init.d/zabbix-agent start など

・しかしrootユーザーで行いたくない場合は、
別のアカウント(zabbixユーザーなど)で、sudoを利用して起動・停止を行う。

su - zabbix でzabbixユーザーになり
$ sudo /etc/init.d/zabbix-agent start など

sudo設定の例(zabbixユーザーの場合)
zabbix ALL=(root) NOPASSWD: /etc/init.d/zabbix-agent, /etc/init.d/zabbix-server

ユーザー TNK の写真

ついでになってしまいますが、1点気になる点があったので補足さ
せて頂きます。

各種デーモンの起動・終了には、init.dディレクトリ以下のスクリ
プトを直接実行するのはお勧めしません。

init.dディレクトリ以下のスクリプトを直接実行する場合、環境変
数の違いの影響を受ける可能性があるので、OSの起動・終了時と同
じ動作をさせるのであれば、serviceコマンドを利用することをお
勧めします。

ユーザー sin の写真

init.dとserviceコマンドにそのような違いがあったんですね。
serviceはほぼ使っておらず、知りませんでした。
教えていただき、ありがとうございます!