20、Samba 4 实现 Active Directory 认证与 Linux 高可用性机制

Samba 4 实现 Active Directory 认证与 Linux 高可用性机制

1. Samba 4 实现 Active Directory 认证

1.1 设置域控制器

  • 安装 Samba 域控制器包
sudo dnf install samba-dc
  • 清除配置文件 :为确保环境干净,移除 Samba 和 Kerberos 守护进程的所有配置文件。
sudo rm -f /etc/samba/smb.conf
sudo rm -f /etc/krb5.conf
  • 自动配置域控制器 :Samba 提供了自动配置域控制器的命令,支持交互和非交互模式。以下是一个在 VirtualBox VM 中运行客户端系统时的示例命令:
sudo samba-tool domain provision --option="interfaces=vboxnet0" --option="bind interfaces only=yes" --use-rfc2307 --interactive

在交互过程中,需要输入以下信息:
- Realm :必须是大写的域名,如 AD.EXAMPLE.COM
- Domain :NetBIOS 意义上的域名,最长 15 个字符,如 AD
- Server Role :默认为 dc (域控制器)。
- DNS backend :默认为 SAMBA_INTERNAL
- DNS forwarder IP address :可指定为 192.168.56.1
- Administrator password :设置域管理员密码。

配置完成后,会生成 Kerberos 配置文件,但需要手动复制到目标位置:

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

最后,启动 Samba 服务:

sudo systemctl start samba

1.2 创建测试用户

为验证认证功能,创建一个名为 testuser 的用户:

sudo samba-tool user create testuser

使用以下命令查看该用户的 LDAP 字段:

samba-tool user show testuser

1.3 设置客户端

  • 验证控制器状态 :使用 realm discover 命令验证域控制器是否正常工作。
realm discover ad.example.com

输出信息会显示客户端机器是否已加入该域,以及加入该域所需的软件包。如果有未安装的软件包,可以使用 dnf 命令进行安装,例如:

sudo dnf install samba-common-tools
  • 加入域 :运行以下命令加入域,过程中需要输入域管理员密码。
sudo realm join ad.example.com

加入域后,重启 SSSD 服务使配置生效:

sudo systemctl restart sssd

生成的 SSSD 配置文件 /etc/sssd/sssd.conf 内容如下:

[sssd]
domains = ad.example.com
config_file_version = 2
services = nss, pam

[domain/ad.example.com]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = AD.EXAMPLE.COM
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u@%d
ad_domain = ad.example.com
use_fully_qualified_names = True
ldap_id_mapping = True
access_provider = ad
  • 验证用户信息 :使用 id 命令查询 testuser 的信息,需要指定其完全限定名。
id testuser@ad.example.com

也可以使用该用户名和密码登录控制台。

1.4 相关技术表格

操作 命令
安装 Samba 域控制器包 sudo dnf install samba-dc
清除 Samba 配置文件 sudo rm -f /etc/samba/smb.conf
清除 Kerberos 配置文件 sudo rm -f /etc/krb5.conf
自动配置域控制器 sudo samba-tool domain provision --option="interfaces=vboxnet0" --option="bind interfaces only=yes" --use-rfc2307 --interactive
复制 Kerberos 配置文件 sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
启动 Samba 服务 sudo systemctl start samba
创建测试用户 sudo samba-tool user create testuser
查看用户 LDAP 字段 samba-tool user show testuser
验证域控制器 realm discover ad.example.com
加入域 sudo realm join ad.example.com
重启 SSSD 服务 sudo systemctl restart sssd
查询用户信息 id testuser@ad.example.com

1.5 流程 mermaid 图

graph LR
    A[安装 Samba 域控制器包] --> B[清除配置文件]
    B --> C[自动配置域控制器]
    C --> D[复制 Kerberos 配置文件]
    D --> E[启动 Samba 服务]
    E --> F[创建测试用户]
    F --> G[查看用户 LDAP 字段]
    G --> H[验证域控制器]
    H --> I[加入域]
    I --> J[重启 SSSD 服务]
    J --> K[查询用户信息]

2. Linux 高可用性机制

2.1 冗余和负载均衡类型概述

