无法从 Windows 连接到 RHEL 7.3 上已加入 AD 的 Samba 共享

无法从 Windows 连接到 RHEL 7.3 上已加入 AD 的 Samba 共享

虽然我可以在这里和 Google 搜索中找到使用本地 Linux 用户的 Samba 权限问题,但我找不到针对我特定问题的解决方案。我没有使用 Samba 的经验,所以整个过程相当冒险,但现在我快要抓狂了。我真的很感激一些想法。我把我所做的一切都包括进去,以防其他人需要这样做,并希望能够帮助别人帮助我。

我有一个 Windows Server 2016 Active Directory 域。根名称为 ad.company.com。我需要一个具有 SMB 共享的商业支持 Linux 服务器,该共享允许对某些域组进行读取访问,对其他域组进行写入访问。为什么是 Linux?它将与其他 Linux 计算机通信并使用许多 Linux 工具。我们在另一个客户端上的当前设置以这种方式运行良好,但它不是由我们配置的,并且它使用 RHEL 5。

我选择了 RHEL 7.3 服务器,因为我们公司最熟悉这个发行版。我从服务器 ISO 安装了最小安装。ISO 的哈希值显示它没有损坏。我已成功将 ext4 分区安装到 /mnt/share。我已将服务器配置为在根域命名空间中具有主机名,将 DNS 服务器设置为 PDC,将搜索后缀设置为域 (ad.company.com),并使用静态 IP 进行设置。这一切都是在安装程序中完成的。该机器可以轻松解析域中 Windows 服务器的主机名。Windows 服务器可以解析 Linux 机器的主机名。可以双向 ping IP。

由于这是初始配置,以下所有操作均在 root 权限下完成。

我安装了以下软件包。

yum install nano
yum install net-tools
yum install nmap
yum install ntp ntpdate ntp-doc
yum install krb5-workstation
yum install samba
yum install samba-winbind
yum install samba-winbind-clients

我将 NTP 服务器设置为 PDC。/etc/ntp.conf

driftfile /var/lib/ntp/drift

restrict default nomodify notrap nopeer noquery

restrict 127.0.0.1 
restrict ::1

server pdc.ad.company.com iburst prefer
restrict pdc.ad.company.com mask 255.255.255.255 nomodify notrap nopeer noquery

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

disable monitor

我配置了 KRB5 客户端以连接到 AD 域。/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]
 ticket_lifetime = 600
 default_realm = AD.COMPANY.COM
 default_tkt_enctypes = rc4-hmac 
 default_tgs_enctypes = rc4-hmac 
 dns_lookup_realm = false
 dns_lookup_kdc = true

[realms]
 AD.COMPANY.COM = {
  kdc = pdc.ad.company.com
  admin_server = pdc.ad.company.com
 }

[domain_realm]
 .ad.company.com = AD.COMPANY.COM
 ad.company.com = AD.COMPANY.COM

我测试了与 PDC 的连接。成功了。

kinit [email protected]

我配置了 samba 以连接到域,使用扩展 ACL 属性,并提供一个名为“share”的共享。/etc/samba/smb.conf

[global]
    security = ADS
    workgroup = AD
    realm = AD.COMPANY.COM
    idmap config * : backend = tbd
    idmap config * :range = 3000-7999
    vfs objects = acl_xattr
    map acl inherit = yes
    store dos attributes = yes

    passdb backend = tdbsam

    printing = cups
    printcap name = cups
    load printers = yes
    cups options = raw
    log level = 1

[share]
    path = /mnt/share
    read only = no

[homes]
    comment = Home Directories
    valid users = %S, %D%w%S
    browseable = No
    read only = No
    inherit acls = Yes

[printers]
    comment = All Printers
    path = /var/tmp
    printable = Yes
    create mask = 0600
    browseable = No

[print$]
    comment = Printer Drivers
    path = /var/lib/samba/drivers
    write list = root
    create mask = 0664
    directory mask = 0775

我将 nsswitch 配置为使用
winbind。/etc/nsswitch.conf

passwd:     files winbind
shadow:     files sss
group:      files winbind

hosts:      files dns myhostname

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss

netgroup:   files sss

publickey:  nisplus

automount:  files
aliases:    files nisplus

我启动了 windbindd、smbd 和 nmbd。

winbindd
smbd
nmbd

我将它们设置为在开机时启动。

systemctl enable smb nmb winbind

我重新启动,然后测试 windbind 以测试与域的连接。成功了。

wbinfo --ping-dc

我读过的一份文档说 ext4 支持扩展 ACL,但我还是检查了一下以防万一。文档上说有扩展 ACL。

smbd -b | grep HAVE_LIBACL

我授予了授予特权的权限AD.COMPANY.COM\Domain Admins

net rpc rights grant "AD\Domain Admins" SeDiskOperatorPrivilege -U "AD\administrator"

然后我进行测试以确保它能粘住。

net rpc rights list privileges SeDiskOperatorPrivilege -U "AD\administrator"

我使用 testparm 来验证 smb.conf 文件的语法。它解析了整个文件,没有任何错误。

testparm /etc/samba/smb.conf

接下来要做的是作为域管理员连接到共享并配置 ACL。这里我遇到了麻烦。无论是 Windows Server 2016 还是 Windows 10,我都无法通过文件资源管理器连接到服务器。我尝试过\\linuxserver、、\\linuxserver\share和。在所有情况下,Windows 都告诉我“未找到网络路径”。它不会提示我输入凭据或告诉我我没有权限。就好像它根本看不到它一样 \\192.168.1.75\\192.168.1.75\share

以下是我迄今为止为排除故障所做的工作。我可以通过主机名和 IP 成功 ping Linux 服务器。我确保 smbd、nmbd 和 windbindd 正在运行。

ps -eo 'tty,pid,comm' | grep smbd
ps -eo 'tty,pid,comm' | grep nmbd
ps -eo 'tty,pid,comm' | grep winbindd

我确保 smbd 正在监听端口 445。

netstat -plnt
nmap -sT -O localhost

我通过 Windows 机器上的管理员 Powershell 会话禁用了 SMB2 和 SMB3,以查看是否可以使用 SMB1。

Set-SmbServerConfiguration -EnableSMB2Protocol $false

我确认设置已卡住,重新启动,然后尝试,结果相同。

Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol

为了确保万无一失,我重新启动了 Linux 服务器。

呼!谢谢您阅读全文!

答案1

你真的做了\linuxserver\share\\linuxserver\share?在 Redhat 7.x 上,你可以运行realm join,它可以处理几乎所有的 AD 设置。

编辑:如果您在注释中使用两个反斜杠,它会将它们改回一个反斜杠。因此看起来就像您在服务器名称前使用了一个反斜杠。

相关内容