Active Directory和SAMBA的结合使用

Samba 专栏收录该内容
3 篇文章 0 订阅

Active Directory

简介

活动目录(Active Directory)是面向Windows Standard Server、Windows Enterprise Server以及 Windows Datacenter Server的目录服务。Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。

活动目录是 Windows 的身份验证和目录服务,活动目录基于 LDAP 实现其功能,其使用 DNS 进行主机名的解析,使用 Kerberos V5 进行用户身份验证,使用 LDAP V3 进行统一的帐户管理。

下面介绍如何让将Linux 主机加入到AD域。

搭建Windows AD域服务器

关于如何使用Windows Server搭建AD域服务器,在这里不做介绍。

将Linux操作系统加入到AD域

软硬件环境:

角色主机OSIP地址
Linux 主机(也充当samba服务器)CentOS7.4 x64100.10.10.188
AD 服务器(也充当DNS服务器)Windows Server 2016100.10.10.225
NTP服务器(非必需)CentOS7.4 x64100.10.10.10

安装所需的组件

#yum install samba samba-client samba-client-libs samba-common samba-common-libs samba-common-tools samba-krb5-printing samba-libs samba-python samba-winbind samba-winbind-modules  samba-winbind-clients samba-winbind-krb5-locator -y
#yum install krb5-devel krb5-pkinit krb5-libs krb5-workstation krb5-server-ldap krb5-server -y
#yum install pam_krb5 -y
#yum install realmd oddjob-mkhomedir oddjob -y

先决环境配置

  1. 修改DNS地址为AD服务器的IP:
#vim /etc/resolv.conf
nameserver 100.10.10.225
  1. 同步Linux 主机的时间
#ntpdate 100.10.10.10

具体的配置过程

有两种配置方法:(1)直接修改配置文件(2)执行realm命令

1. 直接修改配置文件
  • 修改nsswitch.conf
#vim /etc/nsswitch.conf
passwd:     files winbind sss
shadow:     files winbind sss
group:      files winbind sss
hosts:      files dns myhostname
bootparams: nisplus [NOTFOUND=return] files
ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss
netgroup:   nisplus sss
publickey:  nisplus
automount:  files nisplus sss
aliases:    files nisplus
  • 修改smb.conf
#vim /etc/samba/smb.conf
[global]
workgroup = SUSE
security = ads
idmap config \* : backend = tdb
idmap config \* : range = 100000-200000
idmap config SUSE : backend = rid
idmap config SUSE : base_rid = 0
idmap config SUSE : range = 10000-20000
password server = 100.10.10.225
realm = SUSE.COM.CN
netbios name = stor04
template shell = /bin/bash
template homedir = /home/%U
winbind use default domain = true
winbind offline logon = true
winbind enum groups = yes
winbind enum users = yes
winbind separator = /

#workgroup = SAMBA
#security = user
#passdb backend = tdbsam
#printing = cups
#printcap name = cups
#load printers = yes
#cups options = raw
#map to guest = bad user
#guest account = guest

[mn]
path = /tmp
writable = yes
guest ok = No
browseable = Yes
  • 修改krb5.conf
# vim /etc/krb5.conf
includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = SUSE.COM.CN
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true 

[realms]
SUSE.COM.CN = {
kdc = 100.10.10.225:88
admin_server  = 100.10.10.225:749
default_domain = SUSE.COM.CN
} 

[domain_realm]
.suse.com.cn = SUSE.COM.CN
suse.com.cn = SUSE.COM.CN

