我的主要目标是设置一个 Samba 服务器,用户可以使用他们的 Active-Directory 凭据连接到该服务器。此外,Samba 服务器上的本地 Linux 用户应该能够进行身份验证。
首先,我尝试配置 Samba 服务器来根据 Active-Directory 对用户进行身份验证,但不太清楚如何执行此操作。
Samba 服务器版本为 4.2.10,运行于 CentOS 7 上。我的 Samba 配置如下:
/etc/samba/smb.conf
[全球的] 工作组 = AD netbios 名称 = 客户端-主机名 最大日志大小 = 50 日志级别 = 3 日志文件 = /var/log/samba3/log.%m 将不受信任的域映射到域 = 是 winbind 枚举用户 = 是 winbind 枚举组 = 是 winbind 缓存时间 = 10 winbind nss 信息 = rfc2307 winbind 仅受信任域 = 否 winbind 使用默认域 = 是 winbind 刷新票证 = 是 操作系统级别 = 20 winbind 枚举组 = 是 领域 = AD.COMPANY.CPOM 安全 = 广告 身份验证方法 = winbind passdb 后端 = tdbsam 客户端使用 spnego = 是 客户端 ntlmv2 身份验证 = 是 [分享] 可用 = 是 路径 = /aShare 可浏览 = 是 可写 = 是 #只读 = 否 #继承 acls = 是 #继承权限 = 是 创建掩码 = 0777 目录掩码 = 0777 有效用户 = @“域用户@AD”,localUser
Kerberos 配置如下所示:
/etc/krb5.conf
[记录] 默认 = 文件:/var/log/krb5libs.log kdc = 文件:/var/log/krb5kdc.log 管理员服务器 = 文件:/var/log/kadmind.log [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d 可转发 = true rdns = false 默认领域 = AD.COMPANY.COM default_ccache_name = KEYRING:persistent:%{uid} [境界] AD.COMPANY.COM = { kdc = DC.AD.COMPANY.COM kpasswd_server = DC.AD.COMPANY.COM admin_server = DC.AD.COMPANY.COM 默认域 = AD.COMPANY.COM } [域名] .ad.company.com = AD.COMPANY.COM ad.company.com = IN.ITM-CONSULTING.DE
samba 服务器存在于 Active Directory 中,我获得了 kerberos 票证。wbinfo -u 显示 Active Directory 中的所有用户。我注意到,过去它显示带有前缀 AD\ 的用户,现在他们不再有这个前缀了。
主要问题是我无法以活动目录用户的身份连接到共享:
$ smbclient -L //10.0.0.2 -U aduser -W AD
Enter aduser's password:
session setup failed: NT_STATUS_LOGON_FAILURE
日志显示以下内容:/var/log/samba3/log.10.0.0.2 [<-- 本地机器 IP]
[2016/07/26 13:00:28.408563,3]../source3/smbd/oplock.c:1307(init_oplocks) init_oplocks:初始化消息。 [2016/07/26 13:00:28.408626,3]../source3/smbd/process.c:1879(process_smb) 交易 0,长度为 194(0 个读取) [2016/07/26 13:00:28.408646,3]../source3/smbd/process.c:1489(switch_message) 交换机消息 SMBnegprot (pid 9538) conn 0x0 [2016/07/26 13:00:28.409162,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议[PC NETWORK PROGRAM 1.0] [2016/07/26 13:00:28.409177,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议 [MICROSOFT NETWORKS 1.03] [2016/07/26 13:00:28.409183,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议 [MICROSOFT NETWORKS 3.0] [2016/07/26 13:00:28.409188,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议[LANMAN1.0] [2016/07/26 13:00:28.409192,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议 [LM1.2X002] [2016/07/26 13:00:28.409197,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议[DOS LANMAN2.1] [2016/07/26 13:00:28.409202,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议[LANMAN2.1] [2016/07/26 13:00:28.409207,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议[Samba] [2016/07/26 13:00:28.409211,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议 [NT LANMAN 1.0] [2016/07/26 13:00:28.409216,3]../source3/smbd/negprot.c:576(reply_negprot) 请求的协议 [NT LM 0.12] [2016/07/26 13:00:28.651581,3]../source3/smbd/negprot.c:395(reply_nt1) 使用 SPNEGO [2016/07/26 13:00:28.651628,3]../source3/smbd/negprot.c:684(reply_negprot) 所选协议 NT LANMAN 1.0 [2016/07/26 13:00:28.652715,3]../source3/smbd/process.c:1879(process_smb) 交易 1 长度为 160(0 个读取) [2016/07/26 13:00:28.652741,3]../source3/smbd/process.c:1489(switch_message) 交换机消息 SMBsesssetupX (pid 9538) conn 0x0 [2016/07/26 13:00:28.652762,3]../source3/smbd/sesssetup.c:614(reply_sesssetup_and_X) wct=12 flg2=0xc843 [2016/07/26 13:00:28.652774,3]../source3/smbd/sesssetup.c:144(reply_sesssetup_and_X_spnego) 进行 spnego 会话设置 [2016/07/26 13:00:28.652782,3]../source3/smbd/sesssetup.c:185(reply_sesssetup_and_X_spnego) NativeOS=[Unix] NativeLanMan=[Samba] PrimaryDomain=[] [2016/07/26 13:00:28.653003,3]../auth/ntlmssp/ntlmssp_util.c:69(debug_ntlmssp_flags) 获取 NTLMSSP neg_flags=0x62088215 [2016/07/26 13:00:28.653391,3]../source3/smbd/process.c:1879(process_smb) 交易 2 长度为 528(0 个读取) [2016/07/26 13:00:28.653410,3]../source3/smbd/process.c:1489(switch_message) 交换机消息 SMBsesssetupX (pid 9538) conn 0x0 [2016/07/26 13:00:28.653432,3]../source3/smbd/sesssetup.c:614(reply_sesssetup_and_X) wct=12 flg2=0xc843 [2016/07/26 13:00:28.653438,3]../source3/smbd/sesssetup.c:144(reply_sesssetup_and_X_spnego) 进行 spnego 会话设置 [2016/07/26 13:00:28.653445,3]../source3/smbd/sesssetup.c:185(reply_sesssetup_and_X_spnego) NativeOS=[Unix] NativeLanMan=[Samba] PrimaryDomain=[] [2016/07/26 13:00:28.653466,3]../auth/ntlmssp/ntlmssp_server.c:452(ntlmssp_server_preauth) 获得用户 = [aduser] 域 = [AD] 工作站 = [客户端主机名] len1 = 24 len2 = 238 [2016/07/26 13:00:28.653518,3]../source3/param/loadparm.c:3653(lp_load_ex) lp_load_ex:刷新参数 [2016/07/26 13:00:28.653570,3]../source3/param/loadparm.c:544(init_globals) 初始化全局参数 [2016/07/26 13:00:28.653637,3]../source3/param/loadparm.c:2596(lp_do_section) 处理部分“[全局]” [2016/07/26 13:00:28.653758,2]../source3/param/loadparm.c:2613(lp_do_section) 处理部分“[aShare]” [2016/07/26 13:00:28.653826,3]../source3/param/loadparm.c:1493(lp_add_ipc) 添加IPC服务 [2016/07/26 13:00:28.654335,3]../source3/auth/auth.c:178(auth_check_ntlm_password) check_ntlm_password:使用新密码界面检查未映射用户 [AD]\[aduser]@[clients-hostname] 的密码 [2016/07/26 13:00:28.654350,3]../source3/auth/auth.c:181(auth_check_ntlm_password) check_ntlm_password:映射用户为:[AD]\[aduser]@[clients-hostname] [2016/07/26 13:00:28.657067,3]../source3/auth/auth_util.c:1229(check_account) 无法通过 getpwnam() 找到经过身份验证的用户 AD\aduser,拒绝访问。 [2016/07/26 13:00:28.657091,2]../source3/auth/auth.c:315(auth_check_ntlm_password) check_ntlm_password:用户 [aduser] -> [aduser] 的身份验证失败,错误为 NT_STATUS_NO_SUCH_USER [2016/07/26 13:00:28.657104,2]../auth/gensec/spnego.c:716(gensec_spnego_server_negTokenTarg) SPNEGO 登录失败:NT_STATUS_NO_SUCH_USER [2016/07/26 13:00:28.657139,3]../source3/smbd/error.c:82(error_packet_set) NT 错误数据包位于 ../source3/smbd/sesssetup.c(269) cmd=115 (SMBsesssetupX) NT_STATUS_LOGON_FAILURE [2016/07/26 13:00:28.660840,3]../source3/smbd/server_exit.c:249(exit_server_common) 服务器退出(无法接收 smb 请求) 2016/07/26 13:00:28.653758,2]../source3/param/loadparm.c:2613(lp_do_section) 处理部分“[smbext4]” [2016/07/26 13:00:28.653826,3]../source3/param/loadparm.c:1493(lp_add_ipc) 添加IPC服务 [2016/07/26 13:00:28.654335,3]../source3/auth/auth.c:178(auth_check_ntlm_password) check_ntlm_password:使用新密码界面检查未映射用户 [AD]\[aduser]@[clients-hostname] 的密码 [2016/07/26 13:00:28.654350,3]../source3/auth/auth.c:181(auth_check_ntlm_password) check_ntlm_password:映射用户为:[AD]\[aduser]@[clients-hostname] [2016/07/26 13:00:28.657067,3]../source3/auth/auth_util.c:1229(check_account) 无法通过 getpwnam() 找到经过身份验证的用户 AD\aduser,拒绝访问。 [2016/07/26 13:00:28.657091,2]../source3/auth/auth.c:315(auth_check_ntlm_password) check_ntlm_password:用户 [aduser] -> [aduser] 的身份验证失败,错误为 NT_STATUS_NO_SUCH_USER [2016/07/26 13:00:28.657104,2]../auth/gensec/spnego.c:716(gensec_spnego_server_negTokenTarg) SPNEGO 登录失败:NT_STATUS_NO_SUCH_USER [2016/07/26 13:00:28.657139,3]../source3/smbd/error.c:82(error_packet_set) NT 错误数据包位于 ../source3/smbd/sesssetup.c(269) cmd=115 (SMBsesssetupX) NT_STATUS_LOGON_FAILURE [2016/07/26 13:00:28.660840,3]../source3/smbd/server_exit.c:249(exit_server_common) 服务器退出(无法接收 smb 请求)
我如何让用户使用来自 Active Directory 的凭据登录 samba?
答案1
(我用手机写这篇文章,只是想回忆一下我曾经做过什么):-)
好的,我假设您已经完成samba-tool provision
并确认 Active Directory 已配置。
参考官方 Wiki 作为参考:
https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller
为了让 Linux 用户登录到运行 Samba Active Directory PDC 的机器,您需要安装libnss-winbind
并libpam-winbind
安装它。
安装这两个模块后,您需要运行pam-auth-update
。
在这里您应该能够选择 Active Directory 身份验证作为用户对您的机器进行身份验证的方式之一。
您还需要进行更新,/etc/nsswitch.conf
以便 winbind 包含在以passwd:
和开头的行中group:
。
最后,您还应该进行编辑smb.conf
,使其至少包含以下行:
template homedir = /home/%D/%U
template shell = /bin/bash
除此之外,我不记得是否还需要其他什么,但它会让你朝着正确的方向前进。