2009-10-15 79 views
6

我想在CentOS系統上使用python創建一個用戶組。當我說'使用python'時,我的意思是我不想做類似os.system的事情,並給unix命令創建一個新的組。我想知道是否有任何python模塊處理這個問題。使用python在linux中創建一個用戶組

在網上搜索沒有透露很多關於我想要的東西,除了python用戶組..所以我不得不問這個。

我通過在SO上搜索瞭解grp模塊,但找不到任何關於創建組的信息。

編輯:我不知道是否必須爲此啓動一個新問題,但我也想知道如何將(現有)用戶添加到新創建的組。

任何幫助表示讚賞。 謝謝。

+0

我想我會用命令行工具來執行... – 2009-10-15 13:24:32

回答

10

我不知道一個Python模塊,以做到這一點的,但在/ etc/group和/ etc/gshadow格式非常標準,所以如果你想要,你可以打開文件,解析它們的當前內容,然後在必要時添加新的組。

你去這樣做之前,請考慮:

  • 如果您嘗試添加已經存在的系統
  • 當你的程序的多個實例嘗試在添加組會發生什麼在一組,會發生什麼同時
  • 時不兼容的變化,該組的格式由發生在你的代碼是什麼幾個版本的路線
  • NIS,LDAP,Kerberos,請...

如果您不願意處理這些類型的問題,只需使用子進程模塊並運行groupadd即可。這將不太可能打破你的客戶機器。

你可以做的另一件事情就是比編寫自己的代碼更脆弱,就是將代碼包裝在Python中的groupadd.c(在shadow包中)並且這樣做。儘管如此,我不認爲這會給你帶來太多購買,而且會給你的構建增加更多的複雜性和脆弱性。

+1

謝謝你的出色答案。我正在編寫腳本的用例沒有提到任何問題,但將條目添加到那些'神聖'的linux文件中......讓我感到內疚:)...我想我只需要去與子進程解決方案。再次感謝。 – 2009-10-15 05:35:10

5

我想你應該使用你的程序中的命令行程序,很多照顧已經進入確保他們不會破壞組文件,如果出現錯誤。

但是文件格式是相當直截了當地寫自己的東西,如果你選擇去這樣

+0

幕後必須有一些C函數和庫..明顯地),這些命令正在使用,我期待可能是某種圍繞它們的python包裝。 – 2009-10-15 05:24:58

1

沒有創建組的庫調用。這是因爲實際上沒有創建組這樣的事情。 GID只是分配給進程或文件的編號。所有這些數字已經存在 - 沒有什麼是你需要做的開始使用GID。有了適當的權限,你可以調用chown(2)將文件的GID設置爲任意數字,或者setgid(2)設置當前進程的GID(除此之外還有一點點,有效的ID,補充ID等)。

給基於GID的名稱由基本的Unix/Linux/POSIX系統上的/ etc/group中的條目完成,但這實際上只是Unix/Linux/POSIX用戶級工具遵循的約定。其他基於網絡的目錄也存在,正如Jack Lloyd所述。

手冊頁組(5)描述/ etc/group文件的格式,但不建議您直接寫入。您的發行版將制定有關如何分配未命名GID的政策,例如爲不同目的(固定系統組,動態系統組,用戶組等)預留特定空間。這些數字空間的範圍在不同的分佈上有所不同。這些策略通常是在系統管理員用來分配未命名的GID的命令行工具中編碼的。

這意味着在本地添加組的最佳方式是使用命令行工具。

+0

「真的沒有創建團體這樣的事情......」這絕對是一件好事,要知道......非常感謝您的一個很好的答案......我想我會繼續執行命令行工具。 – 2009-10-15 12:55:01