2013-03-06 45 views
1

我想在UNIX上以受限特權運行腳本。具體來說,我想運行我收到的代碼而不讓它發送數據。我目前的解決方案是:如何阻止給定用戶的所有流量?

  1. 創建一個虛擬用戶。
  2. 使用iptables來阻止僞用戶的所有傳出流量。
  3. 使用su - dummy -c 'command'作爲虛擬用戶運行目標程序。

我實現上述第2步的方式如this page中所述。具體來說,我用下面的命令來添加新的規則:

sudo iptables -I OUTPUT -m owner --uid-owner dummy -j DROP 

當我現在嘗試通過切換到虛擬帳戶ping一個網址,因爲我加入了規則iptables的平安確實失敗。下面是一個命令:

> su - dummy -c 'ping www.google.com' 
ping: unknown host www.google.com 

也是一樣嘗試使用traceroute。然而,當我嘗試使用mutt類似的方式發送電子郵件,它成功:

su - dummy -c 'echo "test" | mutt -s test [emailaddress]' 

爲什麼不規則街區,以及更普遍,如何確保所有出站流量被阻擋了我正在運行的程序?

+0

這可能更適合http://superuser.com/。 – 2013-03-06 02:25:17

+0

謝謝,我不知道那個網頁。我認爲沒有任何方法可以在那裏轉移這個問題,而不必重新發布。 – ask 2013-03-06 02:32:02

回答

0

這是一個設置chroot監獄的指南,它似乎是你需要的。

https://help.ubuntu.com/community/BasicChroot 

這可以讓你控制什麼命令可以執行,你可以限制用戶訪問像mutt這樣的東西沒有問題。您授予訪問權限,您不必知道拒絕的內容。因爲所有命令都被默認阻止。這使得設置更簡單。

1

mutt使用郵件服務器發送電子郵件,而這很可能不會與虛擬用戶身份一起運行。

+0

只有當郵件服務器是本地的_and_上面的iptables規則不適用於本地流量時,這纔有意義。 (mutt仍然需要與郵件服務器進行通信。)你可能想嘗試:su - dummy -c'ping 127.0.0.1'如果這樣,而你的郵件服務器在本地機器上,我必須同意喬治。 – Sniggerfardimungus 2013-03-06 02:29:09

+0

Pinging localhost工作。我不知道我怎麼能告訴我的郵件服務器在本地機器上(我沒有以任何特殊的方式配置mutt)。 – ask 2013-03-06 02:39:07

+0

除了mutt,你必須看看你的腳本是否在使用任何其他可能運行/運行在其他虛擬的其他用戶上,並且仍然可以保持互聯網訪問的東西。 mutt只是一個例子,但你可以有更多的交互可以通過。 – 2013-03-06 02:54:04