Samba 身份验证

Samba 身份验证

我知道这看起来好像我没有在这里做过研究,因为我做过,而且我知道有多少相关问题和教程。我已经阅读了网上能找到的所有教程。我已经浏览了 serverfault 上 Samba/Kerberos/AD/authentication 主题的完整列表。

实际上,让我走得最远的教程是,因为我能够在每个阶段验证成功http://www.howtoforge.com/samba_active_directory。唉,还是没用。不用多说,我的问题:

我有一个运行 CentOS 6.5 的 KVM 客户机。我安装了 Samba 3.6.9。我想使用 Samba 共享用户的主目录,以便他们可以将它们映射为 Windows 7 计算机上的网络驱动器。我已经成功做到了这一点使用smbpasswd本地帐户。问题是我想使用 Kerberos(Active Directory,我无法控制)对这些用户进行身份验证。我不需要或不想要来自 Kerberos/AD/LDAP 的任何用户、组或策略信息。我仅有的想要验证用户向 Windows 驱动器映射 GUI 提供并发送给 Samba 的用户密码。

还值得注意的是,我已经在同一 KVM 客户机上为同一用户配置了 Kerberos 以进行 SSH 访问。在 中输入条目/etc/passwd且 中未设置密码/etc/shadow,用户在 SSH 登录时输入他们的 Kerberos 密码并进行身份验证。这正是我对 Samba 的期望。我希望用户“映射网络驱动器”,输入 Samba 服务器的 FQDN,输入他们的用户名和密码,并让 Samba 使用该密码对他们进行身份验证,就像 SSH 使用密码对他们进行身份验证一样,此时共享将成功映射。

我已经做好了:

service winbind start
service smb start
service nmb start

krb5.conf非常适合 SSH 身份验证的方法是:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = MYDOMAIN.COM
 dns_lookup_realm = true
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 MYDOMAIN.COM = {
  kdc = mydomain.com
  admin_server = mydomain.com
 }

[domain_realm]
 .mydomain.com = MYDOMAIN.COM
 mydomain.com = MYDOMAIN.COM

在中/etc/samba/smb.conf,我尝试了很多东西,但根据所有教程,最合乎逻辑的配置涉及最相关的内容:

workgroup = MYDOMAIN
security = ads
realm = MYDOMAIN.COM
encrypt passwords = yes
kerberos method = secrets only
password server = mydomain.com

值得注意的是,mydomain.com 是我的服务器的 FQDN,而 MYDOMAIN.COM 是 Kerberos 领域,所以这不是拼写错误。

问题是,首先,大多数教程都谈到了为主机生成密钥表和主体。我不明白这一点,因为我不是在验证主机,而是在验证用户。此外,据我所知,使用 Kerberos 进行 SSH 密码验证不需要这样的步骤(我不需要这样做)。他们建议相应地设置“kerberos 方法 = secrets and keytab”。其次,许多教程似乎都集中在获取存储在 Active Directory 中的用户和组的信息或使用 Kerberos 针对 Samba 验证用户以用于其他目的。我只想使用 Samba 进行文件共享,我只想使用 Kerberos 来验证密码,就像我的 SSH 配置一样。

我所尝试的每一次尝试和遵循的每一个教程都以失败告终。我检查/var/log/samba/*日志,发现文件的名称包括连接机器的 IP 地址,但没有关于连接尝试的信息。这些日志文件是空的。

值得注意的是,虽然我可以将我的服务器加入到域中,但我没有管理权限,所以我认为我无法生成密钥表(虽然我不明白为什么如果 SSH 不需要,Samba 却需要密钥表)。

有人能帮我完成这个吗?或者,如果因为某种原因无法完成,请告诉我并解释原因?我不介意有人给我一个教程,但我确实搜索了我能找到的每一个教程,所以如果您提供教程链接,请愿意接受后续问题。

非常感谢。

答案1

问题是,首先,大多数教程都谈到了为主机生成密钥表和主体。我不明白这一点,因为我不是在验证主机,而是在验证用户。

我知道这个答案是在问题提出几年后,但是,从 Centrify 的 centrifydc.conf 文件中:

默认情况下,将通过检索和验证本地系统的服务票证来验证用户的 TGT。进行此检查是为了防止众所周知的攻击(Zanarotti 又名屏幕保护程序攻击),即恶意 KDC 可以响应我们的请求以获取用户的 TGT。如果设置为 false,则将禁用欺骗检查,并将显著提高身份验证性能。krb5.ve​​rify.credentials:true

麻省理工学院网站还称:每当程序基于用户成功获取初始 Kerberos 凭证授予对资源的访问权限(例如台式计算机上的本地登录会话)时,它必须根据安全共享密钥(例如主机密钥表)验证这些凭证,以确保用户凭证确实来自合法的 KDC。无法执行此验证是一个严重的漏洞,因为恶意用户可以执行“Zanarotti 攻击”:用户构建一个看似来自合法 KDC 的虚假响应,但其内容来自攻击者控制的 KDC。

答案2

我意识到这真的很老了,这可能是也可能不是你的问题的一部分,但我过去注意到,如果你没有在 krb5.conf 中将以下内容大写,你可能会遇到问题:

[领域] MYDOMAIN.COM = { kdc =我的域名 管理服务器 =我的域名 }

[领域] MYDOMAIN.COM = { kdc =我的域名 管理服务器 =我的域名 }

相关内容