[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
  • 加入AD域
#net ads join -U administrator
Enter administrator's password:
Using short domain name -- SUSE
Joined 'STOR04' to dns domain 'SUSE.COM.CN'
No DNS domain configured for stor04. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER

可忽略该DNS错误

  • 启动winbind
#systemctl restart winbind
2. 执行realm命令
#realm join --client-software=winbind suse.com.cn

使用上一命令, realm实用程序自动:

①为suse.com.cn域中的成员创建/etc/samba/smb.conf文件

②将用于查找用户和组的winbind模块添加到/etc/nsswitch.conf文件

③配置/etc/krb5.conf文件中的Kerberos客户端以获取AD成员身份

④更新/etc/pam.d/目录中的可插入验证模块(PAM)配置文件

⑤启动winbind服务并在系统引导时启动该服务

​ 有关realm实用程序的更多详细信息,请参阅realm(8)手册页以及“Red Hat Windows集成指南”中的相应部分。

  • 修改smb配置文件

​ 在/etc/samba/smb.conf文件中设置备份ID映射后端或自定义ID映射设置。可参考方法一的相应部分。有关RID的信息参见附录

验证 Samba是否被正确加入为域

在Linux作为域成员加入环境之后,您可以运行不同的测试来验证连接是否成功。

1. 验证操作系统是否可以检索域用户帐户和组

使用getent实用程序验证操作系统是否可以检索域中的用户和组。例如:

  • 获取AD服务器上的所有用户
# getent passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
guest:x:1001:1001::/home/guest:/sbin/nologin
nasadmin:x:1002:1002::/home/nasadmin:/sbin/nologin
administrator:\*:10500:10513::/home/SUSE/administrator:/bin/false
guest:\*:10501:10513::/home/SUSE/guest:/bin/false
defaultaccount:\*:10503:10513::/home/SUSE/defaultaccount:/bin/false
krbtgt:\*:10502:10513::/home/SUSE/krbtgt:/bin/false
zdx:\*:11104:10513::/home/SUSE/zdx:/bin/false
lxx:\*:11105:10513::/home/SUSE/lxx:/bin/false
xyh:\*:11106:10513::/home/SUSE/xyh:/bin/false
hash:\*:11107:10513::/home/SUSE/hash:/bin/false
raid:\*:11115:10513::/home/SUSE/raid:/bin/false
ec:\*:11116:10513::/home/SUSE/ec:/bin/false
dfs:\*:11117:10513::/home/SUSE/dfs:/bin/false
  • 查询AD域中的administrator帐户:
# getent passwd "SUSE/administrator"
administrator:\*:10500:10513::/home/SUSE/administrator:/bin/false
  • 查询AD域中Domain Users组的成员:
# getent group "SUSE/Domain Users"
domain users:x:10513:

如果该命令正常工作,请在设置文件和目录权限时验证是否可以使用域用户和组。 例如,要将/srv/samba/example.txt文件的所有者设置为administrator,并将该组的所有者设置为Domain Admins:

# chown administrator:"Domain Admins" /srv/samba/example.txt
2. 验证AD域用户是否可以获得Kerberos凭据

在AD环境中,用户可以从DC获取Kerberos凭据。 例如,要验证administrator用户是否可以获取Kerberos凭据。

①获取administrator@SUSE.COM.CN主体的凭据:

# kinit administrator@SUSE.COM.CN

②显示缓存的Kerberos凭据:

# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@SUSE.COM.CN
Valid starting Expires Service principal
11.09.2017 14:46:21 12.09.2017 00:46:21
krbtgt/SUSE.COM.CN@SUSE.COM.CN
renew until 18.09.2017 14:46:19
3. 列出可用的域

要列出通过winbindd服务可用的所有域, 请输入:

# wbinfo --all-domains
BUILTIN
STOR04
SUSE

验证是否可将AD域用户作为smb用户

修改smb配置文件,将共享设置为需要用户名和密码才能访问,将valid users设置为AD服务器上的用户:

#vim /etc/samba/smb.conf
[mn]
path = /tmp
writable = yes
guest ok = No
browseable = Yes
valid users = zdx

#systemctl restart smb

在windows 主机使用域用户zdx可访问访问SMB共享。

退出AD域

根据加入AD域的方式不同,有两种退出AD域的方式:

#net ads leave -U administrator

​ 或者

#realm leave -U administrator

附录

rid ID映射后端

Samba可以使用Windows SID的相对标识符(RID)在CentOS Linux 上生成 ID。

rid ID映射后端基于AD和NT4域的算法映射方案实现只读API来计算帐户和组信息。 配置后端时,必须在idmap config DOMAIN:range参数中设置最低和最高RID。 Samba不会映射比此参数中设置的RID更低或更高的用户或组。

注意

作为只读后端,rid不能分配新的ID,例如BUILTIN组。因此,请勿将此后端用于*默认域。

使用 rid 后端的优点和缺点

优点

  • 所有在配置范围内具有RID的域用户和组都可自动在域成员上使用。
  • 您不需要手动分配ID,主目录和登录shell。

缺点

  • 所有域用户都分配了相同的登录shell和主目录。 但是,您可以使用变量。
  • 如果所有Samba域成员都使用带有相同ID范围设置的rid后端,则用户和组ID在Samba域成员中仅相同。
  • 不能将单个用户或组排除在域成员上可用。仅排除配置范围之外的用户和组。
  • 根据winbindd服务用于计算ID的公式,如果不同域中的对象具有相同的RID,则可能会在多域环境中出现重复ID。 ·

配置rid后端

配置Samba域成员以使用rid ID映射后端:

  1. 编辑/etc/samba/smb.conf文件中的[global]部分:

a. 如果默认域(*)不存在,请添加ID映射配置。 例如:

idmap config * : backend = tdb
idmap config * : range = 10000-999999

b. 为域启用rid ID映射后端:

idmap config DOMAIN : backend = rid

c. 设置一个足够大的范围,以包含将来分配的所有RID。 例如:

idmap config DOMAIN : range = 2000000-2999999

Samba 忽略此域中的RID不在范围内的用户和组。

注意

该范围不得与此服务器上的任何其它域配置重叠。

d. 设置将分配给所有映射用户的shell和主目录路径。 例如:

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

有关变量替换的详细信息,请参见smb.conf(5)手册页中的VARIABLE SUBSTITUTIONS部分。

  1. 验证/etc/samba/smb.conf文件:
#testparm
  1. 重载Samba配置:
#smbcontrol all reload-config
  1. 确认设置按预期工作。 请参阅“验证操作系统是否可以检索域用户帐户和组”一节。

rid的获取和计算

RID是SID的最后一部分。 例如,如果用户的SID是S-1-5-21- 5421822485-1151247151-421485315-30014,那么30014是相应的RID。

获取AD域中用户和组的SID

在windows AD域控制器上执行以下的命令。

  • 获取用户的SID:
PS C:\Users\Administrator> wmic useraccount get name,sid
Name            SID
Administrator   S-1-5-21-3995169811-2334568557-3193790263-500
Guest           S-1-5-21-3995169811-2334568557-3193790263-501
krbtgt          S-1-5-21-3995169811-2334568557-3193790263-502
DefaultAccount  S-1-5-21-3995169811-2334568557-3193790263-503
zdx             S-1-5-21-3995169811-2334568557-3193790263-1104
lxx             S-1-5-21-3995169811-2334568557-3193790263-1105
xyh             S-1-5-21-3995169811-2334568557-3193790263-1106
hash            S-1-5-21-3995169811-2334568557-3193790263-1107
raid            S-1-5-21-3995169811-2334568557-3193790263-1115
ec              S-1-5-21-3995169811-2334568557-3193790263-1116
dfs             S-1-5-21-3995169811-2334568557-3193790263-1117
  • 获取组的SID:
PS C:\Users\Administrator> wmic group get name,sid
Name                                     SID
Cert Publishers                          S-1-5-21-3995169811-2334568557-3193790263-517
RAS and IAS Servers                      S-1-5-21-3995169811-2334568557-3193790263-553
Allowed RODC Password Replication Group  S-1-5-21-3995169811-2334568557-3193790263-571
Denied RODC Password Replication Group   S-1-5-21-3995169811-2334568557-3193790263-572
DnsAdmins                                S-1-5-21-3995169811-2334568557-3193790263-1101
LM-Local                                 S-1-5-21-3995169811-2334568557-3193790263-1109
Cert Publishers                          S-1-5-21-3995169811-2334568557-3193790263-517
RAS and IAS Servers                      S-1-5-21-3995169811-2334568557-3193790263-553
Allowed RODC Password Replication Group  S-1-5-21-3995169811-2334568557-3193790263-571
Denied RODC Password Replication Group   S-1-5-21-3995169811-2334568557-3193790263-572
DnsAdmins                                S-1-5-21-3995169811-2334568557-3193790263-1101
LM-Local                                 S-1-5-21-3995169811-2334568557-3193790263-1109
Cloneable Domain Controllers             S-1-5-21-3995169811-2334568557-3193790263-522

计算本地ID

给定RID可通过以下公式计算对应的本地ID:

本地ID = RID - BASE_RID + LOW_RANGE_ID

给定本地ID可通过以下公式计算对应的RID:

RID = 本地ID + BASE_RID - LOW_RANGE_ID
  • 0
    点赞
  • 4
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值