使用python在linux中创建一个用户组
我想在CentOS系统上使用python创建一个用户组。当我说'使用python'时,我的意思是我不想做类似os.system的事情,并给unix命令创建一个新的组。我想知道是否有任何python模块处理这个问题。使用python在linux中创建一个用户组
在网上搜索没有透露很多关于我想要的东西,除了python用户组..所以我不得不问这个。
我通过在SO上搜索了解grp模块,但找不到任何关于创建组的信息。
编辑:我不知道是否必须为此启动一个新问题,但我也想知道如何将(现有)用户添加到新创建的组。
任何帮助表示赞赏。 谢谢。
我不知道一个Python模块,以做到这一点的,但在/ etc/group和/ etc/gshadow格式非常标准,所以如果你想要,你可以打开文件,解析它们的当前内容,然后在必要时添加新的组。
你去这样做之前,请考虑:
- 如果您尝试添加已经存在的系统
- 当你的程序的多个实例尝试在添加组会发生什么在一组,会发生什么同时
- 时不兼容的变化,该组的格式由发生在你的代码是什么几个版本的路线
- NIS,LDAP,Kerberos,请...
如果您不愿意处理这些类型的问题,只需使用子进程模块并运行groupadd即可。这将不太可能打破你的客户机器。
你可以做的另一件事情就是比编写自己的代码更脆弱,就是将代码包装在Python中的groupadd.c(在shadow包中)并且这样做。尽管如此,我不认为这会给你带来太多购买,而且会给你的构建增加更多的复杂性和脆弱性。
谢谢你的出色答案。我正在编写脚本的用例没有提到任何问题,但将条目添加到那些'神圣'的linux文件中......让我感到内疚:)...我想我只需要去与子进程解决方案。再次感谢。 – 2009-10-15 05:35:10
我想你应该使用你的程序中的命令行程序,很多照顾已经进入确保他们不会破坏组文件,如果出现错误。
但是文件格式是相当直截了当地写自己的东西,如果你选择去这样
幕后必须有一些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的命令行工具中编码的。
这意味着在本地添加组的最佳方式是使用命令行工具。
“真的没有创建团体这样的事情......”这绝对是一件好事,要知道......非常感谢您的一个很好的答案......我想我会继续执行命令行工具。 – 2009-10-15 12:55:01
我想我会用命令行工具来执行... – 2009-10-15 13:24:32