Debian 8上的SAMBA classicupgrade体验

背景知识


有一个小型的企业局域网,大约10年前,在Debian 5上建立了第3个Samba + LDAP + BIND(在网关上)的域。 实际上,她只需要用户身份验证和文件管理。 多年来,服务器已毫无问题地升级到Debian的新版本。 目前,它具有来自软件包的Debian 8和Samba 4.2。

从Windows 7开始,将计算机引入域(没有众所周知的带有编辑注册表的拐杖)无法正常工作。 相同的拐杖在Win 8和Win 10之前的版本1803中起作用。除了无法将计算机输入域之外,其他问题不断累积,因此,决定进行经典升级。 由于LAN结构的简单性,决定使用内部Samba DNS。

我想马上说这篇文章不是确切的指南,而是执行此操作的经验。 强烈建议进行预测试阶段。 就我而言,服务器映像用于测试并部署在VirtualBox虚拟机上,此外,为了测试现有域客户端的行为,还创建了Win XP SP3和Win 10 1709和1803客户端计算机。

我还想指出,反复的错误是由常见的错别字引起的。 小心点

环境说明


操作系统:Debian 8
域:samdom.local
服务器名称:pdc
服务器IP:10.10.1.220

过渡过程


将软件包更新到最新版本+安装缺少的软件包。


就我而言,更新后,仅需交付krb5-user。

apt-get update apt-get upgrade apt-get install samba smbclient krb5-user winbind 

安装krb5-user时,系统将询问有关服务器名称和域名的几个问题。 我们填写服务器的数据。

桑巴站


 service samba-ad-dc stop service smbd stop service nmbd stop service winbind stop 

传输旧库和samba配置


 mv /var/lib/samba /var/lib/samba.NT mv /etc/samba/smb.conf /etc/samba/smb.conf.NT 

我将旧数据库移至/var/lib/samba.NT,因此您需要重新创建/ var / lib / samba目录

 mkdir /var/lib/samba 

该文档建议将所有数据库移至单独的文件夹。 就我而言,只有gencache_notrans.tdb是分开放置的,因此我只需要传输它。

 cp -p /run/samba/gencache_notrans.tdb /var/lib/samba.NT 

该文档还说,仅需要六个数据库:

秘密文件
schannel_store.tdb
passdb.tdb
gencache_notrans.tdb
group_mapping.tdb
account_policy.tdb

但是,文件夹中其他文件的存在不会阻止过渡过程。

开始经典的升级过程


 samba-tool domain classicupgrade —dbdir=/var/lib/samba.NT --realm=samdom.local --dns-backend=SAMBA_INTERNAL /etc/samba/smb.conf.NT 

我注意到该文档不建议使用顶级域local。,但就我而言,它是历史上发生的。

在屏幕上显示的工作表中,管理员密码将闪烁,您可以根据需要写下来)。

