【问题标题】:How to dynamically allow users in OpenSSH?如何在 OpenSSH 中动态允许用户?
【发布时间】:2019-07-27 10:43:46
【问题描述】:

我希望能够根据使用 OpenSSH 的外部脚本的结果来阻止或允许用户。我看到 libsshsupport for callbacks,但在阅读 OpenSSH 手册页后,我找不到任何将此功能交给用户的地方。

例如,我希望能够维护包含用户名黑名单或白名单的文件甚至 API,并让 OpenSSH 在身份验证过程中查阅这些列表。

到目前为止我的想法,以及为什么它们还不够:

  1. 利用sshd_config:AllowUsers这是一个开始,但由于它不从文件中读取,因此它不是动态的。每次都需要更改配置文件并重新启动服务。此外,通过脚本修改配置文件既危险又可怕。

  2. 使用sshd_config:AuthorizedKeysCommand不幸的是,虽然这确实允许您指定脚本并根据结果授予访问权限,但它不允许拒绝访问.如果脚本没有返回任何内容,sshd 将继续尝试其他身份验证方法。

  3. 使用实现 libssh 回调的附加项重新编译 OpenSSH。出于可维护性的明显原因,我宁愿不这样做。

我在阅读文档时错过了另一种方法吗?

【问题讨论】:

    标签: openssh libssh


    【解决方案1】:

    对于 2. 您可以使用 AuthenticationMethods 将身份验证限制为 publickey

    另一种选择是使用 PAM 并实现您自己的 PAM authz 模块。

    【讨论】:

    • 谢谢,限制为 publickey auth 并没有阻止它,因为它仍然会检查 authorized_keys。我最终禁用了它。 PAM 也是实现这一点的有效方式。
    【解决方案2】:

    如果您禁用检查授权密钥,选项 2 就足够了:

    sshd_config:

    AuthorizedKeysCommand /etc/ssh/my-custom-command
    AuthorizedKeysUser nobody
    AuthorizedKeysFile none
    

    我的自定义命令:

    # $1 is user, as passed from sshd
    
    #psuedo code:
    if $1 is in whitelist:
    cat /home/$1/.ssh/authorized_keys
    exit 0
    else
    exit 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 2015-02-15
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      相关资源
      最近更新 更多