2011-08-23 71 views
3

我正在編寫管理nginx(域,重寫等),svn和其他服務的面板。爲此,我正在編寫將在root上工作的後端(更改nginx配置,重新加載它們,更改用戶密碼等)以及客戶端(控制檯客戶端和Web應用程序)。使用python後端的客戶端授權

應用程式適用於Unix套接字,和我做了非常簡單的協議吧:

\0\0\0\0user\0key\0module\0command\0data\0 

好了,這是很簡單的。客戶端發送命令和數據到後端,例如:

\0\0\0\0morsik\0\0nginx\0add_domain\0www.domain.tld something\0 

問題是,如何驗證用戶真的是morsik?對於Web界面,我不必 - 網頁有自己的授權,所以我可以發送一些密鑰,這將適用於任何人都不知道的用戶。 問題是如果有人有權訪問ssh。然後他可以編寫簡單的客戶端來欺騙用戶名,然後他可以更改其他用戶配置。

那麼,我怎樣才能爲用戶做出正確的授權?

+1

你可能想學習書「應用密碼學」,由布魯斯,第一。很有可能你必須使用同一個密鑰的HMAC。 – Keith

+0

HMAC看起來很有趣,但如果密鑰會被公衆所知,那麼欺騙數據仍然存在。因爲這是python腳本,所以必須公開...或者有其他方法來存儲密鑰? – morsik

+0

讀這本書。 ;-) – Keith

回答

1

不要重新發明輪子。 ;)我發現這個討論有啓發性:

+0

這對我沒有多大幫助。我知道在python中使用unix auth。問題是如果數據包沒有輸入密碼而沒有被破壞(如果sb登錄到ssh,他可能不想輸入密碼......),如何進行認證。 – morsik

+0

第一篇鏈接的文章恰好討論了這一點。 –

+0

根據您的第一個鏈接: >>「在這種情況下,客戶端程序 - 」取消「或」lp「,或任何使用libcups作爲其打印對話框的程序,例如Evince文檔查看器 - 可以傳遞其UID(數字ID對應於用戶名)通過域套接字連接到服務器 所以UID可能在這裏被欺騙。「<<或者我錯了?這裏有什麼安全措施來防止UID /用戶名? – morsik