14

我有兴趣编写一个 PAM 模块,该模块将利用流行的 Unix 登录身份验证机制。我过去的大部分编程经验都是在 Python 中进行的,而我与之交互的系统已经有了 Python API。我四处搜索并找到pam_python,它允许 PAM 模块调用 python 解释器,因此允许 PAM 模块基本上Python 编写。

但是,我了解到,当允许用户调用以比用户本身更高的访问级别运行的 Python 代码时存在安全风险,例如 SUID Python 脚本。这些问题是否也适用于 Python PAM 模块?

4

1 回答 1

17

您提到的安全问题本身并不是关于“允许用户调用 Python 代码”以高访问级别运行,而是允许用户对此类代码的运行进行任何形式的控制——最明显的是通过注入或更改代码本身,但更巧妙的是,还通过控制该进程的环境(以及因此该代码导入模块的路径,例如)。(例如,如果用户能够控制后者加载的路径,则类似的问题将适用于 C 编写的代码.so——尽管操作系统可能更直接地帮助解决这种问题)。

在我看来,它pam_python可以很好地抵御此类风险,因此它应该可以安全地用于您的目的。但是,请注意文档指出...:

从 Python 编写 PAM 模块会导致很大的性能损失,并且需要安装 Python,因此它不是编写将被广泛使用的模块的最佳选择。

因此,如果您认为您提供的机制会流行,那么您可能希望用 C 语言编写您的模块以避免这些问题。然而,在用 C 语言确定它之前,在 Python 中将其原型化为有限分布的概念证明是一种可行的策略。

于 2009-09-20T16:20:40.617 回答