现代 TCP/IP 网络栈是分层的,常见的分层模型有七层的开放系统互连(OSI)模型和四层的 DoD 模型。不同层的协议相互独立,为了使网络能够抵抗不同类型的故障,需要在多个层面实现冗余。以下是两种模型的对比表格:
| OSI 模型 | DoD 模型 | 目的 | 示例 |
| — | — | — | — |
| 物理层 | 链路层 | 传输代表比特流的电/光信号 | 以太网、Wi-Fi |
| 数据链路层 | 网络层 | 在分段、路由网络中传输数据包 | IPv4、IPv6 |
| 传输层 | 传输层 | 可靠传输数据段(完整性检查、确认、拥塞控制等) | TCP、UDP、SSTP |
| 会话层 | 应用层 | 传输特定应用程序的数据 | HTTP、SMTP、SSH |
| 表示层 | 应用层 | | |

2.2 术语说明

在描述冗余设置时,默认使用主动/备用(active/standby)术语,即同一时间只有一个活动节点工作,一个或多个备用节点等待在活动节点故障时接替工作。不过,一些旧文献可能会使用主/从(master/slave)术语,该术语因与奴隶制相关且容易产生误解,正逐渐被淘汰。在讨论仍使用该术语的协议和软件时,为保持与文档一致,会继续使用。

2.3 链路层冗余

在户外安装和工业网络中,电缆和以太网交换机端口故障较为常见,因此拥有多个链路层连接非常有用。Linux 支持多种方式将多个网卡组合使用,包括主动/备用和负载均衡配置。不同模式对交换机的要求不同,具体如下表所示:
| 类型 | 操作 | 交换机要求 |
| — | — | — |
| 主动备份(active-backup) | 一个网卡处于禁用状态,另一个正常工作 | 无,适用于任何交换机(包括非管理型交换机) |
| 802.3ad | 帧在所有端口上进行平衡 | 需要支持 803.3ad LACP 协议 |
| 平衡异或(balance-xor)和广播(broadcast) | | 需要支持 EtherChannel 协议 |
| 平衡传输层负载均衡(balance-tlb)和平衡应用层负载均衡(balance-alb) | | 无 |

以主动备份模式为例,在使用 NetworkManager 配置的系统中,可以使用以下命令将 eth0 eth1 网络接口组合成一个 bond0 接口:

sudo nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
sudo nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname eth0 master bond0
sudo nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname eth1 master bond0
sudo nmcli connection up bond0

2.4 网络层冗余和负载均衡

当系统有多个独立的互联网或内部网络连接时,可以提供备份路由或在多个路由之间平衡 IP 数据包。但在实际应用中,网络层冗余主要由路由器使用,且最简单的形式仅适用于具有公共、全球路由地址的网络。

例如,系统连接到两个不同的路由器,IPv4 地址分别为 192.0.2.1 203.0.113.1 。如果希望其中一个连接作为备用,可以创建两个默认路由并设置不同的度量值:

sudo ip route add 0.0.0.0/0 via 192.0.2.1 metric 200
sudo ip route add 0.0.0.0/0 via 203.0.113.1 metric 100

若要实现负载均衡,可以使用以下命令:

sudo ip route add 0.0.0.0/0 nexthop via 192.0.2.1 weight 5 nexthop via 203.0.113.1 weight 10

但这种配置与网络地址转换(NAT)不兼容,因为它可能会将属于同一 TCP 连接或 UDP 流的数据包发送到不同的网关。

2.5 传输层负载均衡(LVS)

网络层机制的主要缺点是它以单个数据包为操作单位,没有连接的概念。许多网络服务是面向连接的,因此需要确保属于同一连接的所有数据包都发送到同一服务器。Linux 提供了 Linux 虚拟服务器(LVS)框架和管理工具 ipvsadm 来解决这个问题。

LVS 的关键概念包括虚拟服务器和真实服务器。虚拟服务器提供服务的公共地址,接受连接并将其分配给多个真实服务器,真实服务器可以运行任何操作系统和软件,并且可以不知道虚拟服务器的存在。

