我正在尝试实现一个Ubuntu 上的 SFTP 服务器用户应该通过外部身份提供商进行身份验证(他们提供 REST API 来验证用户凭据)。
我已经使用以下方法完成了 POCpam_python并能够拦截密码验证逻辑。但现在如果用户尚未在本地创建,则不允许登录。
Failed password for invalid user john from <ip> port 63159 ssh2
我做了一些研究,社区似乎说应该在本地创建用户。(06岁參考)
我尝试添加以下代码来动态创建用户。
def pam_sm_authenticate(pamh, flags, argv):
try:
user = pamh.get_user(None)
except pamh.exception as e:
return e.pam_result
home_dir = "/home/" + user
if not os.path.exists(home_dir):
os.system("useradd -m "+user+" -g sftp")
但它不允许用户在同一次尝试中登录,只有用户再次尝试登录时才允许。因此,这对于我的要求来说并不方便用户使用。
sshd[8296]: Invalid user john3 from 192.168.1.1 port 64204
useradd[8299]: new user: name=john3, UID=1003, GID=1001, home=/home/john3, shell=/bin/sh, from=none
sshd[8296]: Failed password for invalid user john3 from 192.168.1.1 port 64204 ssh2
后来我偶然发现了名称服务交换机配置。但我的要求是保留我的外部身份提供者作为用户列表源。可以实现吗?
答案1
如果外部身份提供商使用 OpenID,那么我最好的选择是使用 FreeIPA 和 SSSD。但是,这可能很难集成。以下链接详细介绍了解决方案的设计,可能会对您有所帮助:https://freeipa.readthedocs.io/en/latest/designs/external-idp/external-idp.html