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 - 投稿数: 4769
もともとZabbixサーバーもZabbixエージェントもzabbixユーザーで
実行されるようになっています。
起動するときにroot権限を利用するだけです。
わざわざ書かれていたようなことをする必要はありません。
sin - 投稿数: 24
TNKさん
回答ありがとうございます。
/etc/init.d/zabbix-agent はrootで実行してもzabbixユーザーとして実行されるようになってますね!そこはわかるのですが...
ですが、zabbixユーザーで同様に実行すると、agentの起動シェルに
lockfile=/var/lock/subsys/zabbix-agent
とあり、ここはrootじゃないと権限がなくファイル作成できなくて、
起動できません。。。
TNK - 投稿数: 4769
そのディレクトリは、OS上で稼働しているサービスを管理するため
のディレクトリですので一般ユーザでは書き込みできないでしょう。
OSの起動時や終了時に、各種デーモンの状態を確認しつつ処理を行
うようにするために、initやsystemdが利用しています。
OSからの管理から外して個別に起動して利用されたいのであれば、
別のディレクトリを利用してください。
ただし、OSからの管理下から外すということは、例えばOSのシャッ
トダウンをするとき、サービスのstopではなくプロセスを強制的に
killされたりすることになり、正常にサービスを停止できなくなる
可能性が考えられます。
ですから、そのまま起動時にはrootの権限を利用してください。
TNK - 投稿数: 4769
Zabbixでも1つだけ例外があって、zabbix_agentd.conf内で
AllowRoot
という設定があります。
これを有効にしてしまうと、zabbix_agentdがrootで動いてしまい
ます。
この状態では、zabbix_agentdを経由してroot権限で様々なコマン
ドを実行できてしまう可能性があります。
root権限で様々なコマンドを実行させてしまうと、OS自体にも影響
を与えてしまう可能性がありますし、攻撃にも悪用されてしまう可
能性があるので、AllowRootを有効にすることは絶対にお勧めしま
せん。
どうしてもroot権限が必要であるならば、sudoなどを適切に設定し
て、限定されたコマンドの実行のみに限定すべきでしょう。
sin - 投稿数: 24
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 - 投稿数: 4769
その方法では、デフォルトの時と同様に起動処理はrootで実行され
ています。
そもそも、rootで起動することで何が問題なのですか?
root権限は、あくまでも起動して、initなどで起動しているデーモ
ン群を集中管理できるようにしているだけです。
デーモンがプロセス起動されたあとは、各デーモンで指定されてい
るアカウントで実行されています。
デーモン起動後には、特殊な設定や脆弱性の問題がない限り、root
権限で実行されることはありません。
そこまで気にされるのであれば、SELinuxなどを利用して、より権
限を厳密に管理するようにすればよいと思います。
sin - 投稿数: 24
すみません、私の意図が伝わっているか不安になってきたので、
経緯をお話いたします。
これまでzabbix-agentやserverの起動・停止はrootユーザーで行っていました。
# /etc/init.d/zabbix-agent start
↑通常rootユーザーで行うのは合っていますよね(?)
ですが、その作業中、私の不注意で別アプリを停止させる事故がありました。
# /etc/init.d/jira stop
ですので、「rootユーザーで操作したくなく」、
zabbix-agentやzabbix-serverの起動・停止をzabbixユーザーで行いたいというだけになります。
※起動後については何も気にしておりません。。。(プロセスやデーモンのアカウントなど)
TNK - 投稿数: 4769
まず、rootでログインして操作を行うことをやめるべきです。
各サービスを独立して操作させたいのであれば、それぞれのアカウ
ントを作成して、そのアカウントでのみsudoを利用して操作させる
ようにすれば、他のサービスを不用意に停止させてしまうことは防
げるでしょう。
sin - 投稿数: 24
>まず、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 - 投稿数: 4769
ついでになってしまいますが、1点気になる点があったので補足さ
せて頂きます。
各種デーモンの起動・終了には、init.dディレクトリ以下のスクリ
プトを直接実行するのはお勧めしません。
init.dディレクトリ以下のスクリプトを直接実行する場合、環境変
数の違いの影響を受ける可能性があるので、OSの起動・終了時と同
じ動作をさせるのであれば、serviceコマンドを利用することをお
勧めします。
sin - 投稿数: 24
init.dとserviceコマンドにそのような違いがあったんですね。
serviceはほぼ使っておらず、知りませんでした。
教えていただき、ありがとうございます!