跳转至内容

Samba/Active Directory 域控制器

来自 ArchWiki

本文档介绍了如何使用 Samba 设置 Active Directory 域控制器。假定所有配置文件均处于安装后的原始状态。本文档在全新安装上编写和测试,除了设置静态 IPv4 网络连接(必需)外,没有进行其他修改。最后,下面的大多数命令都需要提升的权限。尽管有常规的说法,但从 root 会话运行这几个简短的命令可能比按需获取权限更容易。

安装

注意 确保您可以通过主机名访问网络中的计算机。有关更多信息,请参阅 网络配置#本地网络主机名解析

一个功能齐全的 Samba 域控制器需要 Samba 分发版中未包含的几个程序。请从官方存储库 安装 krb5ntppython-dnspythonpython-markdownopenresolvsamba 包。

Samba 包含自己的功能齐全的 DNS 服务器,但如果您需要维护外部域的 DNS 区域,强烈建议您改用 BIND。如果您需要共享打印机,您还将需要 CUPS。如果需要,请 安装 bind 和/或 cups 包。

创建新目录

配置

创建 Active Directory 域的第一步是配置。这涉及设置内部 LDAPKerberos 和 DNS 服务器,并执行目录所需的所有基本配置。如果您以前设置过目录服务器,您无疑会意识到让这些独立组件作为一个整体协同工作的潜在错误。这正是 Samba 开发人员选择提供这些程序的内部版本的原因。上述服务器包仅为客户端实用程序安装。使用 Samba 进行配置要容易得多。只需发出以下命令

# samba-tool domain provision --use-rfc2307 --interactive

参数说明

--use-rfc2307
此参数将 POSIX 属性 (UID/GID) 添加到 AD Schema。如果您打算除了 Microsoft Windows 之外,还对 Linux、BSD 或 macOS 客户端(包括本地计算机)进行身份验证,这将是必需的。
--interactive
此参数强制配置脚本以交互方式运行。

或者,您可以通过运行 samba-tool domain provision --help 来查看配置步骤的帮助。

交互式配置说明

Realm(域)
INTERNAL.DOMAIN.COM - 这应该与大写的 DNS 域名相同。通常使用仅内部的子域来分隔您的内部域和外部 DNS 域,但这不是必需的。
INTERNAL - 这将是 NetBIOS 域名称,通常是 leftmost DNS 子域,但可以是任何您喜欢的。例如,名称 INTERNAL 将不会很有描述性。也许公司名称或首字母缩写会更合适。为了与旧客户端兼容,这应该以全大写字母输入,并且最大长度为 15 个字符。
Server Role(服务器角色)
dc -本文档假定您正在为新域安装第一个 DC。如果您选择其他内容,本文档的其余部分可能对您毫无用处。
DNS Backend(DNS 后端)
BIND9_DLZSAMBA_INTERNAL - 这取决于服务器管理员的个人偏好。同样,如果您为外部域托管 DNS,强烈建议您使用 BIND9_DLZ 后端,以便继续使用平面区域文件,并且现有的传输规则可以与内部 DNS 服务器共存。如果不确定,请使用 SAMBA_INTERNAL 后端。
DNS forwarder IP address(DNS 转发器 IP 地址)
xxx.xxx.xxx.xxxnone - 此选项仅在使用 SAMBA_INTERNAL DNS 后端时出现。提供 DNS 服务器的 IP 地址以转发非本地 DNS 查询,或使用字符串 none 始终执行根查找。
Administrator password(管理员密码)
xxxxxxxx - 您必须为管理员帐户选择一个密码。最低要求是一个大写字母、一个数字和至少八个字符。如果您尝试使用不符合复杂性要求的密码,配置将失败。

配置守护进程

NTPD

为您的网络时间服务器创建合适的 NTP 配置。有关解释和附加配置选项,请参阅 网络时间协议守护进程

使用以下内容修改 /etc/ntp.conf 文件

/etc/ntp.conf
# Please consider joining the pool:
#
#     http://www.pool.ntp.org/join.html
#
# For additional information see:
# - https://wiki.archlinux.org.cn/index.php/Network_Time_Protocol_daemon
# - http://support.ntp.org/bin/view/Support/GettingStarted
# - the ntp.conf man page

