2016-09-18 44 views
2

我寫了一個python腳本。其中一個功能打開一個端口來監聽。要打開端口進行偵聽,我需要以超級用戶的身份執行此操作。我不想用sudo或者根權限等來運行腳本。我在這裏看到了關於使用sudo的子進程的答案。據我所知,這不是我想要的子流程。這只是應用程序中的一個功能。如何以編程方式在腳本中實現超級用戶權限?

問題:如何以超級用戶權限以編程方式打開端口?

+0

你能分享你寫的代碼與這個問題有關嗎? – nbryans

+0

您是否可以不使用[authbind](https://manned.org/authbind.1)等工具,因此您只需向python進程授予特定權限...? –

+0

改爲查看功能:https://linux.die.net/man/7/capabilities。您可以爲您的腳本設置功能,例如CAP_NET_BIND_SERVICE,那麼它應該能夠綁定到任何端口而不需要root訪問權限。 – kfx

回答

0

你不能那樣做。如果可以,那麼惡意代碼隨時可以以root身份自由訪問任何系統!

如果您想要超級用戶權限,您需要從root帳戶運行腳本或使用sudo並輸入密碼 - 這是擁有用戶帳戶的關鍵。

編輯

值得注意的是,你可以運行一個python腳本中的bash命令 - 例如使用子模塊。

import subprocess 
subprocess.run(['sudo', 'blah']) 

這基本上創建了一個新的bash過程來運行給定的命令。

如果你這樣做,你的用戶將被提示以你所期望的相同方式輸入他們的密碼,這些特權將只適用於正在創建的子進程 - 而不是你從中調用它的腳本(這可能是原來的問題)。

0

你可以像這樣在你的python腳本中使用sudo,所以你不必使用sudo或者root來運行腳本。

import subprocess 
subprocess.call(["sudo", "cat", "/etc/shadow"]) 
+1

當然,但這是對同樣的事情的解決方法吧?用戶仍然需要輸入他們的密碼... –

+1

最初的問題沒有提及任何關於不輸入密碼的事情。顯然你不得不這樣做。 – vesche

+0

獲得su特權而不輸入密碼?編號 – Jeon

相關問題