2

I have this code to execute a command with and without using sudo option

String sudoScript = "sudo -u root -S ls /";
String script = "ls /";
try {
    System.out.println("===================================");
    System.out.println("command="+sudoScript);
    Process p1 = Runtime.getRuntime().exec(sudoScript);
            System.out.println("p2.waitFor()="+p1.waitFor());
    BufferedReader stdInput1 = new BufferedReader(new InputStreamReader(p1.getInputStream()));
    while ((sudoScript = stdInput1.readLine()) != null) {
            System.out.println(script);
    }
    System.out.println("===================================");
    System.out.println("command="+script);
    Process p2 = Runtime.getRuntime().exec(script);
            System.out.println("p2.waitFor()="+p2.waitFor());
    BufferedReader stdInput2 = new BufferedReader(new InputStreamReader(p2.getInputStream()));
    while ((script = stdInput2.readLine()) != null) {
            System.out.println(script);
    }
} catch (Exception e) {
    e.printStackTrace();
}

And this is the kind of output I get-

===================================
command=sudo -u root -S ls /
p2.waitFor()=1
===================================
command=ls /
p2.waitFor()=0
bin
boot
cgroup
data
dev
etc
home
home.save
lib
lost+found
media
mnt
null
opt
opt.save
proc
root
sbin
selinux
srv
sys
tmp
usr
var

If you observe, I'm not able to get the same output using sudo command. Is there something I've missed here?

4

3 に答える 3

1

現在、ほとんどのディストリビューションでは、tty の実行を要求するように sudo が構成されています。

試してください (/etc/sudoers 内で):

Defaults    requiretty

また

Defaults!/path/to/program !requiretty

ls /その特定のコマンド (例: )に対して sudo がそのユーザーのパスワードを必要としないことを確認するか、または にパスワードを提供する必要がありますsudo

更新: ところで、stderr も読み取ることをお勧めします。そのため、コマンド実行の何が問題なのかを推測する必要はありません。

于 2013-08-14T09:41:47.700 に答える
0

このコマンドsudo -u root -S ls /は、ユーザー パスワードの入力を求めます。

のようなものecho '[password]' | sudo -u root -S ls /がうまくいくかもしれません。

注: これには、パスワードをハードコーディングする必要があります。これはおそらく最良のアイデアではありません。

EDIT:によるとman sudo-u rootオプションは不要です。ランニングsudo -S ls /も同じ効果があります。

于 2013-08-14T09:39:10.613 に答える