30、基础设施增强与系统安全提升

基础设施增强与系统安全提升

1. 基础设施增强

在系统管理中,基础设施的增强是保障系统稳定运行的关键。我们对 LNK@+ejlqpo+dkopcnkqlo+_b*dkopcnkql[i]llejco 进行了修改,添加了如下一行代码:

lkhe_udkop66                      dkopcnkqlo+_b*lkhe_udkop

完成修改后,需要提交这些更改,并在 cfengine 主节点上更新生产 LNK@ 树。次日凌晨 12:25 之后,你应该能在 cfengine 主节点的 +r]n+^]_gqlo+orj^]_gqlo+ 目录中找到功能完备的 Subversion 备份。至于将备份目录复制到异地主机的任务,可自行完成。

此次基础设施增强意义重大,它让系统从因系统故障而面临高风险的状态,转变为具备完全版本控制和备份的稳定环境。很多使用 cfengine 或其他自动化管理软件的站点,可能无法像我们这样轻松管理测试环境。我们拥有 @AR cfengine 分支,这是一个很大的优势,应充分利用它来尝试新的配置和应用。我们目前的备份措施虽然简约,但行之有效。即使包括关键的 cfengine 主节点在内的任何主机遭遇系统完全故障,我们也能将系统恢复到全功能状态。

2. 提升系统安全性

在 UNIX/Linux 系统管理中,管理文件内容和权限是核心工作,系统安全也几乎完全与文件内容和权限相关。即使是出于安全目的配置网络设置,通常也是在配置文件内容。因此,使用 cfengine 提升 UNIX 和 Linux 主机的安全性时,我们执行的操作大多是熟悉的。此前,我们在配置系统或实现新功能时,就已经考虑了安全因素:
- 集中管理用户账户文件,方便在整个站点更改密码、添加和删除账户。
- 仅通过 HTTPS 运行所有内部网站。
- 从源代码编译自己的 Apache,使面向外部的网站功能尽可能少,降低被远程 Apache 漏洞攻击的风险。
- 不允许通过 NFS 授予 root 权限。
- 设置中央日志主机并实现自动日志报告。
- 确保集中化的日志上传受到保护,防止恶意用户攻击。
- 配置版本控制和备份,这不仅是灾难恢复措施,也是现代数据安全的重要组成部分。

本次我们将重点关注安全本身,但要明确安全并非独立于日常工作之外的任务。如果将安全视为事后考虑的因素,很难实现良好的安全效果,甚至在项目后期处理安全问题会成为一种负担。

由于我们仅在网络内的主机上进行操作,因此主要关注基于主机的安全。基于主机的安全措施至关重要,但许多站点通过防火墙实现网络安全,却很少关注主机本身的安全。这种做法假设内部网络没有威胁,但实际上,大多数防火墙会允许特定流量进入内部网络主机,攻击者可能利用这些流量入侵内部主机,进而攻击其他主机。同时,内部用户也是主要风险源,即使他们本身没有恶意,其凭证或计算机系统也可能被攻击者利用,通过 VPN 或其他远程访问方式进入内部网络。现代网络不应只有外部防护而缺乏内部保护机制。

基于主机的安全机制能有效强化内部网络,关闭不必要的守护进程、移除不必要的账户、减少或最小化主机之间的信任、实施适当的文件权限和基于主机的防火墙,以及频繁应用系统补丁和更新软件包,能解决绝大多数本地和远程漏洞问题。

3. cfengine 增强安全

cfengine 在提升系统安全方面有诸多作用。首先,它能自动以一致的方式配置系统,其配置具有通用性,可快速将更改应用到同一或不同类别的其他主机,甚至未安装的系统。这意味着如果通过 cfengine 修复了 Linux 系统的安全问题,后续安装的新 Linux 系统也会自动修复该问题。

cfengine 还有其他提升系统安全的方式,但这并非完整列表,不同系统可能有更多可利用 cfengine 增强安全的地方。例如,运行 FTP 服务器等应用时,如果配置不当可能会带来严重安全问题,一本好的安全书籍会告知需要配置的内容,而 cfengine 则可完成实际配置工作。

4. 移除 SUID 位

