使用 Active Directory 和本地用户身份验证设置 Samba

使用 Active Directory 和本地用户身份验证设置 Samba

我的主要目标是设置一个 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-winbindlibpam-winbind安装它。

安装这两个模块后,您需要运行pam-auth-update

在这里您应该能够选择 Active Directory 身份验证作为用户对您的机器进行身份验证的方式之一。

您还需要进行更新,/etc/nsswitch.conf以便 winbind 包含在以passwd:和开头的行中group:

最后,您还应该进行编辑smb.conf,使其至少包含以下行:

template homedir = /home/%D/%U
template shell = /bin/bash

除此之外,我不记得是否还需要其他什么,但它会让你朝着正确的方向前进。

相关内容