LVS 提供了多种负载调度算法,各有优缺点,如下表所示:
| 算法 | 描述 |
| — | — |
| 轮询(Round Robin,rr) | 平均分配连接到所有服务器 |
| 加权轮询(Weighted Round Robin,wrr) | 类似于轮询,但可以通过分配更高的权重值将更多连接发送到某些服务器 |
| 最少连接(Least Connection,lc) | 优先将新连接发送到当前连接数最少的服务器 |
| 加权最少连接(Weighted Least Connection,wlc) | 默认调度算法,类似于最少连接,但可以为服务器分配权重 |
| 基于位置的最少连接(Locality-Based Least-Connection,lblc) | 将具有相同目标 IP 地址的新连接发送到同一服务器,如果该服务器不可用或过载,则切换到下一个服务器 |
| 带复制的基于位置的最少连接(Locality-Based Least-Connection with Replication,lblcr) | 如果服务器未过载,将具有相同目标 IP 地址的新连接发送到同一服务器,否则发送到连接数最少的服务器 |
| 目标哈希(Destination Hashing,dh) | 创建一个将目标 IP 地址映射到服务器的哈希表 |
| 源哈希(Source Hashing,sh) | 创建一个将源 IP 地址映射到服务器的哈希表 |
| 最短预期延迟(Shortest Expected Delay,sed) | 将新连接发送到预期延迟最短的服务器 |
| 永不排队(Never Queue,nq) | 将新连接发送到第一个空闲的服务器,如果没有空闲服务器,则切换到最短预期延迟算法 |

选择合适的调度算法取决于服务类型,例如轮询和加权轮询适用于短连接服务,如提供静态页面或文件的 Web 服务器。

2.6 流程 mermaid 图

graph LR
    A[网络层连接故障] --> B[链路层冗余]
    B --> C[网络层冗余和负载均衡]
    C --> D[传输层负载均衡(LVS)]
    D --> E[选择合适的调度算法]

通过在多个层面实现冗余和负载均衡,可以提高系统的可用性和性能,确保系统能够在各种故障情况下继续提供服务。

2.7 使用 Keepalived 实现虚拟 IP 共享与 LVS 自动化配置

Keepalived 是一个用于实现高可用性的软件,它可以在多个节点之间共享一个虚拟 IP 地址,并自动配置 LVS。以下是使用 Keepalived 实现虚拟 IP 共享和 LVS 自动化配置的步骤:

2.7.1 安装 Keepalived

在需要配置的节点上安装 Keepalived:

sudo dnf install keepalived

2.7.2 配置 Keepalived

编辑 Keepalived 配置文件 /etc/keepalived/keepalived.conf ,以下是一个示例配置:

! Configuration File for keepalived

global_defs {
    router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

virtual_server 192.168.1.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.101 80 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f8d06963a18ff99a97acde
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

在上述配置中:
- vrrp_instance 部分定义了虚拟路由器实例,包括状态( state )、接口( interface )、虚拟路由器 ID( virtual_router_id )等。
- virtual_server 部分定义了虚拟服务器,包括 IP 地址、端口、负载均衡算法( lb_algo )等。
- real_server 部分定义了真实服务器,包括 IP 地址、端口、权重( weight )等。

2.7.3 启动 Keepalived

启动 Keepalived 服务并设置开机自启:

sudo systemctl start keepalived
sudo systemctl enable keepalived

2.7.4 配置表格

操作 命令或配置
安装 Keepalived sudo dnf install keepalived
编辑配置文件 /etc/keepalived/keepalived.conf
启动服务 sudo systemctl start keepalived
设置开机自启 sudo systemctl enable keepalived

2.7.5 流程 mermaid 图

graph LR
    A[安装 Keepalived] --> B[编辑配置文件]
    B --> C[启动 Keepalived 服务]
    C --> D[设置开机自启]

2.8 应用层负载均衡(HAProxy)

应用层负载均衡可以根据应用层协议(如 HTTP、HTTPS)的内容进行负载均衡,提供更细粒度的控制。HAProxy 是一个常用的应用层负载均衡器,以下是使用 HAProxy 进行应用层负载均衡的步骤:

2.8.1 安装 HAProxy

在需要配置的节点上安装 HAProxy:

sudo dnf install haproxy

2.8.2 配置 HAProxy

编辑 HAProxy 配置文件 /etc/haproxy/haproxy.cfg ,以下是一个示例配置:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL). This list is from:
    #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
    ssl-default-bind-options no-sslv3

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000

frontend http-in
    bind *:80
    default_backend servers

