使用python在linux中创建一个用户组

问题描述:

我想在CentOS系统上使用python创建一个用户组。当我说'使用python'时,我的意思是我不想做类似os.system的事情,并给unix命令创建一个新的组。我想知道是否有任何python模块处理这个问题。使用python在linux中创建一个用户组

在网上搜索没有透露很多关于我想要的东西,除了python用户组..所以我不得不问这个。

我通过在SO上搜索了解grp模块,但找不到任何关于创建组的信息。

编辑:我不知道是否必须为此启动一个新问题,但我也想知道如何将(现有)用户添加到新创建的组。

任何帮助表示赞赏。 谢谢。

+0

我想我会用命令行工具来执行... – 2009-10-15 13:24:32

我不知道一个Python模块,以做到这一点的,但在/ etc/group和/ etc/gshadow格式非常标准,所以如果你想要,你可以打开文件,解析它们的当前内容,然后在必要时添加新的组。

你去这样做之前,请考虑:

  • 如果您尝试添加已经存在的系统
  • 当你的程序的多个实例尝试在添加组会发生什么在一组,会发生什么同时
  • 时不兼容的变化,该组的格式由发生在你的代码是什么几个版本的路线
  • NIS,LDAP,Kerberos,请...

如果您不愿意处理这些类型的问题,只需使用子进程模块并运行groupadd即可。这将不太可能打破你的客户机器。

你可以做的另一件事情就是比编写自己的代码更脆弱,就是将代码包装在Python中的groupadd.c(在shadow包中)并且这样做。尽管如此,我不认为这会给你带来太多购买,而且会给你的构建增加更多的复杂性和脆弱性。

+1

谢谢你的出色答案。我正在编写脚本的用例没有提到任何问题,但将条目添加到那些'神圣'的linux文件中......让我感到内疚:)...我想我只需要去与子进程解决方案。再次感谢。 – 2009-10-15 05:35:10

我想你应该使用你的程序中的命令行程序,很多照顾已经进入确保他们不会破坏组文件,如果出现错误。

但是文件格式是相当直截了当地写自己的东西,如果你选择去这样

+0

幕后必须有一些C函数和库..明显地),这些命令正在使用,我期待可能是某种围绕它们的python包装。 – 2009-10-15 05:24:58

没有创建组的库调用。这是因为实际上没有创建组这样的事情。 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

如果你正在看Python,那么试试这个程序。它的使用相当简单,代码可以很容易地自定义http://aleph-null.tv/downloads/mpb-adduser-1.tgz