配置 Samba AD域.note
·防火墙需要放行的端口:
DNS:53
Kerberos:88、464
LDAP/LDAPS:389、636(可选)
RPC/Netlogon:135、(动态高端口 49152–65535,或限制区间)
SMB/CIFS:445
NTP:123一、配置 Samba AD域:
注意:Samba 的 REALM 是严格区分大小写的
1、配置 samba AD域:
(1)创建 samba AD域:
apt install -y samba bind9 krb5-user winbind libnss-winbind libpam-winbind dnsutils smbclient# 停止 samba 服务:
systemctl stop smbd nmbd winbind
systemctl disable smbd nmbd 然后将dns服务器地址指向本地
并且本地需要配置FQDN
cd /etc/samba
mv smb.conf smb.conf.back
# 这条命令都可以使用 -h 查看到所有参数
samba-tool domain provision --use-rfc2307 --realm=SHANGHAI.ORG --domain=SHANGHAI --server=role=dc --dns-backend=BIND9_DLZ注意:--domain 这里必须要指定 netbiso名称,并且这个名称必须是域名最前面的那个
# --use-rfc2307 开启 UNIX ID 扩展(便于 POSIX/SSSD 映射)(默认就开了)
# BIND9_DLZ 选择 BIND9 动态后端(由 Samba 通过 GSS-TSIG 更新 DNS 记录)·修改用户的密码:
这个命令可以修改所有用户的密码
samba-tool user setpassword administrator
# 语法 samba-tool user setpassword [用户名]·关闭密码复杂度组策略:
默认要求密码复杂度和最少7个字符密码
samba-tool domain passwordsettings set --complexity=off
samba-tool domain passwordsettings set --min-pwd-length=1·创建AD域用户:
samba-tool user create user1 'P@ssw0rd123!'(2)配置 bind9 include samba DNS:
# samba DNS 路径为:/var/lib/samba/bind-dns/named.conf
vim /etc/bind/named.conf
·关联gssapi密钥,并关闭 DNSSEC:
vim /etc/bind/named.conf.options
systemctl restart bind9:
(3)修改 samba 配置文件:
vim /etc/samba/smb.conf
(4)复制自动生成的 krb5.conf 文件:
cp /etc/krb5.conf /etc/krb5.conf.back
cp /var/lib/samba/private/krb5.conf /etc
cat /etc/krb5.conf应该输出以下内容:

(5)启动 samba-ad-dc 服务:
systemctl restart bind9
systemctl unmask samba-ad-dc
systemctl enable samba-ad-dc
systemctl start samba-ad-dc(6)开启登录自动创建家目录:
pam-auth-update
·测试域控:
# 这个域名是严格区分大小写的,就是前面定义的 REALM
kinit administrator@SHANGHAI.ORG
klist
# 下面的命令都必须要成功:
samba-tool drs showrepl
samba-tool dns zonelist localhost -U Administrator
wbinfo -u
wbinfo -g


# 测试DNS解析:
dig +short _kerberos._udp.shanghai.org SRV @172.16.1.1
dig +short _ldap._tcp.shanghai.org SRV @172.16.1.1
nslookup server1.shanghai.org这些记录都是自动生成的

