6

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

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

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

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

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

4

4 回答 4

11

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

在执行此操作之前,请考虑:

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

如果您不愿意处理这类问题,只需使用 subprocess 模块并运行 groupadd。破坏客户机器的可能性将大大降低。

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

于 2009-10-15T05:26:09.760 回答
5

我认为你应该从你的程序中使用命令行程序,如果出现问题,他们会非常小心地确保它们不会破坏组文件。

但是,如果您选择采用这种方式,则文件格式非常简单,可以自己编写一些东西

于 2009-10-15T05:20:29.023 回答
1

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

在基本的 Unix/Linux/POSIX 系统上,通过 /etc/group 中的条目来为 GID 命名,但这实际上只是 Unix/Linux/POSIX 用户空间工具所遵循的约定。正如 Jack Lloyd 所提到的,其他基于网络的目录也存在。

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

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

于 2009-10-15T11:47:13.493 回答
-2

如果你在看 Python,那么试试这个程序。它使用起来相当简单,并且可以轻松自定义代码http://aleph-null.tv/downloads/mpb-adduser-1.tgz

于 2010-03-11T16:33:03.660 回答