我寫了一個python腳本。其中一個功能打開一個端口來監聽。要打開端口進行偵聽,我需要以超級用戶的身份執行此操作。我不想用sudo
或者根權限等來運行腳本。我在這裏看到了關於使用sudo
的子進程的答案。據我所知,這不是我想要的子流程。這只是應用程序中的一個功能。如何以編程方式在腳本中實現超級用戶權限?
問題:如何以超級用戶權限以編程方式打開端口?
我寫了一個python腳本。其中一個功能打開一個端口來監聽。要打開端口進行偵聽,我需要以超級用戶的身份執行此操作。我不想用sudo
或者根權限等來運行腳本。我在這裏看到了關於使用sudo
的子進程的答案。據我所知,這不是我想要的子流程。這只是應用程序中的一個功能。如何以編程方式在腳本中實現超級用戶權限?
問題:如何以超級用戶權限以編程方式打開端口?
你不能那樣做。如果可以,那麼惡意代碼隨時可以以root身份自由訪問任何系統!
如果您想要超級用戶權限,您需要從root帳戶運行腳本或使用sudo並輸入密碼 - 這是擁有用戶帳戶的關鍵。
編輯
值得注意的是,你可以運行一個python腳本中的bash命令 - 例如使用子模塊。
import subprocess
subprocess.run(['sudo', 'blah'])
這基本上創建了一個新的bash過程來運行給定的命令。
如果你這樣做,你的用戶將被提示以你所期望的相同方式輸入他們的密碼,這些特權將只適用於正在創建的子進程 - 而不是你從中調用它的腳本(這可能是原來的問題)。
你能分享你寫的代碼與這個問題有關嗎? – nbryans
您是否可以不使用[authbind](https://manned.org/authbind.1)等工具,因此您只需向python進程授予特定權限...? –
改爲查看功能:https://linux.die.net/man/7/capabilities。您可以爲您的腳本設置功能,例如CAP_NET_BIND_SERVICE,那麼它應該能夠綁定到任何端口而不需要root訪問權限。 – kfx