我目前所做的
- 为客户端的本地网络安装 DHCP 服务器和 bind9(服务器应充当网关)
- 使用 bind9_dlz 作为 dns 后端从源代码构建 Samba4
- 使用安装 OpenLDAP
apt-get install slapd ldap-utils
390,637
由于 samba 阻塞,将 slapd 端口更改为389,636
- 导入 samba ldap 方案,初始设置 ldap 目录并配置域
- 安装
libnss-ldapd
用于 ldap 身份验证(getent passwd
正确输出 LDAP 用户) - 为 Samba 提供了我的 ldap 目录的管理员密码(
smbpasswd -w xxx
)
问题
我将 Windows 7 客户端加入域并尝试登录使用 创建的用户smbldap-useradd
。我从 Windows 收到密码错误消息,但 Samba 绝对没有错误/警告。我的测试用户确实存在于 LDAP 中(使用 检查phpldapadmin
),因此我认为 Samba 未正确与 ldap 通信。我被困在这一点上,需要一些帮助!
我注意到
我已经设置了passdb backend = ldapsam:ldap://testsrv.alfr.local:390/
不会出现在输出中testparm
(见下文)。
我正在使用的软件
- Ubuntu Server 12.04 已更新
- 从源代码编译的 Samba 4.1.6(官方 git 存储库)
- 绑定 9.8.1
- slapd 2.4.28
- isc-dhcp-服务器 4.1
配置和输出
- 服务器主机名:
testsrv
- 域名:
alfr.local
- 2 个网络接口,eth0 = DHCP,外部 WAN,eth1 =
192.168.25.1
(服务器充当此网络的 DHCP,范围从 25.50 到 25.254)
输出testparm
root@testsrv:~# testparm
Load smb config files from /usr/local/samba/etc/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[profiles]"
Processing section "[netlogon]"
Processing section "[sysvol]"
Processing section "[homes]"
Loaded services file OK.
Server role: ROLE_ACTIVE_DIRECTORY_DC
Press enter to see a dump of your service definitions
[global]
workgroup = ALFR
realm = alfr.local
server role = active directory domain controller
passdb backend = samba_dsdb
add user script = /usr/sbin/smbldap-useradd -m '%u' -t 1
rename user script = /usr/sbin/smbldap-usermod -r '%unew' '%uold'
delete user script = /usr/sbin/smbldap-userdel '%u'
add group script = /usr/sbin/smbldap-groupadd -p '%g'
delete group script = /usr/sbin/smbldap-groupdel '%g'
add user to group script = /usr/sbin/smbldap-groupmod -m '%u' '%g'
delete user from group script = /usr/sbin/smbldap-groupmod -x '%u' '%g'
add machine script = /usr/sbin/smbldap-useradd -w '%u' -t 1
domain logons = Yes
os level = 10
preferred master = Yes
domain master = Yes
dns proxy = No
wins support = Yes
ldap admin dn = cn=admin,dc=alfr,dc=local
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap machine suffix = ou=Computers
ldap suffix = dc=alfr,dc=local
ldap ssl = no
ldap user suffix = ou=Users
server services = rpc, nbt, wrepl, cldap, ldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate, smb
dcerpc endpoint servers = epmapper, wkssvc, rpcecho, samr, netlogon, lsarpc, spoolss, drsuapi, dssetup, unixinfo, browser, eventlog6, backupkey, dnsserver, winreg, srvsvc
rpc_server:tcpip = no
rpc_daemon:spoolssd = embedded
rpc_server:spoolss = embedded
rpc_server:winreg = embedded
rpc_server:ntsvcs = embedded
rpc_server:eventlog = embedded
rpc_server:srvsvc = embedded
rpc_server:svcctl = embedded
rpc_server:default = external
idmap config * : backend = tdb
map archive = No
map readonly = no
store dos attributes = Yes
vfs objects = dfs_samba4, acl_xattr
[profiles]
path = /srv/samba/profiles
read only = No
create mask = 0611
directory mask = 0700
profile acls = Yes
map hidden = Yes
map system = Yes
browseable = No
csc policy = disable
[netlogon]
path = /usr/local/samba/var/locks/sysvol/alfr.local/scripts
read only = No
[sysvol]
path = /usr/local/samba/var/locks/sysvol
read only = No
[homes]
comment = Eigener Ordner
path = /srv/samba/homes/%S
read only = No
create mask = 0611
directory mask = 0711
browseable = No
vfs objects = acl_xattr, full_audit
full_audit:failure = connect opendir disconnect unlink mkdir rmdir open rename
full_audit:success = connect opendir disconnect unlink mkdir rmdir open rename
输出ps aux
(删除不重要的内容)
root@testsrv:~# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 699 0.0 0.0 7272 608 ? Ss 08:08 0:00 dhclient3 -e IF_METRIC=100 -pf /var/run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -1 eth
bind 827 0.0 2.8 502280 58392 ? Ssl 08:08 0:01 /usr/sbin/named -u bind
dhcpd 833 0.0 0.2 14552 4476 ? Ss 08:08 0:00 /usr/sbin/dhcpd -f -q -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/ltsp/dhcpd.conf
openldap 1024 0.0 0.3 722000 6524 ? Ssl 08:08 0:00 /usr/sbin/slapd -h ldap://127.0.0.1:390/ ldaps://127.0.0.1:637/ ldapi://%2fvar%2frun%2fslapd%2fldapi/??
root 1051 0.0 0.0 693092 1172 ? Ssl 08:08 0:00 /usr/sbin/nscd
nslcd 1075 0.0 0.0 443600 1376 ? Ssl 08:08 0:00 /usr/sbin/nslcd
ntp 1279 0.0 0.0 25960 1836 ? Ss 08:08 0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 107:114
root 1595 0.0 2.2 534364 46152 ? Ss 09:52 0:00 samba start
root 1597 0.0 1.8 538976 38532 ? S 09:52 0:00 samba start
root 1598 0.0 1.7 539772 35624 ? S 09:52 0:00 samba start
root 1599 0.0 1.6 536876 33716 ? S 09:52 0:00 samba start
root 1600 0.0 1.6 534364 34568 ? S 09:52 0:00 samba start
root 1601 0.0 1.8 534804 37568 ? S 09:52 0:00 samba start
root 1602 0.0 1.8 538516 37212 ? S 09:52 0:00 samba start
root 1603 0.0 1.6 534364 34328 ? S 09:52 0:00 samba start
root 1604 0.0 1.6 537192 33928 ? S 09:52 0:00 samba start
root 1605 0.0 1.5 534364 32716 ? S 09:52 0:00 samba start
root 1606 0.0 2.0 534364 41264 ? S 09:52 0:00 samba start
root 1607 0.0 1.6 534364 33884 ? S 09:52 0:00 samba start
root 1608 0.0 1.6 534364 33360 ? S 09:52 0:00 samba start
/etc/nsswitch.conf
root@testsrv:~# cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
# pre_auth-client-config # passwd: compat
passwd: files ldap
# pre_auth-client-config # group: compat
group: files ldap
# pre_auth-client-config # shadow: compat
shadow: files ldap
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
# pre_auth-client-config # netgroup: nis
netgroup: nis
答案1
我没有在您的配置文件中看到任何安全指令。我假设您想要 security=ad。上个月我一直在尝试做同样的事情 - 使用 OpenLDAP 作为用户登录信息的主要数据库。
我测试了几种方法:
Samba 4 AD 目前无法信任(Samba 团队将在撰写本文时很快发布 Samba 4.2),因此您无法使用信任机制。
据我所知,AD 中的 Samba 4 不能基于 OpenLDAP,因为缺少 Active Directory 所需的模式。
我厌倦了使用名为 LSC 的软件,它基本上允许您在 AD 和 OpenLDAP 之间同步用户和组。这里也没有运气。LSC 文档和示例已过时,与当前版本不兼容。我终于设法使用户同步工作,但有一些错误(至少在 LSC v2.0 中我已经厌倦了),当您在 OpenLDAP 中更新密码时,LSC 不会捕获它。您必须以纯文本形式存储密码才能使其工作。
目前没有以 OpenLDAP 作为后端的 Samba AD 控制器。我计划在 Samba 支持信任后立即使用经典 NT 域控制器,然后我想委托单向信任(从 samba4 NT DC 到 Samba4 AD)并在 AD 域控制器上使用它,用户信息位于 OpenLDAP。
如果有人能在这里发现任何错误,我会很高兴听到它。;-)
更新:根据 Francesco Malvezzi 在 Samba 4.3 中提供的信息,现在支持信任:
https://www.samba.org/samba/history/samba-4.3.0.html
改进了对受信任域(如 AD DC)的支持
对受信任域/林的支持已经有了很大的改进。
samba-tool
有“域信任”子命令来管理信任:
create
- 创建域或林信任。
delete
- 删除域信任。
list
- 列出域信任。
namespaces
- 管理林信任命名空间。
show
- 显示受信任域的详细信息。
validate
- 验证域信任。各个域之间的外部信任以双向方式(入站和出站)工作。这同样适用于林信任的根域。对于 Kerberos 来说,到其他林的传递路由完全正常,但尚不支持 NTLMSSP。
虽然很多事情都运行良好,但目前仍存在一些限制:
- 信任双方需要充分的信任对方!
- 根本没有应用任何 SID 过滤规则!
- 这意味着域 A 的 DC 可以授予域 B 中的域管理员权限。
- 无法将受信任域的用户/组添加到域组中。
配置示例: https://www.samba.org/samba/history/samba-4.3.0.html
信任关系已创建,可以使用 winbind 进行检查:
wbinfo -u
-> 获取本地用户列表
wbinfo -u --domain=trusted.domain.tld
-> 获取受信任域用户列表(也可以使用短域名)也可以使用
--local-dc-username
和--local-dc-password
开关进行验证:
samba-tool domain trust validate trusted.domain.tld \ --local-dc-password=trustedAdminPass \ --local-dc-username=administrator \ -U administrator at trusted.domain.tld
使用 Samba 的内部 DNS 使 DNS 查询转发透明(使用我想检查的几个工具)。
为了能够使用来自 B.domain.tld 的用户连接到 machine.A.domain.tld,您必须将“经过身份验证的用户”特殊组添加到 RDP 授权人员。
我仍在等待它在我的发行版(debian 8-9)的官方渠道推出。
答案2
您是否明确需要使用 ldap?
我使用 samba 活动目录已有一年多了,唯一遇到的问题是 timescew。您应该仔细检查,尤其是在使用虚拟机时。
答案3
我一直在使用 SAMBA 制作 LDAP 服务器。我遇到的 SAMBA 问题(可能也困扰过您)与不同版本的 SAMBA 配置有关。您确定使用了适合您的 samba 版本的配置吗?如果您复制 .bash_history,我会查找任何错误配置,甚至在机器上进行测试,这将非常有帮助。