我们有许多 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 uid
和idmap 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 用户相同,事情就会变得非常简单。