如何允许非本地用户进行 Linux PAM 身份验证

如何允许非本地用户进行 Linux PAM 身份验证

我正在尝试实现一个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

相关内容