# Associate to Arch's NTP pool
server 0.arch.pool.ntp.org
server 1.arch.pool.ntp.org
server 2.arch.pool.ntp.org
server 3.arch.pool.ntp.org

# Restrictions
restrict default kod limited nomodify notrap nopeer mssntp
restrict 127.0.0.1
restrict ::1
restrict 0.arch.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 1.arch.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 2.arch.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 3.arch.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery

# Location of drift file
driftfile /var/lib/ntp/ntpd.drift

# Location of the update directory
ntpsigndsocket /var/lib/samba/ntp_signd/

创建状态目录并设置权限

# install -d /var/lib/samba/ntp_signd
# chown root:ntp /var/lib/samba/ntp_signd
# chmod 0750 /var/lib/samba/ntp_signd

启用并启动 ntpd.service 服务单元。

BIND

如果您选择使用 BIND9_DLZ DNS 后端,请 安装 bind 包并创建以下 BIND 配置。有关解释和附加配置选项,请参阅 BIND。请务必用合适的值替换 x 字符。

创建 /etc/named.conf 文件

/etc/named.conf
// vim:set ts=4 sw=4 et:
acl local-networks {
    127.0.0.0/8;
    xxx.xxx.xxx.xxx/xx;
// Uncomment the following line(s) if using IPv6
    //::1/128;
    //xxxx:xxxx:xxxx:xxxx::/64;
};

options {
    directory "/var/named";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";

    // Uncomment this line to enable IPv6 connections support
    //  listen-on-v6 { any; };
    // Add this for no IPv4:
    //  listen-on { none; };

    // Add any subnets or hosts you want to allow to the local-networks acl
    allow-query       { local-networks; };
    allow-recursion   { local-networks; };
    allow-query-cache { local-networks; };
    allow-transfer    { none; };
    allow-update      { none; };

    version none;
    hostname none;
    server-id none;

    auth-nxdomain yes;
    datasize default;
    empty-zones-enable no;
    tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";

    // Uncomment if you wish to use ISP forwarders
    //  forwarders { xxx.xxx.xxx.xxx; xxx.xxx.xxx.xxx; };
};

zone "localhost" IN {
    type master;
    file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "127.0.0.zone";
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
    type master;
    file "localhost.ip6.zone";
};

// Load AD integrated zones
include "/var/lib/samba/bind-dns/named.conf";

//zone "example.org" IN {
//    type slave;
//    file "example.zone";
//    masters {
//        192.168.1.100;
//    };
//    allow-query { any; };
//    allow-transfer { any; };
//};

logging {
    channel xfer-log {
        file "/var/log/named.log";
            print-category yes;
            print-severity yes;
            severity info;
        };
        category xfer-in { xfer-log; };
        category xfer-out { xfer-log; };
        category notify { xfer-log; };
};

设置权限。

# chgrp named /var/lib/samba/private/dns.keytab
# chmod g+r /var/lib/samba/private/dns.keytab
# touch /var/log/named.log
# chown root:named /var/log/named.log
# chmod 664 /var/log/named.log

启用并启动 named.service 单元。

forwarders 的好值是您的 ISP 的 DNS 服务器。Google (8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, and 2001:4860:4860::8844) 和 OpenDNS (208.67.222.222, 208.67.220.220, 2620:0:ccc::2 and 2620:0:ccd::2) 免费提供合适的公共 DNS 服务器。子网的适当值特定于您的网络。

Kerberos 客户端实用程序

上述配置步骤创建了一个与 Samba 域控制器兼容的有效 krb5.conf 文件。使用以下命令安装它

# mv /etc/krb5.conf{,.default}
# cp /var/lib/samba/private/krb5.conf /etc

DNS

现在您需要开始使用本地 DNS 服务器。重新配置 resolvconf 以仅使用 localhost 进行 DNS 查询。创建 /etc/resolv.conf.tail(请勿忘记将 internal.domain.tld 替换为您的内部域)

# Samba configuration
search internal.domain.tld
# If using IPv6, uncomment the following line
#nameserver ::1
nameserver 127.0.0.1

设置权限并重新生成新的 /etc/resolv.conf 文件

# chmod 644 /etc/resolv.conf.tail
# resolvconf -u

Samba

启用并启动 samba.service 单元。如果您打算使用 LDB 实用程序,您还需要创建 /etc/profile.d/sambaldb.sh 文件以设置 LDB_MODULES_PATH

