CentOS 搭建 SMB 服务使用 AD 域控制 ACL

安装 samba 以及所需组件依赖

yum install -y samba samba-common samba-client samba-winbind* krb5-workstation ntp

停止防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭 selinux

setenforce 0 # 临时关闭
sed -i s/enforcing/disabled/g /etc/selinux/config # 永久关闭
getenforce # 查看状态

设置开机启动

systemctl enable smb
systemctl enable winbind

修改 hosts

vim /etc/resolv.conf
serach yeah.local # 域名
nameserver 172.16.252.110 # DC的IP地址

修改网卡配置

echo "SEARCH="YEAH.LOCAL"" >> /etc/sysconfig/network-scripts/ifcfg-ens33 # 添加搜索域

修改 winbind 配置

# 编辑/etc/nsswitch.conf文件,这样winbind能实现使用域上的用户。
vim /etc/nsswitch.conf
# 找到如下几行,修改
passwd:	file winbind #sss
shadow:	file winbind #sss
group:	file winbind #sss

修改 krb 配置

vim /etc/krb5.conf

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

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
 default_ccache_name = KEYRING:persistent:%{uid}

 default_realm = YEAH.LOCAL                # 此处填写windows ad域名必须大写
[realms]
 YEAH.LOCAL = {                            # 此处填写windows ad域名必须大写
  kdc = 172.16.252.110                     # AD服务器的IP
  admin_server = 172.16.252.110            # AD服务器的IP
 }

[domain_realm]               
  .yeah.local = YEAH.LOCAL                    # 填写windows ad域名必须大写
  yeah.local = YEAH.LOCAL                     # 填写windows ad域名必须大写

修改 smb 配置

vim /etc/samba/smb.conf

 [global]
   workgroup = YEAH #windows域名不带后缀
   password server = dc.yeah.local # DC服务器FQDN名称
   realm = YEAH.LOCAL # windows 域名
   security = domain # 验证方式域验证,使用windows ad域验证权限
   idmap config * : range = 16777216-33554431 # 为windows域中的用户添加gid与uid的范围
   template shell = /sbin/nologin # 域中的用户是否启用登录samba服务器shell,此处不登录
   kerberos method = secrets only 
   winbind use default domain = false
   winbind offline logon = false
   winbind separator = + # 定义windows域跟组名的分隔符,如YEAH\admin 在linux中转换定义为YEAH+admin
   encrypt passwords = yes
   winbind enum users = yes
   winbind enum groups = yes
   #template homedir = /home/%U

# idmap uid - 指定一个uid范围,该范围内的uid被用来映射UNIX用户到windows用户SID,
# 而且要确保这个id范围内没有被本地或者NIS用户占用,winbind启动以后,也不能在该ID范围内添加用户。
# idmap gid - 指定一个gid范围,该范围内的gid被用来映射UNIX用户到windows的组SID,
# 而且要确保这个id范围内没有被本地或者NIS组占用,winbind启动以后,也不能在该ID范围内添加新组。
#	winbind enum groups和winbind enum users - 指定winbind是否在系统上创建域的组/用户
#,一般情况下都要设置为yes,除非你处于某种原因希望关闭该功能。
# 很多域组包括空格,这时要确保在chown命令或smb.conf中使用域用户时要包包含空格的组名用引号括起来。
# chown :"MYDOMAIN+Domain Users" thisfile

   passdb backend = tdbsam
   printing = cups
   printcap name = cups
   load printers = yes
   cups options = raw

# 也可以像nginx配置文件一样,全局配置与共享配置文件分开
  include = /etc/samba/share.conf

# 共享的配置内容写入到/etc/samba/share.conf中

[Data] # 访问共享时显示的文件夹名称
   comment = Share data file # 共享文件夹描述
   path = /share # 需要共享的文件夹目录
   public = no # 是否所有人可见
   browseable = yes # 是否允许浏览
   writable = yes # 是否允许写入
   write list = @YEAH+it-service-group # 允许写入的组,为ad中的用户组,如需多个使用空格或者逗号分开
   force group = YEAH+it-service-group # 归属组,如需多个使用空格或者逗号分开
   valid users = @YEAH+it-service-group # 允许的组,如需多个使用空格或者逗号分开
   read list = @share only read # 只读用户组,需先将用户加入允许的组,再加入只读清单
   force create mode = 0664 # 在linux中权限
   force directory mode = 0775 # 在linux中权限

测试配置是否正确,能否加入域

# 使用有权限将客户端加入域的账号测试
kinit yeah-admin@yeah.local 
# 加入域,使用有权限将客户端加入域的账号,输入密码
net ads join -U yeah-admin
# 测试是否成功加入域
wbinfo -t
# 出现如下则表示加域成功
checking the trust secret for domain TEST via RPC calls succeeded
wbinfo -g # 查看获取AD域中的用户组
wbinfo -u # 查看获取AD域中的用户
getent group # 查看能否获取AD中的用户组
getent passwd # 查看获取AD域中的用户

重启服务

systemctl restart smb
systemctl restart winbind

创建共享目录

mkdir /share
# 给共享目录添加权限
chown -R root:YEAH+it-service-group  /share
# chmod -R g+w+r+x /share

测试访问 OK

相关推荐
python ERROR: Command errored out with exit status 1:
Windows Server 2016 搭建 SMB 共享文件
Windows Server 2019 域环境搭建 SMB 共享文件服务
Parallels Desktop 15.1.3