2012-10-03 42 views
4

我想在Ubuntu 12.04上使用Python創建一個Telnet服務器。爲了能夠以不同的用戶身份執行命令,我需要使用su命令,然後提示輸入密碼。現在,我知道提示被髮送到STDERR流,但我不知道我應該發送密碼到哪個流。如果我嘗試通過STDIN發送它,則會收到錯誤:su: must be run from a terminal。我如何繼續?Telnet服務器的Ubuntu - 密碼流

+0

這聽起來像個壞主意。世界已經轉向SSH以阻止密碼被嗅探出網絡。 這就是說,你有沒有想過以所需用戶的身份運行telnet服務器,或者以root身份運行telnet服務器,並在執行該命令之前執行os.setuid()。 您也可以使用普通的SSH服務器並使用sudo。 –

+0

只要我完成了Telnet的實現,我就可以爲它添加網絡安全層。問題不是以root用戶或該用戶身份運行它。問題是使用遠程用戶提供的密碼登錄系統。 – hackwa

+1

您是否曾用'-S'(stdin)選項使'sudo'代替'su'而導致'sudo'從標準輸入而不是終端設備讀取密碼? –

回答

1

如果您確實想要使用系統的su程序,您需要在python中創建一個終端對,參見man 7 pty,這是pty.openpty調用,返回一對文件描述符,一個給你,一個給su。然後你必須fork,在子進程中改變stdin/out/err到slave fd和exec su。在父進程中,您將數據發送到master fd並從master接收數據。 Linux內核將這些連接在一起。

或者你也許可以效仿su

+0

我想到了一個簡單的解決方案,使用mkpasswd -m sha-512 -salt =%s -s hackwa