export LDB_MODULES_PATH="${LDB_MODULES_PATH}:/usr/lib/samba/ldb"

设置文件的权限并将其源化

# chmod 0755 /etc/profile.d/sambaldb.sh
# . /etc/profile.d/sambaldb.sh

测试安装

DNS

首先,验证 DNS 是否按预期工作。执行以下命令,用适当的值替换 internal.domain.comserver

# host -t SRV _ldap._tcp.internal.domain.com.
# host -t SRV _kerberos._udp.internal.domain.com.
# host -t A server.internal.domain.com.

您应该会看到类似以下的输出

_ldap._tcp.internal.domain.com has SRV record 0 100 389 server.internal.domain.com.
_kerberos._udp.internal.domain.com has SRV record 0 100 88 server.internal.domain.com.
server.internal.domain.com has address xxx.xxx.xxx.xxx

NT 身份验证

接下来,验证密码身份验证是否按预期工作

# smbclient ///netlogon -U Administrator -c 'ls'

系统将提示您输入密码(您之前选择的密码),您将看到类似以下的目录列表

  .                                   D        0  Wed Nov 27 23:59:07 2013
  ..                                  D        0  Wed Nov 27 23:59:12 2013

		50332 blocks of size 2097152. 47185 blocks available

Kerberos

现在验证 KDC 是否按预期工作。请务必替换 INTERNAL.DOMAIN.COM 并使用大写字母

# kinit administrator@INTERNAL.DOMAIN.COM

您应该会被提示输入密码,并会看到类似以下的输出

Warning: Your password will expire in 41 days on Wed 08 Jan 2014 11:59:11 PM CST

验证您确实获得了票证

# klist

您应该会看到类似以下的输出

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@INTERNAL.DOMAIN.COM

Valid starting       Expires              Service principal
11/28/2013 00:22:17  11/28/2013 10:22:17  krbtgt/INTERNAL.DOMAIN.COM@INTERNAL.DOMAIN.COM
	renew until 11/29/2013 00:22:14

作为最后一次测试,请使用您最近获得的票证的 smbclient。将 server 替换为正确的服务器名称

# smbclient //server/netlogon -k -c 'ls'

输出应该与上面测试密码身份验证时的输出相同。

附加配置

DNS

您还需要在 DNS 中为环境中的每个子网创建一个反向查找区域。重要的是,这要保留在 Samba 的 DNS 中,而不是 BIND,以便允许客户端进行动态更新。对于每个子网,使用以下命令创建一个反向查找区域。替换 server.internal.domain.tldxxx.xxx.xxx 为适当的值。对于 xxx.xxx.xxx,使用子网的前三个八位字节的倒序(例如:192.168.0.0/24 变为 0.168.192)

# samba-tool dns zonecreate server.internal.domain.tld xxx.xxx.xxx.in-addr.arpa -U Administrator

现在,为您的服务器添加一个记录(如果您的服务器是多宿主的,请为每个子网添加)再次用上述适当的值替换。 zzz 将被替换为服务器 IP 的第四个八位字节

# samba-tool dns add server.internal.domain.tld xxx.xxx.xxx.in-addr.arpa zzz PTR server.internal.domain.tld -U Administrator

最后,测试查找。将 xxx.xxx.xxx.xxx 替换为您的服务器 IP 地址

# host -t PTR xxx.xxx.xxx.xxx

您应该会看到类似以下的输出

xxx.xxx.xxx.xxx.in-addr.arpa domain name pointer server.internal.domain.tld.

TLS

TLS 支持默认情况下未启用,但是,在 DC 启动时会创建一个默认证书。随着 Samba 4.3.8 和 4.2.2 的发布,默认情况下已禁用不安全的 LDAP 绑定,您必须配置 TLS 以使用 Samba 作为身份验证源(而不降低 Samba 安装的安全性)。要使用默认密钥,请将以下行追加到 /etc/samba/smb.conf 文件的 "[global]" 部分

/etc/samba/smb.conf
[global]
tls enabled  = yes
tls keyfile  = tls/key.pem
tls certfile = tls/cert.pem
tls cafile   = tls/ca.pem

