在Python中使用Kerberos认证通过SMB向共享驱动器验证和传输文件
我正在写一个Python脚本,用来通过SMB协议进行身份验证并把文件传到共享驱动器。现在我已经设置好了一个密钥分发中心(KDC)和一个Kerberos领域,我需要连接到一个SMB服务器来传输文件。之前我们使用的是ntlm认证,但由于安全原因,网络安全团队把它禁用了。
我们已经成功地在Java中实现了通过SMB进行Kerberos认证来传输文件。但是在Python中,像gssapi和requests_kerberos这样的库需要在系统上安装Kerberos客户端应用程序,并且还需要设置路径变量。但因为这个Python脚本会在AWS Lambda上运行,所以无法进行这些设置。有没有其他的替代方法可以做到这一点呢?
1 个回答
确实存在纯Python的Kerberos实现,但使用它们的情况非常少。你可能在用的最相关的SMB客户端库smbprotocol
,还是依赖于python-gssapi和python-krb5这两个模块,而这两个模块需要系统中有GSSAPI和Kerberos的库。我不知道有没有什么可以直接替代的方案。
(这部分原因是,和系统Kerberos进行交互的最简单方法就是直接使用系统的Kerberos。例如,Java常常遇到无法读取系统Kerberos库存储的票据的问题,而常用的“原生Go” Kerberos实现几乎不尝试进行交互,这在很大程度上削弱了Kerberos的一个主要优势。)
不过,据我所知,你可以在AWS Lambda函数中使用系统库(也就是说,我只是快速浏览了一下Lambda的常见问题解答,里面明确提到“你可以使用Amazon Linux支持的任何语言启动进程”,甚至还有“你可以包含自己的库副本,以便使用不同于AWS Lambda提供的默认版本的库”),所以应该可以把MIT Krb5或者你需要的其他东西打包进去。