2011-04-18 37 views
1

我如何通過python腳本更改ubuntu root用戶的密碼?謝謝。更改密碼,python,linux

+1

爲什麼使用python? – 2011-04-18 17:31:59

+1

因爲,我喜歡它,它的可編譯性,並且已經在python中扮演重要角色,這只是一部分。我試圖學習那種語言。 – Riki137 2011-04-18 17:38:31

+0

除了'ubuntu'之外,我還會推薦標記這個'linux' - 對於這個問題,任何答案都應該(大部分)適用於所有Linux發行版。 – 2011-04-18 18:02:10

回答

5

主要有兩種方式去這是 -

一從python調用passwd命令行工具(例如通過stdlib的subprocess模塊)。如果腳本沒有以root身份運行,則需要使用「su」或「sudo」命令進行換行才能提升爲root權限。將預期數據寫入stdin應該足夠了,但如果您發現需要根據sudo/passwd提示所說的執行不同的操作,pexpect模塊可能會有所幫助。

第二個是直接寫入存儲密碼散列的/etc/shadow文件。這將確保要求您的腳本以root用戶身份運行,以便在/ etc/shadow上具有讀/寫權限。 Stdlib提供用於訪問/ etc/shadow的spwd模塊,但它是隻讀的,因此您必須推出自己的讀寫器... csv模塊可能會有用,/ etc/shadow是關閉帶有「:」分隔符的csv文件,但有一些細微差別。

如果您選擇第二條路線,則需要能夠生成替換密碼的新散列,並將它們插入到影子文件中。在linux上最快的方法是使用stdlib crypt模塊,但是你必須注意鹽的產生,並設置合適的密碼哈希前綴(「$ 5 $」,「$ 6 $」等)。或者,Passlib庫中的host_context對象可以爲您處理大部分操作(免責聲明:我是該庫的作者)。

一般來說,如果可能的話,我會推薦第一條路徑 - 直接修改/ etc/shadow充滿危險 - 如果搞亂/ etc/shadow文件,您將無法登錄。你走這條路,備份文件很多

2

您可以修改/etc/passwd/etc/shadow)與Python腳本,將需要root權限sudo python modify.py /etc/passwd(其中modify.py是你的腳本,將更改密碼)

0

您可以使用commands模塊將輸出輸出到終端。

x = commands.getstatusoutput("passwd root") 

但是,您將不得不嘗試輸入「舊密碼:」和「新密碼:」的值。變量x不會被分配,直到命令完成,並且命令將不會完成,直到輸入舊密碼和新密碼。如果您只是第二次使用命令模塊,那麼它只會產生一個新的子進程。因此,就像其他人所說的那樣,只需使用open函數寫入/ etc/shadow即可。