2、创建 OU 和 用户:
samba-tool 的管理用户命令,都可以使用 -h 查看后续参数选项
·查看当前 AD域中的内容:
如果有时不行,就将 DN路径换成大写的(类似windows那样)
apt install -y ldap-utils
ldapsearch -D cn=administrator,cn=users,dc=shanghai,dc=org -H ldap://localhost -w Skills39 | less
(1)创建 OU:
# 创建OU:
samba-tool ou create "ou=NewOU,dc=shanghai,dc=org"
# 查看OU:
samba-tool ou list
·删除 OU:
samba-tool ou delete "ou=NewOU,dc=shanghai,dc=org"
(2)创建 组:
# 创建组:
samba-tool group create "Manager"
## 这样默认会创建全局安全组
## 默认存放在 cn=Users,dc=shanghai,dc=org 中
## 使用 --groupou="OU=NewOU" 来指定组存放到OU中的位置(这里需要使用相对的DN路径,不能使用完整的DN路径,否则会报错)
# 查看组:
samba-tool group list
·在指定OU中创建组:
## 使用 --groupou="OU=NewOU" 来指定组存放到OU中的位置(这里需要使用相对的DN路径,不能使用完整的DN路径,否则会报错)
## 例如,当前OU完整路径为:ou=NewOU,dc=shanghai,dc=org
samba-tool group create Test --groupou="ou=NewOU"
·删除组:
samba-tool group delete Manager
·其他创建组参数:
# 可以使用 samba-tool group create -h 查看参数:
--groupou= //指定组创建的位置
--description= //设置组的描述信息
--gid-number= //指定组的 gid(3)创建用户:
# 创建用户:
samba-tool user create alice Skills39
## (alice)用户默认被创建在 cn=Users,dc=shanghai,dc=org 下
## 用户默认属组为:cn="Domain Users",cn=users,dc=shanghai,dc=org
# 查看用户:
samba-tool user list
·在指定OU中创建用户:
## 使用 --userou="OU=NewOU" 来指定组存放到OU中的位置(这里需要使用相对的DN路径,不能使用完整的DN路径,否则会报错)
## 例如,当前OU完整路径为:ou=NewOU,dc=shanghai,dc=org
samba-tool user create service1 Skills39 --groupou="ou=NewOU"
·删除用户:
samba-tool user delete alice
·其他创建用户参数:
# 使用 samba-tool user create -h 可以查看到参数选项:
--must-change-at-next-login //强制用户下次登录时必须修改密码(默认关闭)
# 开启:--must-change-at-next-login
# 关闭:--must-change-at-next-login=no
--use-username-as-cn //让 CN 直接等于用户名,而不是“名 姓”的组合。默认:如果提供了 --given-name/--surname,CN 会用“GivenName Surname”
--userou=USEROU //指定用户要存放的 OU路径
--unix-home=[UNIX_HOME] //指定用户主目录(默认是:/home/[用户名])
--uid-number=[UID_NUMBER] //指定用户的 uid
--gid-number=[GID_NUMBER] //指定用户的 gid(并不会将用户加入该组,要加入组,需要使用命令手动加组)
--login-shell=[LOGIN_SHELL] //指定用户登录 shell(默认登录shell为 /bin/sh)# 其他用户属性:
--surname=SURNAME //sn,姓氏,Windows “姓氏”栏
--given-name=GIVEN_NAME //givenName,名,Windows “名字”栏
--initials=INITIALS //initials,姓名缩写,显示为 “姓名首字母”
--job-title=JOB_TITLE //title,职位名称
--department=DEPARTMENT //department,部门
--company=COMPANY //company,公司名称
--description=DESCRIPTION //description,备注描述
--mail-address=MAIL_ADDRESS //mail,邮箱地址
--internet-address=INTERNET_ADDRESS //wWWHomePage,主页地址
--telephone-number=TELEPHONE_NUMBER //telephoneNumber,办公电话
--physical-delivery-office=PHYSICAL_DELIVERY_OFFICE //physicalDeliveryOfficeName,办公室位置(4)将用户添加进组:
# 语法:
samba-tool group addmembers [组] [用户]
# 示例:
samba-tool group addmembers Manager alice
·将用户从组中移除:
# 语法:
samba-tool group removemembers [组] [用户]
# 示例:
samba-tool group removemembers Manager alice
(5)将 用户、组 移动到指定 OU、CN容器下:
# 移动用户到OU中:
samba-tool user move alice "ou=NewOU,dc=shanghai,dc=org"
# 移动组到OU中:
samba-tool group move Manager "ou=NewOU,dc=shanghai,dc=org"
二、客户端加域:
1、使用 sssd 加域(推荐):
客户端要配置 FQDN,DNS服务器地址要指向域控
(1)安装软件包:
apt install -y sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin krb5-user如果你软件包没下齐,这里会提示你的:

