可能通过KerberosvalidationSamba,但没有域join?

使用Kerberosconfiguration文件…

[realms] DOMAIN.COM = { kdc = dc1.domain.com admin_server = dc1.domain.com } 

… Linux可能会与Active Directory进行密码validation,而不必是AD域成员:

 $ kinit jdoe Password for [email protected]: $ klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: [email protected] Valid starting Expires Service principal 01/12/15 15:36:16 01/13/15 01:36:25 krbtgt/[email protected] renew until 01/19/15 15:36:16 

此时,您可以使用PAM在/ etc / passwd中定义本地Linux用户,但通过Active Directoryvalidation其TTY会话。 通过krb5的Authn是作为每个login上下文完成的:

 auth sufficient pam_krb5.so use_first_pass 

但是,如果krb5已经作为PAM全局默认值的一部分来实现,那么为什么Samba也没有select呢? 我看到/etc/pam.d/samba包含了Kerberized password-auth文件,但是在访问SMB卷的时候没有喜悦。 (debugging日志表明一个失败的获取SID错误,这是非常“你不是域的一部分”)。

我的根本问题是:是否可以像Samba一样在Samba下执行类似的krb5 authn集中化,而没有额外的开销/域成员的复杂性? 我需要在一组NIS集群系统上实施Samba服务,但不希望每个系统上都有不同的TDBSAM后端,导致SMB密码混淆。 使用Kerberos作为我的身份validation器会很好。 但是,我仍然想通过本地Linux帐户来定义授权/访问权限,而不是像域join,winbind直stream模拟或全functionAD服务器那样打开所有域用户的Samba访问权限。

另外:在Linux集群中是否有更好的Samba集中后端authn选项? 我看了CTDB,但似乎是调整共享存储,而不是中央authn与不同的卷…

桑巴对不同的人意味着不同的事物。 对于某些人来说,这是一种实现LanMan风格的networking而不需要微软的方式,使用WinBind来提供伪域控制器服务,而不需要真正运行Windows服务器。 这也许是为什么“drookie”发表评论“似乎你有AD运行,但由于某种原因,你不想使用它。 为什么还要用samba呢?“ 为什么? 因为我主要使用Samba来支持基本的CIFS。 所有额外的WinBind / ADS home-dir和高速caching的DC数据文件是我并不真正想要的东西。 我正在寻找Linux来定义授权和访问,而不是向所有域用户开放。 但对于允许的用户,请使用Kerberos身份validation。 (Samba – 特别是Samba4)正朝着完整的Windows AD域中的Linux节点的Active Directory模拟,一直延续到SID / GUID,OU成员等的inheritance。他们的目标是不需要创buildLinux本地账户因为Samba将根据ADconfiguration文件实时创build它们。

由于我主要是为了CIFSfunction而关注Samba,所以我希望AD只能通过Kerberos调用(如我已经实现的SSH)用于authentication部分。 如果我不需要域join使Kerberos在TTY / SSH级别工作,那么我是否真的需要Samba + Kerberos? 不幸的是,答案是肯定的。 但是,尽pipe如此,我仍然能够实现AD / Kerberos authn的目标,而无需将Linux主机转换为PDC / BDC或将所有authz控制权推迟到ADS模式。 我有什么作品,这是我解释为什么:

基本的Kerberos工作在PAM / TTY级别,因为用户正在交互地input密码,直接input到krb5库中; 当在执行请求的用户的上下文中运行时,不需要域join。 但是,在对CIFS共享进行身份validation的情况下,Windows客户端已经对用户input的密码进行了encryption,所以在Samba获取密码时,它是NTLMv2哈希。 这可能就是为什么O'Reilly的“犀鸟书”中说Samba对“auth PAM模块行被完全忽略”的原因。 在这种情况下,Samba必须安全地联系AD服务器以检索凭证详细信息,以确定用户/密码是否正确。 为此,需要域连接。 本质上,join域的Samba充当Kerberos代理来联系AD并validation客户端凭证。

我发现即使有必要的域join,也不需要运行本地的WinBind守护进程,也不需要将Linux主机变成一个完整的AD服务器。 这是我在Samba4configuration文件中所做的:

 security = ADS passdb backend = tdbsam realm = DOMAIN.COM password server = * encrypt passwords = yes lanman auth = no ntlm auth = no # NTLMv2 kerberos method = system keytab username map = /etc/samba/smbusers guest account = nfsnobody map to guest = Bad User obey pam restrictions = yes 

指出我没有做的事情可能更重要:

  • winbind指令从smb.confconfiguration文件中省略
  • winbind服务未启用/运行(将AD数据caching为DC)
  • winbind没有被添加到/etc/nsswitch.conf(使用域作为有效的本地用户源)
  • winbind和mkhomedir不会添加到/etc/pam.d/system-auth(以允许域用户login并创build帐户)

最起码的一点是,需要域联接来启用相对于本地用户访问的Kerberos查找:

 # net ads join -U Administrator # net ads keytab create 

但是,没有任何服务能够将Linux主机变成携带访问授权的PDC / BDC或ADS替代品。 我严格使用Samba + Kerberos进行本地用户validation,仅此而已。

您可以在NIS之上运行samba,在这种情况下,用户数据库将被同步,如果不join域,您将拥有一大堆独立的samba服务器。 这也意味着您将不得不在每台服务器上手动添加域用户或至less他们的密码。 这可能不是你想要的。

您也可以尝试将AD LDAP用作samba用户的ldap后端,而无需join域。

所以有很多select,但说实话,我不明白你的观点。 似乎你有AD运行,但由于某种原因,你不想使用它。 为什么还要使用samba?