2012-03-15 96 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 ...

相關問題