5

私は小さなシステム管理Webアプリケーション(Web-Minと思いますが、RoRで)を構築しており、Rubyコードからシステムパラメーターにアクセスできる必要があります。たとえば、ユーザーがサーバーのホスト名、タイムゾーン、またはネットワーク構成を変更できるようにしたい。

私の現在の考えは、RoRコードから呼び出すことができ、アクションを実行できるように、別のsetuidスクリプト(Perl、Ruby、??)を用意することです。それは非常に面倒で、あまりエレガントではありません。私はRubyの初心者であり、この種のことを達成するためのより良い方法があるかどうか知りたいです。

ありがとう!

4

4 に答える 4

3

BackgrounDRbを使用できます。その目的は、Railsアプリからタスクをオフロードすることであり、サーバーを別のユーザーで実行できます。

于 2008-11-04T10:55:26.017 に答える
3

バックグラウンドタスクをカバーする一連のRailsCastsエピソードがありました。

あなたの問題に最もふさわしいのは、おそらく「バックグラウンドでのレーキ」です。これは良い出発点になる可能性がありますか?名前が示すように、RubyonRailsからのrakeタスクのトリガーをカバーしています。

システム設定を変更するための最も明白な解決策は、ルートとしてデーモンを実行することです。デーモンは、新しいホスト名やサーバーの新しいIPアドレスなど、いくつかの(非常に制限され、厳密にサニタイズされた)入力を受け入れます。エピソード「StarlingandWorkling」 CustomDaemon」もこれに役立つ可能性があります。

よりクリーンな解決策は、を使用することsudoです。私が考えることができるこれを行うための2つの(同様の)方法があります:

rakeタスクを実行するユーザーに特定のコマンド( hostname、など)へのsudoアクセスを許可します。ifconfigこれには大きなセキュリティ問題が発生する可能性があります。私のお気に入りの例は、実行するまでは無害に見えるvimへのsudoアクセスを許可することですsudo vim。その後!bash、突然、テキストエディタを介してマシンへのフルルートアクセスが可能になります。

もう1つの方法(安全に実行する方が簡単です)-必要なタスク(ホスト名の変更など)を実行するrakeタスク(またはいくつかの個別のスクリプト)を用意します。/usr/bin/myapp_systemtasksが所有していると言うと、root:rootそのスクリプトへのsudoアクセスを許可します。スクリプトが受け入れる入力をサニタイズするように十分注意してください(シェルエスケープなどを防ぐため)。

したがって、それを行う方法はいくつかありますが、結局のところ、システムレベルの構成へのWebインターフェイスを作成しているため、安全に行うのは非常に困難です。何をするにしても、十分にテストされていることを確認してください(あなたや他の人によって)

于 2008-11-04T13:43:06.707 に答える
0

ある人は、次のようなものを使用することを提案しresult = %x[uptime]、この非常に役立つブログ投稿を教えてくれました。これは、sudo で呼び出され、sudoers で適切な権限を持つある種のラッパー スクリプトを組み合わせることで実行できると思います。

于 2008-11-04T12:18:42.527 に答える
0

Starlingで同様のタスクを実行しましたが、これは実際には単なるキュー サーバーです。使い方はとても簡単で、ワーカー スレッドを別のユーザーで簡単に実行できます。

スターリングの利点の 1 つは、キューをジャーナル処理するため、問題が発生した場合にキューを再作成できることです。

require 'starling'
starling = Starling.new('127.0.0.1:22122')
starling.set('my_queue', 12345)

次に、ワーカーはタスクを簡単にデキューできます。

require 'starling'
loop do
  starling.get('my_queue') # this will block until something gets added to the queue
  # do stuff
end
于 2008-11-05T15:52:02.093 に答える