使用pam_exec for openssh的帐户的外部脚本

时间:2017-01-28 19:58:56

标签: linux bash security ssh openssh

我有一个PHP应用程序,其中包含用户名和公共S​​SH密钥。我想将这些帐户用作openssh的用户后端。

我想我需要使用pam_exec和PHP / Bash脚本。我已经编写了一个可以在CLI执行的php脚本(shebang设置了php可执行文件的env)。如果我需要将其包装在bash脚本中而不是访问环境变量,我可以这样做。该脚本目前使用用户名作为其第一个也是唯一的参数,如下所示:

/opt/scripts/my-auth-script.php user_to_look_for

脚本将在成功时退出零(用户存在),否则退出1。它目前也回应OK或Failed,但我可以很容易地将其关闭。

所以,我的问题是,在查看用户帐户的实际主机系统之前,如何让pam_exec调用我的脚本来查找用户帐户?

1 个答案:

答案 0 :(得分:0)

我已经开始工作了。执行此操作的方法是在sshd_config中设置openssh的AuthorizedKeysCommand和AuthorisedKeyUser设置。有一点需要注意,github和其他人通过在客户之间共享的单个登录用户提供ssh作为服务的原因是被调用的用户必须能够被登录的系统解析,因此他们在本地存在muxt,或者用户数据库必须连接到LDAP之类的远程源,然后必须将其集成到应用程序中。

解决这个问题的方法是,AuthorizedKeyCommand可以获取参数,%u用于用户名,在这种情况下,%k表示密钥,%f表示密钥的sha256指纹。然后,该脚本可以忽略它给出的通用用户名,然后只需检查数据库中的密钥或指纹匹配。如果我们找到它,我们就拥有该密钥的用户并成功进行身份验证。如果不是,我们不要。