![可以在 OpenSSH 中配置 keytab 文件位置吗?](https://linux22.com/image/103633/%E5%8F%AF%E4%BB%A5%E5%9C%A8%20OpenSSH%20%E4%B8%AD%E9%85%8D%E7%BD%AE%20keytab%20%E6%96%87%E4%BB%B6%E4%BD%8D%E7%BD%AE%E5%90%97%EF%BC%9F.png)
我们在 Debian jessie 下运行 OpenSSH 服务器。我们使用 Kerberos 作为身份验证方法之一。将 Kerberos 密钥表文件放在 OpenSSH 服务器上的标准位置是/etc/krb5.keytab
.是否有任何 OpenSSH 配置选项允许我们将 keytab 文件放在其他位置,或者该位置是否硬编码在 OpenSSH 服务器可执行文件中?
答案1
(可移植的)OpenSSH 代码库缺少对“keytab”的引用,因此快速转到 kerberos 配置,krb5.conf
我们发现:
LIBDEFAULTS SECTION
The following relations are defined in the [libdefaults] section:
default_keytab_name
This relation specifies the default keytab name to be used by
application severs such as telnetd and rlogind. The default is
"/etc/krb5.keytab". This formerly defaulted to "/etc/v5srvtab",
but was changed to the current value.
对于您的需求来说,这可能是也可能不是太全局的值,具体取决于。
答案2
有一个 kerberos 环境变量指向 kerberos keytab 文件 KRB5_KTNAME 的位置。当然,您可以在全局范围内进行设置,但随后所有应用程序都会查看该一个密钥表文件。
但我终于找到了一个很好的方法,当应用程序配置没有明确允许它时,可以根据应用程序特定的基础来设置它。我将 kerberos keytab 环境变量 KRB5_KTNAME 添加到 /etc/default/ssh (默认情况下,下面的文件的其余部分已经存在):
/etc/default/ssh
# Default settings for openssh-server. This file is sourced by /bin/sh from
# /etc/init.d/ssh.
# Options to pass to sshd
SSHD_OPTS=
KRB5_KTNAME=/etc/krb/host.keytab
上面的文件指定了 init.d,但许多 systemd 服务文件也引用了同一文件。在我安装的 Ubuntu 16.04 上,以下是默认 sshd.service 文件的相关部分:
/lib/systemd/system/sshd.service
[...]
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
[...]
当然,如果您的服务文件不包含“EnvironmentFile”行,您可以按照上面的方式添加它,或者您可以编辑服务文件以指向定义了 KRB5_KTNAME 环境变量的任何文件。