Samba:本地用户的 AD 身份验证

Samba:本地用户的 AD 身份验证

我们有许多 Linux 开发服务器,通常通过 SSH 访问。每个开发人员在每个机器上都有一个本地帐户,由 Puppet 管理。登录仅通过私钥进行;没有本地密码。

我想在这些机器上运行 Samba 并针对我们的 AD 域进行身份验证。除了 Samba 之外,我不希望对任何其他东西进行 AD 身份验证——其他一切都通过 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

我很确定 Kerberos 配置没有问题,因为我已经加入了域。

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

passwd:     files winbind
group:      files winbind

看起来问题是AD UID 到 UNIX UID 的映射。默认的 TDB 后端将在 AD 用户连接时按需创建“虚拟”UNIX 帐户,但我不希望这样——我希望用户foo映射到本地用户foo。如果我添加idmap uididmap gid行,用户身份验证成功,但他们的帐户不会映射到 UNIX 帐户。

有任何想法吗?索莫埃内以前肯定做过这个!我不想改用 winbind 和 AD 来提供所有帐户信息,因为在所有机器上保持一致的 UID/GID 很麻烦。我们还在现有的 Puppet 控制的用户配置上投入了很多精力,我们不想重新发明。

答案1

确保 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 服务

答案2

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

可以配置 Windows 网络域(NT4 样式或 ADS)的 Samba 成员以多种方式处理身份映射。它使用的机制取决于是否使用 winbindd 守护程序以及如何配置 winbind 功能。配置选项简要介绍如下:

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

不使用 winbindd 时,Samba (smbd) 使用底层 UNIX/Linux 机制来解析传入网络流量的身份。这是使用会话设置请求中的 LoginID(帐户名)并将其传递给 getpwnam() 系统函数调用来完成的。此调用是使用现代 UNIX/Linux 系统上的名称服务切换 (NSS) 机制实现的。通过说“用户和组是本地的”,我们暗示它们仅存储在本地系统中,分别存储在 /etc/passwd 和 /etc/group 中。

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

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

似乎如果您只是将 winbind 排除在外,假设您的 AD 用户与本地 /etc/passwd 用户相同,事情就会变得非常简单。

相关内容