如果需要受信任的证书,请创建签名密钥和证书请求(有关详细说明,请参阅 OpenSSL)。由您选择的证书颁发机构签署请求,并将其放入此目录。如果您的证书颁发机构也需要中间证书,请将证书串联(服务器证书在前,然后是中间证书),并将 tls cafile 留空。

重启 samba 使更改生效。

向现有域添加第二个域控制器

前提条件

与设置新域时的配置设置一样,您必须按照上面的说明配置 ntp。此外,原始域设置中的一些参数和配置必须在此处复制。

参数说明

--option='idmap_ldb:use rfc2307 = yes'
如果您选择在现有域中包含 Unix UID/GID 支持(使用 Samba 的配置步骤的 --use-rfc2307 选项或应用了 RFC 2307 Schema 扩展),则此项是必需的。
--dns-backend=DNSTYPE
DNSTYPE 替换为 BIND9_DLZSAMBA_INTERNAL - 这再次取决于服务器管理员的个人偏好。如果使用 BIND9_DLZ 后端,您需要在加入域后,按照上面的说明配置 bind
--option="dns forwarder="xxx.xxx.xxx.xxx"
这仅对 SAMBA_INTERNAL DNS 后端有效,它允许您指定 DNS 转发器。将 xxx.xxx.xxx.xxx 替换为适当的值。
--site=SITE
如果您定义了多个站点,请使用此选项直接加入该站点。

有关更多选项,请参阅 samba-tool domain join --help 的输出。

加入现有域作为新 DC

执行以下命令(在命令末尾添加上面任何必需的参数)

# samba-tool domain join internal.domain.tld DC -U"INTERNAL\administrator"

现在复制 krb5.conf

# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

如果您使用了 RFC 2307 Schema 扩展,您需要从现有 DC 复制 idmap。如果使用 Samba,请从另一个 DC 执行以下命令

# tdbbackup -s .bak /var/lib/samba/private/idmap.ldb

这将生成一个文件 /var/lib/samba/private/idmap.ldb.bak,将此文件传输到新服务器的 /var/lib/samba/private 目录,并删除 .bak 扩展名。如果您打算保留多个 DC,您将需要使用 Samba 网站上此处列出的方法之一来自动化此过程。这同样适用于从 Windows DC 传输 idmap。

启用并启动 samba.service 单元。

如果使用 BIND9_DLZ DNS 后端,您将需要遵循上面的 BIND 部分。检查 /var/lib/samba/private/dns 目录是否已创建,如果未创建,请运行以下命令(忽略有关更新 named.conf 的警告)

# samba_upgradedns --dns-backend=BIND9_DLZ

重启 named.service,然后使用以下命令更新 DNS 记录

# samba_dnsupdate --all-names --use-samba-tool --verbose

现在继续进行 LDB 配置和测试,就像在新域这里一样。

迁移 FSMO 角色

如果目的是替换现有域控制器,您需要在降级现有 DC 之前迁移 FSMO 角色。这目前不在本文档的范围内。有关详细信息,请参阅 Samba 维基此处

附加服务

打印

默认情况下,Samba 服务器在配置为域控制器时,不会启用打印。您需要在 /etc/samba/smb.conf 文件的 global 部分添加以下行

/etc/samba/smb.conf
[global]
...
        rpc_server:spoolss = external
        rpc_daemon:spoolssd = fork
        printing = CUPS
...
[printers]
       path = /var/spool/samba/
       printable = yes

上述配置将启用所有 CUPS 打印队列的自动共享。如果您只想共享特定的打印队列,您将需要添加以下附加行(删除上面的 [printers] 共享)

/etc/samba/smb.conf
[global]
...
        load printers = no
...
# Add an example print share
[HPDJ3050]
       path = /var/spool/samba/
       printable = yes
       printer name = hpdj3050

技巧与提示

带动态 DNS 更新的 DHCP

需要注意的是,使用此方法将影响 Windows 客户端的功能,因为它们仍会尝试自行更新 DNS。发生这种情况时,计算机将被拒绝更新权限,因为记录将归 dhcp 用户所有,而不是机器帐户。虽然这基本上是无害的,但会在受影响机器的系统日志中生成警告。您应该创建一个 GPO 来解决此问题,但不幸的是,Samba 还没有用于修改 GPO 的命令行实用程序。您需要一台安装了 RSAT 工具的 Windows PC。只需使用组策略编辑器创建一个专用的 GPO,并仅将其应用于包含使用 DHCP 的工作站的 OU(以便 Samba/Windows 服务器和静态配置的 Samba/Windows 客户端仍然可以使用 'ipconfig /registerdns' 进行更新),然后配置以下设置

