我有兴趣编写一个PAM模块,该模块将利用Unix登录的流行认证机制。我过去的大多数编程经验都是用Python编写的,我正在与之交互的系统已经有了一个Python API。我用Google搜索并发现pam_python,它允许PAM模块调用python intrepreter,因此允许PAM模块基本上用 in Python编写。
但是,我已经读过,允许用户调用以比用户本身更高的访问级别运行的Python代码存在安全风险,例如SUID Python脚本。这些问题是否也适用于Python PAM模块?
答案 0 :(得分:17)
您提到的安全问题本身并不是“允许用户调用Python代码”,该代码以高访问级别运行,但允许用户使用任何形式的控件运行这样的代码 - 最明显的是通过注入或改变代码本身,但更巧妙的是,通过控制该进程的环境(以及因此代码导入模块的路径)。 (如果用户能够控制后者加载.so
的路径,那么类似的问题将适用于C编写的代码 - 尽管操作系统可能更直接地帮助解决这个问题。)
在我看来,pam_python
可以很好地抵御这些风险,因此它应该可以安全地用于您的目的。但请注意the docs指出......:
从Python编写PAM模块 大的性能损失和 需要安装Python,所以它 不是写作的最佳选择 将被广泛使用的模块。
因此,如果您提供的机制很受欢迎,那么您可能希望在C中对模块进行编码以避免这些问题。然而,在用Python进行原型设计之前,将其作为概念证明进行分析,然后在C中确定它是一种可行的策略。