2011-07-01 3 views
2

root権限が必要なRubyで書かれた特定のスクリプトがあります。他のプロセスのほとんどはそれを必要とせず、Monitでセットアップするのも簡単でした。これじゃない。制限されたユーザーとしてmonitを実行し、root権限を必要とするプロセスを監視する

サーバは386でリッスンする必要があり、このポートはルートでのみ使用できます。 1)私は低レベルの人ではないから2)sudoを使うときはこれまでうまくいっていたからだ。

MONITの設定ファイルは簡単で、次のようになります。

set logfile syslog facility LOG_daemon # Default facility is LOG_USER 
set mailserver smtp.sendgrid.net 
     username "blah", password "blah" 
     with timeout 20 seconds 
set alert [email protected] 
set logfile /home/deploy/monit.log 


check process ldapserver 
    with pidfile /var/pids/ldap_server.pid 
    start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb" 
    stop program = "/bin/sh" 

注:このプロセスの停止プログラムはありませんので、私は停止プログラムで/ binに/ SHを入れています。

私はこのように置く場合:

start program = "/usr/local/bin/ruby /var/lib/ldap_server.rb" 

これは、起動に失敗します。ヒントはありません。

start program = "/usr/bin/sudo -u deploy /usr/local/bin/ruby /var/lib/ldap_server.rb 

失敗します。出力はありません。

start program = "/bin/su deploy -c '/usr/local/bin/ruby /var/lib/ldap_server.rb' 

失敗します。

また、stderrとstdoutをキャプチャするために出力を> ~/out.log 2 > &1でリダイレクトしようとしましたが、動作しないようです。

今、私は制限されている配備ユーザの下で、monitを起動します。ですから、私は何とかLDAPサーバーをrootとして実行する必要がありますが、それは非常に難しいことがわかります。

誰かが私を啓発できますか?

乾杯、

M> MONITはすでにとにかくそのユーザーとして実行されているとして「展開」ユーザが(助けにはなりませんし、それが実行する必要があるとして、スクリプトを実行するsudoまたはsuを使用して

+0

ldap_serverスクリプトが[suid root](http://en.wikipedia.org/wiki/Setuid)ではないと仮定しますか? – huitseeker

答えて

6

ルートとして)。

また、sudoはデフォルトでパスワードの入力を要求しますが、そのパスワードは提供できません。以下の内容で、これはファイル/usr/bin/startLDAPServer.shを作成することと、それが実行可能になるだろう解決する

一つの方法(chmod a+x /usr/bin/startLDAPServer.sh):

#!/bin/sh 
/usr/local/bin/ruby /var/lib/ldap_server.rb 

してから/etc/sudoersファイルに次の行を追加します。

deploy ALL =NOPASSWD:/usr/bin/startLDAPServer.sh 

その後、使用することができます。

start program = "/usr/bin/sudo /usr/bin/startLDAPServer.sh" 

in monit。

関連する問題