2012-03-15 42 views

回答

1

你可以只下降西头一起,创建一个shell脚本的suid root用户,运行该网址。

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

每当脚本调用时,它将以root身份运行。

3

您可以配置sudo来允许特定命令没有密码运行。这并不需要你知道密码。

具有其中必须在某个阶段明文程序root的密码实际上是不太安全恕我直言。

+0

这可能是有用的,但对我来说,我不会总是事先知道这是要通过sudo的执行脚本,因此不能设置sudoers文件对于要运行的每个脚本每次/ R配置sudo的。我假设我们在sudoers文件中设置该设置,对吧? – 2012-03-21 07:28:47

+0

你可以让用户能够运行任何东西,但这听起来很危险。这允许一个受损系统运行任何事情,无论是否需要密码,这都是一个坏主意。 – 2012-03-21 08:45:32

1

通常sudo通过直接在终端上操作来读取密码。你应该在这里使用sudo -S。使用此选项时,它将尝试从标准输入中读取密码,然后可以通过在运行命令时从Runtime.exec()创建的Process获得的OutputStream发送该密码。

+0

但是,我需要在sudoers文件中禁用requiretty选项。 – 2012-03-21 07:26:54

0

,如果你在终端上创建一个脚本和(使用的Runtime.exec)

0

正如你们已经提到的,你可以使用sudo仅如果您当前使用的配置在系统从Java调用它,它会更好一个可以运行sudo。否则(一般情况下)你必须输入密码。

你必须输入密码,如果你想远程计算机上运行命令,使用ssh以及或远程使用scp复制文件。

一些命令可以接受的密码作为命令行的参数。例如,mysql实用程序可以在开关-p后接受密码。其他一些命令更为严格:它们不会在命令行中释放密码,甚至不允许您通过重定向进程标准输入提供密码。例子是sshscp

,以确保你总是可以编程方式运行,需要输入密码的任何命令,唯一的办法就是仿效终端。这是实用程序expect。以它的手册页一看:http://linux.die.net/man/1/expect

我在过去使用expect。它是一个脚本驱动的实用程序,可以在用户使用终端时准确模拟用户的行为。我们使用ProcessBuilder作为常规外部进程从java运行期望脚本。

1

获得从一台机器到其他使用ssh或scp可以,如果你配置无密码的SSH来完成。这是一种用于需要一起工作并由头节点控制的机器群集的方法。例如hadoop使用这种方法。

0

我需要使用ProcessBuilder来运行tcpdump。这是我如何做的:

visudo命令 myuser的ALL = NOPASSWD:/ usr/sbin目录/ tcpdump的

然后我的命令从Java是,这是从myuser的运行: 在/ usr /斌/须藤的/ usr/sbin/tcpdump -i eth0端口8561 ...

相关问题