backend servers
    balance roundrobin
    server server1 192.168.1.101:80 check
    server server2 192.168.1.102:80 check

在上述配置中:
- global 部分定义了全局配置,如日志、用户、组等。
- defaults 部分定义了默认配置,如模式、超时时间等。
- frontend 部分定义了前端配置,如监听的 IP 地址和端口。
- backend 部分定义了后端配置,如负载均衡算法、真实服务器列表等。

2.8.3 启动 HAProxy

启动 HAProxy 服务并设置开机自启:

sudo systemctl start haproxy
sudo systemctl enable haproxy

2.8.4 配置表格

操作 命令或配置
安装 HAProxy sudo dnf install haproxy
编辑配置文件 /etc/haproxy/haproxy.cfg
启动服务 sudo systemctl start haproxy
设置开机自启 sudo systemctl enable haproxy

2.8.5 流程 mermaid 图

graph LR
    A[安装 HAProxy] --> B[编辑配置文件]
    B --> C[启动 HAProxy 服务]
    C --> D[设置开机自启]

总结

通过本文,我们学习了如何使用 Samba 4 实现与 Microsoft Active Directory 兼容的域控制器,并从另一台 Linux 机器加入该域。同时,我们还深入探讨了 Linux 中的高可用性机制,包括链路层、网络层、传输层和应用层的冗余和负载均衡。

在链路层,我们可以通过网卡绑定实现冗余;在网络层,可以通过设置路由实现备份和负载均衡;在传输层,LVS 提供了多种调度算法来分配连接;在应用层,HAProxy 可以根据应用层协议进行负载均衡。此外,Keepalived 可以实现虚拟 IP 共享和 LVS 自动化配置。

通过在多个层面实现冗余和负载均衡,可以提高系统的可用性和性能,确保系统能够在各种故障情况下继续提供服务。希望这些知识对你有所帮助,让你能够更好地构建和管理高可用性的 Linux 系统。

在数字化环境中,线上票务获取已成为参各类活动的主要途径。随着公众对热门演出需求的增长,票源往往在开放销售后迅速告罄,导致普通消费者难以顺利购得所需票券。为应对这一挑战,部分技术开发者借助编程手段构建了自动化购票辅助程序,旨在提升用户成功获取门票的概率。本文将以一个针对特定票务平台设计的自动化工具为例,系统阐述其设计理念、技术组成及具体实施流程。 秀动网作为国内知名的演出及体育赛事票务销售平台,因活动热度较高,常出现访问拥堵、瞬时抢购压力大等现象,使得常规购票过程面临困难。因此,开发一款能够协助用户更有效完成票务申购的辅助工具具有实际意义。 该工具主要具备以下几项关键功能:持续监控目标平台的票务信息更新;在票务释放时自动执行选座、添加至购物车及提交订单等系列操作;集成一定的异常处理机制,以应对网络延迟或服务器响应异常等情况。 在技术实现层面,选用Python作为开发语言,主要基于其语法简洁、标准库第三方资源丰富,适合快速构建功能原型。同时,Python在网络通信浏览器自动化方面拥有如requests、selenium等成熟支持库,为程序实现网页交互数据抓取提供了便利。 开发过程主要包括以下环节:首先解析目标网站的页面结构,明确可通过程序操控的网页元素路径;随后编写监控模块,实时检测新票务信息的上线并及时触发后续操作;接着模拟用户操作流程,包括自动填写个人信息、选择座位偏好、完成购物车添加等步骤,并通过行为模拟降低被平台反爬虫机制识别的可能;最终实现订单自动提交,并在成功购票后向用户发送通知。 此外,该工具提供了可配置的操作界面,允许用户根据个人需求设定抢票时间、目标活动类型及座位选择等参数,从而在提升使用体验的同时,减少对票务平台服务器资源的非必要占用。 需指出的是,尽管此类工具能提高购票效率,但其使用可能涉及违反平台服务协议或相关法规的风险。各票务销售方通常对自动化抢票行为设有明确约束,因此开发使用者均应遵守相应规定,确保技术应用的合法性。 综上所述,该基于Python的票务辅助工具是针对特定场景设计的自动化解决方案,通过技术手段改善用户购票体验,但同时也强调必须在法律平台规则框架内合理使用此类技术。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值