Computer Configuration
  Policies
    Administrative Templates
      Network
        DNS Client
          Dynamic Update = Disabled
          Register PTR Records = Disabled

安装 dhcpsudo 以及 samba-dhcpd-updateAUR 包。

在 AD 中创建一个非特权用户来执行更新。在提示输入密码时,请使用安全密码。63 个随机的、大小写混合的、字母数字字符就足够了。可选地,samba-tool 也可以接受一个随机参数

# samba-tool user create dhcp --description="Unprivileged user for DNS updates via DHCP server"

由于这是一个服务帐户,建议(但不是必需)禁用用户帐户的密码过期

# samba-tool user setexpiry dhcp --noexpiry

授予用户管理 DNS 的权限

# samba-tool group addmembers DnsAdmins dhcp

创建 SPN 并将用户凭据导出到私有 keytab

# samba-tool spn add server/server.internal.domain.tld@INTERNAL.DOMAIN.TLD dhcp
# samba-tool domain exportkeytab --principal=dhcp@INTERNAL.DOMAIN.TLD dhcpd.keytab
# install -vdm 755 /etc/dhcpd
# mv dhcpd.keytab /etc/dhcpd
# chown root:root /etc/dhcpd/dhcpd.keytab
# chmod 400 /etc/dhcpd/dhcpd.keytab