恶意用户获取特权访问的常见方式之一是利用设置了 SUID 位的程序漏洞。SUID 权限设置会使程序以文件所有者的权限执行,而非执行程序的用户权限。这是 UNIX 允许非特权用户执行需要提升权限任务的机制,但这类程序中的编程错误或漏洞往往会对本地安全造成严重影响。避免成为此类漏洞受害者的方法有两个:一是保持系统的安全补丁和错误修复更新,二是限制系统中 root 用户拥有的 setuid 二进制文件数量。

我们可以使用以下 bej 命令查看系统中存在的 SUID 二进制文件:

bej` + )bopula jbo )lnqja )k )qoan nkkp )lani ),0,,, )ho x paa +r]n+pil+oqe`*heop

该命令不会深入到通过 NFS 挂载的文件系统中,会查找 root 用户拥有且设置了 SUID 位的程序,然后使用 paa 命令将输出保存到文件中以便后续研究,同时将输出显示在屏幕上。在不同系统中,该命令的输出结果有所不同:
| 系统 | 拥有 SUID 位的 root 程序数量 |
| — | — |
| Debian 系统 | 10 个 |
| Solaris 系统 | 75 个 |
| Red Hat 系统 | 36 个 |

为了移除除重要二进制文件之外的所有二进制文件的 SUID 位,我们在 LNK@+ejlqpo+p]ogo+ko+_b*oqe [ naikr]h 创建了一个任务,内容如下:

