Python PAM模块的安全隐患?

14 投票
1 回答
3416 浏览
提问于 2025-04-15 14:27

我想写一个PAM模块,用来实现一种在Unix登录时常用的身份验证方式。我之前大部分的编程经验都是用Python,而且我现在要用的系统已经有了Python的接口。我在网上查了一下,发现了pam_python,这个工具可以让PAM模块调用Python解释器,这样就可以用Python来写PAM模块了。

不过,我听说让用户运行Python代码可能会有安全隐患,尤其是那些以比用户更高的权限运行的代码,比如SUID Python脚本。那么,这些安全问题在Python PAM模块中也适用吗?

1 个回答

17

你提到的安全问题,其实并不是单纯关于“让用户执行高权限的Python代码”,而是关于用户是否能对这些代码的运行进行任何形式的控制。最明显的就是用户可以注入或修改代码,但更微妙的是,用户还可以控制代码运行的环境,比如影响代码从哪里导入模块等。如果用户能控制C语言代码加载库文件的路径,也会有类似的安全隐患,虽然操作系统可能会在这方面提供更多的保护。

看起来pam_python在这方面做得很好,能够有效防范这些风险,所以应该可以安全地用于你的需求。不过,要注意的是,文档中提到……:

用Python编写PAM模块会带来很大的性能损失,并且需要安装Python,所以这并不是一个适合广泛使用的模块编写选项。

所以,如果你认为你提供的机制会很受欢迎,可能最好还是用C语言来编写你的模块,以避免这些问题。不过,先用Python做一个原型,作为概念验证,有限范围内使用,然后再用C语言完善它,这也是一个可行的策略。

撰写回答