使用以下命令修改 dhcpd-update-samba-dns.conf 文件(用正确的值替换 serverinternal.domain.tldINTERNAL.DOMAIN.TLD

/etc/dhcpd/dhcpd-update-samba-dns.conf
# Variables
KRB5CC="/tmp/dhcpd4.krb5cc"
KEYTAB="/etc/dhcpd/dhcpd.keytab"
DOMAIN="internal.domain.tld"
REALM="INTERNAL.DOMAIN.TLD"
PRINCIPAL="dhcp@${REALM}"
NAMESERVER="server.${DOMAIN}"
ZONE="${DOMAIN}"

授予 dhcp 用户帐户无需密码即可运行更新脚本的权限(将 server 替换为服务器的主机名)

/etc/sudoers.d/dhcp-update
dhcp server = (root) NOPASSWD: /usr/bin/dhcpd-update-samba-dns.sh

按照 dhcpd 文章配置 dhcpd 服务器,并将以下内容添加到所有提供 DHCP 服务的子网声明的 /etc/dhcpd.conf 文件中

  on commit {
    set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
    set ClientName = pick-first-value(option host-name, host-decl-name);
    execute("/usr/bin/sudo", "/usr/bin/dhcpd-update-samba-dns.sh", "add", ClientIP, ClientName);
  }

  on release {
    set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
    set ClientName = pick-first-value(option host-name, host-decl-name);
    execute("/usr/bin/sudo", "/usr/bin/dhcpd-update-samba-dns.sh", "delete", ClientIP, ClientName);
  }

    on expiry {
    set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
    set ClientName = pick-first-value(option host-name, host-decl-name);
    execute("/usr/bin/sudo", "/usr/bin/dhcpd-update-samba-dns.sh", "delete", ClientIP, ClientName);

以下是完整的 /etc/dhcpd.conf 文件示例供参考

/etc/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.100 192.168.1.199;
  option subnet-mask 255.255.255.0;
  option routers 192.168.1.254;
  option domain-name "internal.domain.tld";
  option domain-name-servers 192.168.1.1;
  option broadcast-address 192.168.1.255;
  default-lease-time 28800;
  max-lease-time 43200;
  authoritative;

  on commit {
    set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
    set ClientName = pick-first-value(option host-name, host-decl-name);
    execute("/usr/bin/sudo", "/usr/bin/dhcpd-update-samba-dns.sh", "add", ClientIP, ClientName);
  }

  on release {
    set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
    set ClientName = pick-first-value(option host-name, host-decl-name);
    execute("/usr/bin/sudo", "/usr/bin/dhcpd-update-samba-dns.sh", "delete", ClientIP, ClientName);
  }

    on expiry {
    set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
    set ClientName = pick-first-value(option host-name, host-decl-name);
    execute("/usr/bin/sudo", "/usr/bin/dhcpd-update-samba-dns.sh", "delete", ClientIP, ClientName);
  }
}

最后,启用并启动(或重启)dhcpd4 服务。

将用户从一个目录迁移到另一个目录

不幸的是,没有内置的实用程序可以将用户从一个目录导出到另一个目录。这是一种非常丑陋的方式,可以将用户特定字段从现有的 SAM 导出为适合 ldbmodify 的 LDIF 格式

# ldbsearch -H /var/lib/samba/private/sam.ldb \
    -s sub -b cn=Users,dc=internal,dc=domain,dc=tld '(objectClass=user)' | \
    grep -e "^\# record" -e "^accountExpires:" -e "^c:" -e "^cn:" -e "^co:" -e "^codePage:" \
         -e "^comment:" -e "^company:" -e "^countryCode:" -e "^department:" \
         -e "^description:" -e "^displayName" -e "^displayNamePrintable:" \
         -e "^distinguishedName" -e "^division:" -e "^dn:" -e "^employeeID:" \
         -e "^facsimileTelephoneNumber:" -e "^generationQualifier:" \
         -e "^givenName" -e "^homeDirectory:" -e "^homeDrive:" -e "^homePhone:" \
         -e "^homePostalAddress:" -e "^info:" -e "^initials:" \
         -e "^internationalISDNNumber:" -e "^ipPhone:" -e "^l:" -e "^mail:" \
         -e "^manager:" -e "^middleName:" -e "^mobile:" -e "^name:" -e "^o:" \
         -e "^objectClass" -e "^otherFacsimileTelephoneNumber:" \
         -e "^otherHomePhone:" -e "^otherIpPhone:" -e "^otherMailbox:" \
         -e "^otherMobile:" -e "^otherPager:" -e "^otherTelephone:" -e "^pager:" \
         -e "^personalTitle:" -e "^physicalDeliveryOfficeName:" -e "^postalAddress:" \
         -e "^postalCode:" -e "^postOfficeBox:" -e "^proxyAddresses\: SMTP" \
         -e "^proxyAddresses: smtp" -e "^referredDeliveryMethod:" \
         -e "^primaryInternationalISDNNumber:" -e "^primaryTelexNumber:" \
         -e "^profilePath:" -e "^registeredAddress:" -e "^sAMAccountName:" \
         -e "^scriptPath:" -e "^sn:" -e "^st:" -e "^street:" -e "^streetAddress:" \
         -e "^telephoneNumber:" -e "^teletexTerminalIdentifier:" \
         -e "^telexNumber:" -e "^title:" -e "^userAccountControl:" -e "^userPrincipalName:"\
         -e "^url:" -e "^userSharedFolder:" -e "^userSharedFolderOther:" -e "^wWWHomePage:" | \
    sed '/^dn:.*/ a\changetype: add' | sed '/^# record/ i\\n' > user-export.ldif

解释:在仅用户容器中运行 ldbsearch,使用子树搜索 objectclass=user。如果您需要整个目录,可以将搜索基础修改为使用根或其他 OU。ldbsearch 的输出被管道到一个很长的 grep 命令,该命令仅返回要保留在新目录中的适当属性。这显然是主观的,并且可能需要根据您的具体用例进行定制。最后,我们使用 sed 插入 changetype 行(告诉 ldbmodify 我们正在添加一个用户),并在每个导出对象前加上一个空行(以便于阅读)。

注意 您需要修改输出文件并删除您不想迁移的任何对象。输出文件将包含对象(服务用户、内置用户等),如果您未能删除它们,可能会破坏您的新目录!它还将包含“dn”和“distinguishedName”属性中的旧域,这些属性必须在导入前进行更改。

要导入,在编辑文件并将其传输到新服务器后,只需在新 samba 域控制器上运行以下命令

# ldbmodify -H /var/lib/samba/private/sam.ldb user-export.ldif

密码复杂度

默认情况下,Samba 需要强密码。要禁用复杂度检查,请发出以下命令

# samba-tool domain passwordsettings set --complexity=off

有关更多信息,请参阅 Samba 维基上的 密码设置对象

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.