(2)将客户端加域:
realm discover shanghai.org
realm join -U administrator shanghai.org
没有报错就是加域成功了
(3)配置登录时自动创建家目录:
pam-auth-update
(4)配置允许域用户登录:
方式一(推荐):放宽组策略限制:
vim /etc/sssd/sssd.conf
# 新增一条:ad_gpo_access_control = permissive
systemctl restart sssd
方式二:不使用AD的策略模块进行认证,自定义允许登录的用户:
这个每个用户都要手动允许,比较麻烦
vim /etc/sssd/sssd.conf这里只允许了 administrator 用户登录

systemctl restart sssd
·查看、测试登录:
realm list
id administrator@shanghai.org
# 登录 域用户:
systemctl restart sssd
su - administrator@shanghai.org

登录成功
2、使用 winbind 加域:
客户端要配置 FQDN,DNS服务器地址要指向域控
(1)安装软件包:
apt install -y samba winbind libpam-winbind libnss-winbind krb5-user安装时输入 域名和 DC服务器域名
(2)配置 winbind:
# 配置DNS解析指向域控:
echo "nameserver 172.16.1.1" > /etc/resolv.conf
# 编辑krb5.conf 文件:
vim /etc/krb5.conf
# 复制 域控的 smb.conf 文件:
cd /etc/samba
cp smb.conf smb.conf.bak
scp root@172.16.1.1:/etc/samba/smb.conf .
vim smb.conf
然后确保 /etc/nsswitch.conf 文件中有 winbind 配置(一般会默认添加)

pam-auth-update勾选登录时自动创建家目录

# 重启相关服务:
systemctl restart smbd winbind(3)加入 AD域:
# 先使用 kinit 和 klist测试(必须成功):
## 不测试也无所谓
kinit administrator
klist
# 加入 AD域:
net ads join -U administrator
·查看、测试登录:
id administrator
id administrator@shanghai.org
su - administrator
·如果加域时忘记改 FQDN,可以使用 命令重新注册:
net ads dns register -U administrator
·Windows 也能够直接加域:
将DNS写为Samba AD域的IP即可

三、图形化连接 AD域进行管理:
这个不常用,应该不会考,是我自己研究的
(1)下载管理工具:
apt install -y ldap-account-manager
apt install -y apache2(2)复制网站配置到apache/nginx:
# 它会提供两种网站的配置:
ls /etc/ldap-account-manager
# 直接将配置复制过去即可:
cp /etc/ldap-account-manager/apache.conf /etc/apache2/conf-enabled/systemctl restart apache2
(3)修改 凭据:
vim /usr/share/ldap-account-manager/config/lam.conf
# 先使用 :%s/dc=my-domain,dc=com/dc=shanghai,dc=org 替换默认域名先使用 :%s/dc=my-domain,dc=com/dc=shanghai,dc=org 替换默认域名

指定 用户和组 存放的ou路径,并修改用户和组的类型:

systemctl restart apache2
修改用户和组的类型为 windowsUser、windowsGroup,并指定用户要显示的属性为:cn、sAMAccountName(samba AD域用户没有uid、sn等属性)
·客户端访问:
http://172.16.1.1/lam

输入密码登录后就能够查看到用户和组了:
用户:

组:


四、删除 samba AD域:
# 停止服务:
systemctl stop samba-ad-dc
systemctl stop bind9
systemctl stop winbind smbd nmbd
# 删除文件:
rm -rf /var/lib/samba/*
rm -rf /etc/samba/*
rm -rf /var/cache/samba/*
rm -rf /var/run/samba/*
## 如果使用 bind_dlz需要加上:
rm -rf /var/lib/samba/bind-dns/*
rm -rf /var/lib/samba/private/dns/*
# 删除 krb5配置:
rm -f /etc/krb5.conf
rm -rf /var/lib/krb5kdc/
# 卸载服务:
apt purge samba samba-dsdb-modules samba-vfs-modules winbind libnss-winbind libpam-winbind krb5-user bind9 -y
apt autoremove -y