2012-03-15 5 views

答えて

1

あなたはsoduをすべて削除して、シェルスクリプトsuid rootを作成して代わりに実行できます。

chmod +s myscript && chown root myscript && chgrp root myscript 

このスクリプトが呼び出されるたびに、そのスクリプトはrootとして実行されます。

3

特定のコマンドをパスワードなしで実行できるようにsudoを構成できます。これはあなたがパスワードを知る必要はありません。

プログラムのルートパスワードをある段階でクリアテキストにすることは、実際には安全性が低いIMHOです。

+0

これは役に立つかもしれませんが、私の場合、sudoを通して実行されるスクリプトを常に事前に知っているわけではないので、実行するスクリプトごとにsudoersファイルを設定することはできません。私はその設定をsudoersファイルで行うと仮定しています。 –

+0

あなたは何かを動かせるようにすることができますが、それは一生懸命に聞こえます。これは、侵入されたシステムがパスワードを必要とするかどうかにかかわらず、何かを実行することを可能にします。 –

1

通常、sudoは端末で直接操作してパスワードを読み取ります。 sudo -Sをここで使用してください。このオプションを使用すると、標準入力からパスワードを読み取ろうとしてから、コマンドを実行するとによって作成されたProcessからOutputStreamを使用してパスワードを送信できます。

+0

しかし、sudoersファイルでrequirettyオプションを無効にする必要があります。 –

0

あなたが端末上でスクリプトを作成し、(のRuntime.execを使用して)、Javaからそれを呼び出す場合、それは良くなる

0

人はすでにあなたの現在の使用は次のようにシステムで設定されている場合にのみsudoを使用することができます述べたように実行可能なものはsudoです。それ以外の場合(通常は)、パスワードを入力する必要があります。

sshを使用してリモートコンピュータでコマンドを実行する場合、またはscpを使用してリモートでファイルをコピーする場合は、パスワードを入力する必要があります。

一部のコマンドは、コマンドラインのパラメータとしてパスワードを受け入れることができます。たとえば、mysqlユーティリティはスイッチ-pの後にパスワードを受け入れることができます。他のコマンドはより厳密です:コマンドラインでパスワードを実行せず、プロセスの標準入力のリダイレクトによってパスワードを提供することさえできません。例はsshscpです。

パスワードを入力する必要があるコマンドをプログラムで実行できることを確認する唯一の方法は、端末をエミュレートすることです。これはユーティリティーexpectの機能です。そのマニュアルページをご覧ください:http://linux.die.net/man/1/expect

私は過去にexpectを使用しました。それは、人間が端末を使って作業しているときとまったく同じように、ユーザの行動をシミュレートすることを可能にするスクリプト駆動型ユーティリティです。私たちは、通常の外部プロセスとしてjavaからexpectスクリプトを実行し、ProcessBuilderを使用しました。

1

パスワードなしのsshを設定すると、sshまたはscpを使用して1台のマシンから別のマシンにアクセスできます。これは、一緒に作業する必要があり、ヘッドノードによって制御されるマシンのクラスタに使用される1つの方法です。たとえば、hadoopはこのメソッドを使用します。

0

ProcessBuilderを使用してtcpdumpを実行する必要がありました。ここで私はそれをやった方法です:

visudoを myuserのALL = NOPASSWDします。/ usr/sbin/tcpdumpを

次にJavaから私のコマンドは、MYUSERから実行された、だった: は/ usr/binに/ sudoのは/ usr/sbin/tcpdump -i eth0ポート8561 ...

関連する問題