虽然我可以在这里和 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 设置。
编辑:如果您在注释中使用两个反斜杠,它会将它们改回一个反斜杠。因此看起来就像您在服务器名称前使用了一个反斜杠。