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

时间:2009-10-15 05:13:03

标签: python linux usergroups

我想在CentOS系统上使用python创建一个用户组。当我说'使用python'时,我的意思是我不想做像os.system这样的事情,并给出unix命令来创建一个新的组。我想知道是否有任何python模块可以解决这个问题。

在网上搜索没有透露我想要的内容,除了python用户组...所以我不得不问这个。

我在SO上搜索了解了grp模块,但是找不到创建组的任何内容。

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

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

4 个答案:

答案 0 :(得分:11)

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

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

  • 如果您尝试添加系统中已存在的组
  • 会发生什么
  • 当您的程序的多个实例尝试同时添加组时会发生什么
  • 当对一对一行发布的群组格式进行不兼容的更改时,代码会发生什么变化
  • NIS,LDAP,Kerberos,......

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

你可以做的另一件事就是不如编写自己的那么脆弱,就是将代码包装在Python中的groupadd.c(在shadow包中)并以这种方式执行。我不认为这会给你带来太大的影响而不仅仅是执行它,而且会给你的构建增加更多的复杂性和脆弱性。

答案 1 :(得分:5)

我认为使用程序中的命令行程序,如果出现问题,我们会非常谨慎地确保它们不会破坏组文件。

然而,如果你选择那样的话,文件格式很自然地写出来

答案 2 :(得分:1)

没有用于创建组的库调用。这是因为实际上没有创建组的事情。 GID只是分配给进程或文件的编号。所有这些数字已经存在 - 开始使用GID时无需任何操作。使用适当的权限,您可以调用chown(2)将文件的GID设置为任意数字,或调用setgid(2)来设置当前进程的GID(除此之外还有更多,具有有效ID,补充身份证等。)

为GID命名是由基本Unix / Linux / POSIX系统上的/ etc / group中的条目完成的,但这实际上只是Unix / Linux / POSIX用户态工具所遵循的约定。如Jack Lloyd所述,还存在其他基于网络的目录。

手册页组(5)描述了/ etc / group文件的格式,但不建议您直接写入。您的发行版将有关于如何分配未命名的GID的策略,例如为不同目的保留某些空间(固定系统组,动态系统组,用户组等)。这些数字空间的范围因不同的分布而不同。这些策略通常在sysadmin用于分配未命名GID的命令行工具中进行编码。

这意味着在本地添加组的最佳方法是使用命令行工具。

答案 3 :(得分:0)

如果您正在查看Python,请尝试此程序。它使用起来非常简单,代码可以轻松定制http://aleph-null.tv/downloads/mpb-adduser-1.tgz