如果遇到问题,则在尝试进行经典升级之前,必须记住删除在此过程中创建的数据库文件和smb.conf。

 rm -f /etc/samba/smb.conf rm -rf /var/lib/samba/* 

如果一切顺利,则可以进行下一步。

检查和编辑服务器配置


在/etc/resolv.conf中应该是(如果不是为您自动创建的)

 domain samdom.local nameserver 10.10.1.220 

在/ etc /主机中

 127.0.0.1 localhost localhost.localdomain 10.10.1.220 pdc.samdom.local pdc 

/ etc / hostname文件必须具有缩写的主机名

 pdc 

在/ etc / network / interfases中

 dns-nameservers 10.10.1.220 dns-search samdom.local 

重定向DNS请求


如果您的服务器将DNS查询重定向到Internet(并且使用INTERNAL_DNS Samba),则需要在smb.conf的[global]部分中,从ISP ip添加一行:

 dns forwarder = ip 

在“ Samba” 4.2中,只能指定一个IP。 在下面-一些,带空格。
如果您的网关控制传出流量,则不要忘记打开从服务器到端口53的udp数据包通道。

配置Kerberos


我们将/etc/krb5.conf带到类似形式:

 [libdefaults] default_realm = SAMDOM.LOCAL dns_lookup_realm = false dns_lookup_kdc = true krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true [realms] SAMDOM.LOCAL = { kdc = pdc admin_server = pdc default_domain = SAMDOM.LOCAL } [domain_realm] .samdom.local = SAMDOM.LOCAL samdom.local = SAMDOM.LOCAL 

时间同步


如果ntp软件包不值得,请设置:

 apt-get install ntp 

在我的情况下,没有目录/ var / lib / samba / ntp_signd /。 手动创建。

接下来,您需要授予他权利:

 chown root:ntp /var/lib/samba/ntp_signd/ chmod 750 /var/lib/samba/ntp_signd/ 

接下来,您需要将/etc/ntp.conf文件转换为类似形式:

 # Local clock (Note: This is not the localhost address!) server 127.127.1.0 fudge 127.127.1.0 stratum 10 # The source, where we are receiving the time from server 0.pool.ntp.org iburst prefer driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntp ntpsigndsocket /var/lib/samba/ntp_signd/ # Access control # Default restriction: Only allow querying time (incl. ms-sntp) from this machine restrict default kod nomodify notrap nopeer mssntp # Allow everything from localhost restrict 127.0.0.1 # Allow that our time source can only provide time and do nothing else restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery 

卸下拍打并重新启动


 apt-get remove slapd reboot 

测试中


在文档中,测试是通过管理员帐户完成的。 从历史上看,我们已经开发出管理操作来自domain_admin。 接下来,将显示命令及其正确的输出。

测试桑巴舞:

 root@debian:/root# smbclient -L localhost -U% Domain=[SAMDOM] OS=[Unix] Server=[Samba 4.1.17-Debian] Sharename Type Comment --------- ---- ------- netlogon Disk sysvol Disk IPC$ IPC IPC Service (Samba 4.1.17-Debian) Domain=[SAMDOM] OS=[Unix] Server=[Samba 4.1.17-Debian] Server Comment --------- ------- Workgroup Master --------- ------- 

如果您在这里遇到错误:
与loclhost的连接失败(错误NT_STATUS_UNSUCCESSFUL)

检查samba是否启动。 在一个测试中,我忘记去除(关闭)拍打,并且也看到了此错误。

再检查一次:

 $ smbclient //localhost/netlogon -Udomain_admin -c 'ls' Enter Administrator's password: Domain=[SAMDOM] OS=[Unix] Server=[Samba xyz] . D 0 Tue Nov 1 08:40:00 2016 .. D 0 Tue Nov 1 08:40:00 2016 49386 blocks of size 524288. 42093 blocks available 

测试DNS

 root@debian:/root# nslookup samdom.local Server: 10.10.1.220 Address: 10.10.1.220#53 Name: samdom.local Address: 10.10.1.220 

 $ host -t SRV _ldap._tcp.samdom.local. _ldap._tcp.samdom.example.com has SRV record 0 100 389 pdc.samdom.example.com. 

 $ host -t SRV _kerberos._udp.samdom.local. _kerberos._udp.samdom.example.com has SRV record 0 100 88 pdc.samdom.example.com. 

 $ host -t A pdc.samdom.local. dc1.samdom.example.com has address 10.10.1.220 

测试Kerberos

 root@debian:/root# kinit domain_admin@SAMDOM.LOCAL Password for domain_admin@SAMDOM.LOCAL: Warning: Your password will expire in 41 days on  27  2015 14:34:46 

 root@debian:/root# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: domain_admin@SAMDOM.LOCAL Valid starting Expires Service principal 16.10.2015 15:07:12 17.10.2015 01:07:12 krbtgt/SAMDOM.LOCAL@SAMDOM.LOCAL renew until 17.10.2015 15:07:07 

附加设置


为了使域名和组出现在Linux上,您需要修复/etc/nsswitch.conf而不是数字

字符串应简化为以下形式:
passwd:文件winbind
组:文件winbind

请注意,winbind仅添加到这些行。 有关详细信息,请参阅文档。
就我而言,我还从该文件中删除了ldap的提及。

 reboot 

如果像我一样,如果在classicupgrade dns之前,该服务器位于另一台计算机上,并且您正在使用DHCP服务器,请不要忘记更改指向DNS服务器的DHCP服务器设置。

配置网络文件夹


不建议开发人员将AD域控制器用作文件服务器。 但是,就我而言,没有其他服务器。

该设置在“ Samba”的文档中有很好的描述,您需要查看一下。 简而言之,则:

有必要检查ACL支持samba。

 smbd -b | grep HAVE_LIBACL HAVE_LIBACL 

不要忘记该部分必须使用user_xattr和acl选项挂载。

只有具有SeDiskOperatorPrivilege的用户和组才能配置对球的权限:

例如,要将此类权限授予Domain Admins组,您需要运行以下命令:
 net rpc rights grant "Samdom\Domain Admins" SeDiskOperatorPrivilege -U "Samdom\domain_admin" 

直接添加球您需要:

创建目录并分配必要的权限:

 # mkdir -p /srv/samba/Demo/ # chown root:"Domain Admins" /srv/samba/Demo/ # chmod 0770 /srv/samba/Demo/ 

添加到smb.conf

 [Demo] path = /srv/samba/Demo/ read only = no 

之后,使用以下命令重新加载samba配置:

 smbcontrol all reload-config 

和以前一样,可以通过在球的描述中添加隐藏球:

 browseable = no 

接下来,从计算机的窗口,从具有SeDiskOperatorPrivilege的帐户分配权限 。 为此,请转到“计算机管理”。
绑定到远程计算机(在本例中为pdc域控制器)。 通过以下方式分配权限:“共享文件夹”->“共享资源”。

当您转到“共享文件夹”项时,可能会收到错误消息“过程号超出允许的限制(1745)”。 我无视它,因为我在Internet上找不到任何可理解的内容,并且在测试和操作过程中也不会引起问题。

如果您以这种方式共享旧的网络文件夹,则可能会出现问题。 在classicupgrade之前,可以通过smb.conf,linux用户,group,other和setfacl来设置Ball的权限。 经过经典升级后,拥有变更,更名等权利的学校开始逐渐出现。 递归setfacl并没有帮助,因为出现了带有权利继承的门框。

值得注意的是,在文档中,建议通过远程访问从计算机的窗口中分配权限。

结果,由于文件量不是很大,因此决定在非工作时间将数据传输到Windows计算机,根据samba开发人员的建议重新创建网络文件夹并重新上传文件。

服务器上的用户主文件夹


用户主文件夹的管理也已更改。
值得注意的是, 文档中还对配置过程进行了很好的描述。
我将仅描述我的案例的关键功能。

以前,每个用户都有自己的球。 现在,仅共享文件夹被共享,并且用户只能访问其目录。

使用Microsoft远程服务器管理工​​具(RSAT)进行安装 。 RSAT具有令人不快的功能。 将Win 10升级到新版本时,必须重新安装。

可以通过“用户和计算机”管理单元中的用户属性手动拾取主球。 个人资料标签。 U盘:\\ pdc \用户共享\用户名

但是,通过域策略执行此操作更为方便,以上文档在“使用组策略首选项”段落中对此进行了非常清楚的描述。

不要忘记可以通过添加对通用球的描述来隐藏它:

 browseable = no 

域升级


使用以下命令将域毫无问题地升级到2008_R2级别:

 samba-tool domain level raise --domain=2008_R2 --forest=2008_R2 

您可以使用以下命令查看级别:

 samba-tool domain level show 

如果smbd.log被CUPS错误轰炸


就我而言,这个问题出现了:

无法连接到CUPS服务器本地主机:631

由此简短文章更正。

随后升级到Debian 9问题和解决方案




 apt-get dist-upgrade 

存在一个问题,即samba和winbind不想更新。 陷入了依赖冲突。

不幸的是,这篇文章中的方法帮助了我没有保存的链接。
这是它的直接引文:

如果Samba处于AD-DC模式,则它和winbind失败。
执行这些命令,然后尝试再次运行升级

systemctl停止smbd nmbd winbind
systemctl禁用smbd nmbd winbind
systemctl取消屏蔽samba-ad-dc
systemctl启动samba-ad-dc
systemctl启用samba-ad-dc


更新SAMBA版本后,建议:“ Samba AD DC数据库检查”。



# samba-tool dbcheck --cross-ncs

自从Deb 9 SAMBA 4.5版以来,我遇到了一堆错误“ replPropertyMetaData”。
文档中介绍了故障排除过程:

wiki.samba.org/index.php/Updating_Samba#Fixing_replPropertyMetaData_Attributes

它归结为命令的执行:

samba-tool dbcheck --cross-ncs --fix --yes

使用的来源清单


SAMBA文档:

将Samba NT4域迁移到Samba AD(经典升级)
将Samba设置为Active Directory域控制器
使用Windows ACL设置共享
用户主文件夹
很棒的文章:
Debian 8域控制器(...已经具有内置的Samba4)
Samba错误:无法连接到CUPS服务器本地主机:631
一位不知名的英语作者的一篇文章,描述了如何升级到Debian 9

Source: https://habr.com/ru/post/zh-CN418499/


All Articles