Samba:本地用户的ADauthentication

我们有很多通常通过SSH访问的Linux开发服务器。 每个开发者在每个框上都有一个由Puppetpipe理的本地帐户。 login只能通过私钥。 没有本地密码。

我想在这些盒子上运行Samba,并对我们的AD域进行身份validation。 除了Samba之外,我不需要AD身份validation – 其他任何东西都可以通过SSH和私钥访问。

这是我的smb.conf

 [global] workgroup = DOMAIN server string = Samba Server Version %v security = ADS realm = DOMAIN.FQDN encrypt passwords = yes log level = 3 log file = /var/log/samba/%U.log [homes] comment = Home Directories browseable = no writable = yes 

我很确定Kerberosconfiguration是好的,因为我已经join了域。

相关(即非标准) nsswitch.conf行:

 passwd: files winbind group: files winbind 

看起来问题是AD UID到UNIX UID映射 。 当AD用户连接时,默认的TDB后端将按需创build“虚拟”UNIX帐户,但我不想要这样 – 我想让用户foo映射到本地用户foo 。 如果我添加idmap uididmap gid行,用户authentication没问题,但是他们的帐户没有映射到UNIX帐户。

有任何想法吗? Somoene一定是做到了这一点的! 我不想切换到使用winbind和AD来提供所有的帐户信息,因为在所有机器上维护一致的UID / GID的麻烦。 我们也在现有的Puppet控制的用户configuration中投入了很多,我们不想重新创build。

确保winbind服务正在运行。

在/etc/pam.d/samba中设置:

 account [default=bad success=ok user_unknown=ignore] pam_winbind.so account required pam_permit.so password sufficient pam_winbind.so use_authtok password required pam_deny.so session required pam_limits.so auth required pam_nologin.so auth sufficient pam_winbind.so use_first_pass auth required pam_deny.so 

Pam的更改有时需要重新启动winbind。 不应该,但实际经验说,无论如何。

在smb.conf中,您还需要:

 realm = YOURKERBEROSREALMNAME password server = the host or IP of your ADC idmap backend = rid:DOMAIN=5000-100000000 idmap uid = 10000-10000000 idmap gid = 10000-10000000 winbind use default domain = Yes winbind enum users = Yes winbind enum groups = Yes 

其中DOMAIN是您的工作组或域名,领域与您的krb5.conf中的内容相匹配

在smb.conf中更改后重新启动samba服务

来自http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/idmapper.html#id2604553

Windows联网域(NT4风格或ADS)的Samba成员可以configuration为以多种方式处理标识映射。 它使用的机制取决于是否使用winbindd守护进程以及如何configurationwinbindfunction。 这里简要描述configuration选项:

Winbind不使用; 用户和组是本地的:

在不使用winbindd的情况下,Samba(smbd)使用底层的UNIX / Linux机制来parsing传入networkingstream量的身份。 这是使用会话build立请求中的LoginID(帐户名称)并将其传递给getpwnam()系统函数调用完成的。 这个调用是通过在现代UNIX / Linux系统上使用名称服务交换(NSS)机制来实现的。 通过说“用户和组是本地的”,我们暗示它们只存储在本地系统上,分别存储在/ etc / passwd和/ etc / group中。

例如,当用户BERYLIUM \ WambatW尝试打开到Samba服务器的连接时,传入的SessionSetupAndX请求将进行系统调用,以在/ etc / passwd文件中查找用户WambatW。

此configuration可以与独立的Samba服务器,域成员服务器(NT4或ADS)以及使用smbpasswd或基于tdbsam的Samba passdb后端的PDC一起使用。

似乎如果你只是把winbind拿出来的话,假设你的AD用户和本地的/ etc / passwd用户是一样的,事情就会是honkydorey。