behao6
                          `a^e]j*Dn,/*Iej0,[0166
                                          +
                                          behpan9nkkpksja`behao
                                          ik`a9)0,,,           jk OQE@ bkn nkkpksja`behao
                                          na_qnoa9ejb
                                          ]_pekj9bet]hh
                                          ejbkni9pnqa
                                          ecjkna9+qon+^ej+l]oos`
                                          ecjkna9+qon+^ej+pn]_ankqpa*h^h
                                          ecjkna9+qon+lgc+j]ceko)lhqcejo)-*0*-.+he^ata_+_da_g[e_il
                                          ecjkna9+qon+lgc+j]ceko)lhqcejo)-*0*-.+he^ata_+_da_g[`d_l
                                          ecjkna9+qon+he^+lp[_dksj
                                          ecjkna9+o^ej+qjet[_dgls`
                                          ecjkna9+^ej+lejc
                                          ecjkna9+^ej+oq
                                          ouohkc9kj
                                          t`ar9kj
                          na`d]p*Dn,/*Iej0,[0166
                                          +
                                          behpan9nkkpksja`behao
                                          ik`a9)0,,,           jk OQE@ bkn nkkpksja`behao
                                          na_qnoa9ejb
                                          ]_pekj9bet]hh
                                          ejbkni9pnqa
                                          ecjkna9+qon+lgc+j]ceko)lhqcejo)-*0*-.+he^ata_+_da_g[`d_l
                                          ecjkna9+qon+lgc+j]ceko)lhqcejo)-*0*-.+he^ata_+_da_g[e_il
                                          ecjkna9+qon+^ej+oq`k
                                          ecjkna9+qon+^ej+_nkjp]^
                                          ecjkna9+qon+^ej+]p
                                          ecjkna9+qon+^ej+oq`ka`ep
                                          ecjkna9+qon+o^ej+__na`o[r]he`]pa
                                          ecjkna9+^ej+lejc
                                          ecjkna9+^ej+oq
                                          ecjkna9+o^ej+qjet[_dgls`
                                          ecjkna9+o^ej+l]i[peiaop]il[_da_g
                                          ouohkc9kj
                                          t`ar9kj
                          $okh]neoxokh]neot42%*Dn,/*Iej0,[0166
                                          +
                                          behpan9nkkpksja`behao
                                          ik`a9q)o               jk OQE@
                                          na_qnoa9ejb
                                          ]_pekj9bet]hh
                                          ejbkni9pnqa
                                          ecjkna9+lnk_
                                          ecjkna9+klp+_os+^ej+oq`k*iejei]h
                                          ecjkna9+klp+_os+^ej+oq`k
                                          ecjkna9+klp+_os+^ej+oq`ka`ep
                                          ecjkna9+qon+^ej+]p
                                          ecjkna9+qon+^ej+]pm
                                          ecjkna9+qon+^ej+]pni
                                          ecjkna9+qon+^ej+_nkjp]^
                                          ecjkna9+qon+^ej+oq
                                          ecjkna9+qon+he^+lp[_dik`
                                          ecjkna9+qon+he^+qpil[ql`]pa
                                          ecjkna9+qon+o^ej+pn]_ankqpa
                                          ecjkna9+qon+o^ej+lejc
                                          ecjkna9+qon+lgc+j]ceko)lhqcejo)-*0*-.+he^ata_+_da_g[`d_l
                                          ecjkna9+qon+lgc+j]ceko)lhqcejo)-*0*-.+he^ata_+_da_g[e_il
                                          ecjkna9+qon+lgc+j]ceko)lhqcejo)-*0*-.+he^ata_+lop/
                                          ouohkc9kj
                                          t`ar9kj

我们设置 t ar = kj ,这样 cfengine 就不会跨越文件系统边界。因为我们所有系统都使用单个根文件系统进行镜像,所以可以避免遍历 NFS 目录。即使想修复 NFS 挂载的权限也无法实现,因为在 NFS 上 root 用户会被映射为 jk^k u 用户(除非在 NFS 服务器上使用 jk[nkkp[omq]od 选项,但我们未使用该选项)。

我们使用了 LNK@+ejlqpo+behpano+_b*nkkp[ksja 中的 nkkpksja behao` 过滤器,该文件内容如下:

behpano6
                          w  nkkpksja`behao
                          Ksjan6  nkkp
                          Naoqhp6  Ksjan
y

cfengine 中的过滤器可能非常复杂,能够查找具有特定属性的多个项目以实现匹配。上述过滤器是一个简单的文件过滤器,当文件由 root 拥有时匹配。结合 _b*oqe [ naikr]h 中的以下几行:

ik`a9q)o               jk OQE@
na_qnoa9ejb
]_pekj9bet]hh

我们告知 cfengine,希望文件不具备 SUID 位,cfengine 应无限递归目录,并采取修复文件的操作。最后,使用 ecjkna = 行来忽略我们不想更改的文件。

要激活此任务,我们在 LNK@+ejlqpo+dkopcnkqlo+_b*]ju 中添加了以下行:

p]ogo+ko+_b*oqe`[naikr]h

在应用这些更改时要小心,先在每个平台的一台主机上进行测试。作为临时措施,可以在 LNK@+ejlqpo+dkopcnkqlo+_b*]ju 中使用如下行覆盖主机组机制:

]qnkn]xndh]ilxhkcdkop-66
                          p]ogo+ko+_b*oqe`[naikr]h
]ju66

但要确保最后再次设置 ]ju66 类,因为后续添加的任何条目只会应用于指定的三个主机。我们不建议长期保留这样的条目,因为它绕过了我们的 dkopcnkqlo cfengine 配置文件组织方法。直接在任何操作(包括导入)中指定主机名作为类,会增加基础设施的维护难度。从长远来看,使用基于角色的类有助于提高可维护性。理想情况下,主机名应仅出现在类定义中。

当安装新软件时,如果它安装了一个带有 SUID 位的 root 程序,该软件可能会因这个夜间运行的任务而出现故障。但我们认为这是一个优点而非缺陷,在我们的系统中,任何带有 SUID 位的新程序都不会持续超过一天。

3. 保护系统账户

标准系统账户常被用于对系统进行暴力登录尝试。攻击者每天都会使用常见系统账户和密码列表进行未经授权的登录尝试。我们可以通过以下三种方式保护自己:
- 设置系统账户使用非工作 shell。
- 移除不必要的系统账户。
- 锁定系统账户的密码。

我们要让系统账户无法用于交互式登录。例如,我们已经将新账户(如 c]jche] 用户)设置为没有有效 shell:

c]jche]6t6-,26-,56C]jche] Ikjepkn6+r]n+he^+c]jche]6+^ej+b]hoa

我们需要为除 root 账户外的所有系统账户复制这个 shell 条目。过去,我们发现一些守护进程在启动脚本中使用 oq Ì =??KQJP 时会出现问题。如果守护进程或脚本试图以这种方式执行登录 shell,在我们的环境中将无法正常工作。不过,我们无需为账户提供工作 shell,只需修改脚本,使用 oq -o +^ej+od 选项即可使其正常工作。

由于我们已经在环境中实现了集中化的 +ap_+l]oos 文件的自动化分发,因此只需编辑 Subversion @AR 仓库中的副本,并在一些非生产主机上进行测试。进行此类更改时需要格外谨慎。测试通过后,将更改后的 l]oos 文件合并回 LNK@ 分支,并在 cfengine 主节点的生产工作副本中执行 Subversion 检出操作。

在编辑系统账户以将 shell 更改为 +^ej+b]hoa 时,移除站点不需要的任何账户。这可能需要一些试验和错误,并且应在非生产环境中进行测试,然后再将更改应用到 LNK@ 分支。

接下来,编辑所有站点平台的影子文件,确保每个账户的加密密码条目包含无效字符串。例如:

j]ceko6!6-0--16,65555563666

在 Linux 系统上,可以使用 l]oos 命令的 -O 参数验证账户是否被锁定:

oq`k l]oos` -O j]ceko

输出中的 H 表示账户已锁定。在 Solaris 系统上,使用 -o 参数:

oq`k l]oos` -o j]ceko

输出中的 LO 字段表示“passworded” 或 “locked”,我们知道 j]ceko 账户没有有效密码。Solaris 的 l]oos 命令需要特定字符串才能报告 L (锁定)状态,即字符串 &HG& 。但即使我们只使用 ! 字符,也能确保账户安全,尽管 Solaris 的 l]oos 命令可能无法理解。

4. 应用补丁和供应商更新

Debian 和 Red Hat 发行版在使用安全补丁和错误修复保持系统更新方面非常方便。使用 Red Hat Enterprise 或稳定的 Debian 分支时,自动更新系统软件是相当安全的。简单的 odahh_kii]j 部分执行以下命令,可使 Debian 和 Red Hat Enterprise 系统保持完全补丁和最新状态:
- Red Hat: +qon+^ej+uqi qlcn] a - Debian: +qon+^ej+]lp-cap ql ]pa && +qon+^ej+]lp-cap qlcn] a`

Solaris 系统则完全不同。在我们全职工作的地方,仍然使用 Sun 推荐的补丁集群,并在单用户模式下逐个系统安装它们。每个声称能自动化系统补丁的 Sun 工具,要么无法满足我们的需求,要么需要进行重大的基础设施更改以适应所需的 Sun 工具套件。在尝试系统重启之前,拥有控制台连接以查看补丁集群输出是很有用的,因为曾出现过严重问题,导致在未事先修复的情况下无法正常重启。

对 Sun 系统进行打补丁的明智方法之一可能是 Sun Live Upgrade 过程,即将打补丁后的 Solaris 操作系统安装到系统磁盘的备用切片上,然后将主机引导到新打补丁的操作系统。如果出现问题,可以将系统引导回原始操作系统安装,恢复全部功能。

综上所述,通过基础设施增强和系统安全提升的一系列操作,我们能够有效保障系统的稳定运行和数据安全。在实际操作中,要根据不同系统的特点和需求,谨慎实施各项措施,并持续关注系统的安全状况,及时进行调整和优化。

graph LR
    A[基础设施增强] --> B[提交更改并更新LNK@树]
    B --> C[获取Subversion备份]
    C --> D[考虑复制备份到异地主机]
    E[系统安全提升] --> F[移除SUID位]
    E --> G[保护系统账户]
    E --> H[应用补丁和更新]
    F --> I[查看SUID二进制文件]
    F --> J[创建移除任务]
    F --> K[激活任务并测试]
    G --> L[编辑账户shell]
    G --> M[移除不必要账户]
    G --> N[锁定账户密码]
    H --> O[Red Hat更新]
    H --> P[Debian更新]
    H --> Q[Solaris打补丁]

这个流程图展示了基础设施增强和系统安全提升的主要步骤和流程,涵盖了从基础设施修改到系统安全各方面措施的实施过程。

基础设施增强与系统安全提升

5. 总结与建议

为了更清晰地回顾和总结前面提到的各项系统安全提升措施,下面以表格形式呈现:
| 安全提升措施 | 具体操作 | 注意事项 |
| — | — | — |
| 移除 SUID 位 | 1. 使用 bej 命令查看系统中 root 拥有且设置了 SUID 位的程序。
2. 在 LNK@+ejlqpo+p]ogo+ko+_b*oqe [ naikr]h 创建移除任务。
3. 使用 nkkpksja behao 过滤器筛选文件。<br>4. 在 LNK@+ejlqpo+dkopcnkqlo+_b*]ju 中添加行激活任务。 | 1. 先在每个平台的一台主机上测试。<br>2. 避免长期绕过 dkopcnkqlo 配置文件组织方法。<br>3. 新软件安装可能因该任务出现故障。 | | 保护系统账户 | 1. 将系统账户 shell 更改为 +^ej+b]hoa 。<br>2. 移除不必要的系统账户。<br>3. 编辑影子文件,使账户加密密码条目包含无效字符串。 | 1. 测试守护进程启动脚本兼容性。<br>2. 在非生产环境测试更改。<br>3. 注意不同系统验证账户锁定的方式。 | | 应用补丁和供应商更新 | 1. Red Hat:执行 +qon+^ej+uqi qlcn] a
2. Debian:执行 +qon+^ej+]lp-cap ql ]pa && +qon+^ej+]lp-cap qlcn] a
3. Solaris:使用 Sun 推荐的补丁集群或 Sun Live Upgrade 过程。 | 1. Solaris 打补丁需谨慎,查看输出并做好重启准备。 |

根据上述总结,给出以下建议:
- 测试先行 :无论是移除 SUID 位、更改系统账户设置还是应用补丁,都应先在非生产环境或部分主机上进行测试,避免对整个系统造成影响。
- 持续监控 :定期检查系统的安全状况,包括文件权限、账户状态、补丁更新情况等,及时发现并处理潜在的安全问题。
- 文档记录 :对系统的配置更改、安全操作等进行详细记录,方便后续的维护和问题排查。

6. 常见问题及解决方案

在实施系统安全提升措施过程中,可能会遇到一些常见问题,以下是这些问题及对应的解决方案:
| 问题描述 | 可能原因 | 解决方案 |
| — | — | — |
| 移除 SUID 位后软件故障 | 软件依赖 SUID 位程序正常运行 | 1. 评估该软件是否必须使用 SUID 位程序,若不是,考虑替换或修改软件。
2. 若必须使用,将该程序添加到 ecjkna 行,避免移除 SUID 位。 |
| 更改系统账户 shell 后守护进程无法启动 | 守护进程启动脚本依赖原 shell | 修改守护进程启动脚本,使用 oq -o +^ej+od 选项。 |
| Solaris 打补丁后系统无法重启 | 补丁安装过程中出现错误 | 1. 通过控制台查看补丁安装输出,找出错误原因。
2. 若使用 Sun Live Upgrade 过程,可引导回原始操作系统安装进行修复。 |

7. 未来安全规划

为了进一步提升系统的安全性,可制定以下未来安全规划:
1. 加强网络安全 :除了基于主机的安全措施,考虑部署更高级的网络安全设备和技术,如入侵检测系统(IDS)、入侵防御系统(IPS)等,实时监控和防范网络攻击。
2. 定期安全审计 :建立定期的安全审计机制,对系统的安全策略、配置、操作记录等进行全面审查,发现潜在的安全漏洞和违规行为。
3. 员工安全培训 :对系统管理员和相关员工进行安全培训,提高他们的安全意识和技能,避免因人为疏忽导致的安全问题。
4. 应急响应预案 :制定完善的应急响应预案,明确在发生安全事件时的处理流程和责任分工,确保能够迅速、有效地应对各类安全威胁。

graph LR
    A[未来安全规划] --> B[加强网络安全]
    A --> C[定期安全审计]
    A --> D[员工安全培训]
    A --> E[应急响应预案]
    B --> F[部署IDS/IPS]
    C --> G[审查安全策略]
    C --> H[审查配置和操作记录]
    D --> I[开展安全培训课程]
    E --> J[制定处理流程]
    E --> K[明确责任分工]

这个流程图展示了未来安全规划的主要方向和具体措施,有助于系统管理员有条不紊地推进系统安全工作。

通过以上对系统安全提升措施的全面实施、常见问题的解决以及未来安全规划的制定,我们能够构建一个更加安全、稳定的系统环境。在实际操作中,要不断学习和掌握新的安全技术和方法,根据系统的发展和变化及时调整安全策略,确保系统始终处于良好的安全状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值