Linux 安全保障与漏洞测试全解析
1. Linux 防火墙规则管理
在 Linux 系统中, iptables 是一个强大的防火墙工具。不过,并非所有 iptables 命令都会在此详细讨论。你可以通过输入 man iptables 来查看命令摘要,也能访问 https://netfilter.org/projects/iptables/index.html 了解更多关于 netfilter 和 iptables 的信息。
使用 iptables 命令定义规则后,这些规则仅存储在内存中,系统重启后就会丢失。为了保存规则,可以使用 iptables-save 命令将规则存储到文件中,例如:
iptables-save > iptables.rules
以下是在 Fedora 系统上生成的 iptables.rules 文件示例:
# Generated by iptables-save v1.3.0 on Sun Dec 28 16:10:12 2019
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [6:636]
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT
-A INPUT -i ! lo -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Sun Dec 28 16:10:12 2019
这些规则对应以下用于配置过滤器的 iptables 命令:
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -i ! lo -j REJECT
iptables -A FORWARD -j REJECT
若要将保存的规则加载到 iptables 中,可使用以下命令:
iptables-restore < iptables.rules
2. 重要的安全文件
安全管理员需要了解并能够解释一些关键的安全文件,如下表所示:
| 文件 | 描述 |
| — | — |
| /etc/nologin | 若该文件存在,除 root 用户外,所有用户将被拒绝登录。在系统维护期间,可使用此文件禁止用户登录,删除该文件则恢复所有用户的登录权限。可以使用任何文本编辑器创建该文件,也可使用 nologin 命令创建。 |
| /etc/passwd | 该文件包含大量用户账户信息。 |
| /etc/shadow | 当开启密码影子功能(通常默认开启)时,密码哈希值会存储在该文件中,相比 /etc/passwd 更安全。 |
| /etc/xinetd.d/* | 该目录可用于存储 xinetd 服务器守护进程的配置文件。 |
| /etc/xinetd.conf | 这是 xinetd 服务器守护进程的主配置文件。 |
| /etc/inetd.conf | 这是 inetd 互联网守护进程的主配置文件,不过在大多数发行版中, inetd 已被 xinetd 取代。 |
| /etc/inittab | 该文件是系统启动和运行状态更改时用于确定启动和停止内容的初始启动表。 |
| /etc/init.d/* | 该目录可包含在运行状态/级别更改期间使用的配置文件,并由 inittab 文件引用。 |
| /etc/hosts.allow | 若该文件存在,它会明确列出允许与本系统进行网络连接的主机。若文件不存在,默认允许所有主机进行网络连接。 |
| /etc/hosts.deny | 若该文件存在,它会明确列出不允许与本系统进行网络连接的主机。若文件不存在,默认允许所有主机进行网络连接。 |
3. 计算机安全审计概述
计算机安全审计是对计算机安全的独立评估。当有人对组织进行计算机安全审计时,通常会关注两个方面:
- 非技术方面 :独立验证组织是否遵守现有的计算机安全政策和程序。
- 技术方面 :独立测试安全控制(用于保护系统的硬件和软件机制)的有效性。
安全审计的好处包括:
- 定期进行风险评估,考虑系统和数据面临的内部和外部威胁。
- 定期测试安全政策、安全控制和技术的有效性。
- 识别系统安全中的重大缺陷,以便知道需要修复的内容。
- 在自我评估的情况下,为组织可能面临的年度独立安全测试做准备。
4. 安全审计的非技术和技术方面
4.1 非技术方面
计算机安全审计的非技术方面侧重于组织的整体安全框架。审计会检查组织在计算机安全方面的政策、计划和程序的制定和实施情况,需要验证的项目如下:
- 定期进行风险评估。
- 存在全组织范围的安全计划。
- 有安全计划管理结构。
- 明确分配计算机安全责任。
- 有有效的与安全相关的人员政策。
- 监控安全计划的有效性,并在需要时进行更改。
对于小型组织或家用 PC,要求有文档化的计划和程序可能不现实,在这种情况下,只需确保有一些技术控制措施来保护系统和网络连接即可。
4.2 技术方面
计算机安全审计的技术方面侧重于测试保护主机和网络的技术控制措施,包括:
- 主机安全 :检查操作系统补丁是否全部安装、文件权限是否正确设置、用户账户是否受到保护、文件更改是否被监控以及日志文件是否被监控等。
- 网络安全 :检查是否关闭不必要的互联网服务、是否安装防火墙、远程登录是否使用 Secure Shell (SSH) 等工具进行保护,以及是否使用传输控制协议 (TCP) 包装器访问控制。
通常,安全专家会使用自动化工具对单个主机和整个网络进行这两项安全审查。
5. 安全测试方法
计算机安全审计的关键要素是安全测试,用于检查保护主机和网络的技术机制。安全测试方法遵循以下高级步骤:
graph LR
A[评估组织的网络、主机、网络设备和互联网连接] --> B{是否有多个主机和网络连接}
B -- 是 --> C[确定需要测试的重要主机和网络设备]
B -- 否 --> D[测试单个主机]
C --> D
D --> E[测试网络]
E --> F[分析主机和网络测试结果,确定漏洞和风险]
- 评估组织资源 :对组织的网络、主机、网络设备(如路由器、交换机、防火墙等)和互联网连接进行盘点。
- 确定测试对象 :如果存在多个主机和网络连接,根据主机运行的应用程序确定需要测试的重要主机和网络设备。例如,运行企业数据库的主机比桌面系统主机更重要。
- 测试单个主机 :通常以系统管理员身份登录,检查主机安全的各个方面,从密码到系统日志文件。
- 测试网络 :通常从互联网上的另一个系统尝试突破网络防御。如果网络有防火墙,检查防火墙配置是否正确。
- 分析测试结果 :分析主机和网络测试的结果,确定漏洞和风险。
每种类型的测试(主机和网络)都侧重于计算机安全的三个方面:
- 预防 :包括有助于防止系统和网络受到攻击的机制(非技术和技术)。
- 检测 :指监控日志文件、检查文件完整性和使用入侵检测系统等技术,用于检测有人试图闯入(或已经闯入)系统的情况。
- 响应 :包括在计算机安全事件发生后向当局报告事件和从备份中恢复重要文件等任务的步骤。
6. 常见计算机漏洞及资源
6.1 常见漏洞
在考虑预防措施之前,需要了解常见的安全漏洞,以下是一些适用于 Linux 的常见 Unix 和跨平台漏洞:
| 漏洞类型 | 描述 |
| — | — |
| BIND DNS | Berkeley Internet Name Domain (BIND) 是实现域名系统 (DNS) 的软件包,某些版本存在漏洞。 |
| Apache Web 服务器 | 某些 Apache Web 服务器模块(如 mod_ssl )存在已知漏洞,与 Web 服务器一起使用的通用网关接口 (CGI) 程序中的任何漏洞都可能让攻击者获得系统访问权限。 |
| 身份验证 | 用户账户有时没有密码或使用容易被密码破解程序破解的弱密码。 |
| CVS、Subversion | Concurrent Versions System (CVS) 和 Subversion 是 Linux 系统中常用的版本控制系统,这些系统存在漏洞,攻击者可能利用这些漏洞在系统上执行任意代码。 |
| sendmail | sendmail 是一个复杂的程序,用于在系统之间传输邮件消息,某些版本存在漏洞。 |
| SNMP | 简单网络管理协议 (SNMP) 用于远程监控和管理各种网络连接系统,但缺乏良好的访问控制,攻击者可能能够重新配置或关闭运行 SNMP 的系统。 |
| Open Secure Sockets Layer (OpenSSL) | 许多应用程序(如 Apache Web 服务器)使用 OpenSSL 为网络连接提供加密安全,但某些版本存在已知漏洞,可能被利用。 |
| 网络文件系统 (NFS) 和网络信息服务 (NIS) | NFS 和 NIS 存在许多安全问题,如缓冲区溢出、可能的拒绝服务攻击和弱身份验证,并且经常配置错误,可能允许本地和远程用户利用安全漏洞。 |
| 数据库 | 如 MySQL 和 PostgreSQL 等数据库是复杂的应用程序,难以正确配置和保护,这些数据库的许多功能可能被滥用或利用,从而危及数据的机密性、可用性和完整性。 |
| Linux 内核 | Linux 内核容易受到许多漏洞的影响,如拒绝服务、执行任意代码和获得系统的根级访问权限。 |
6.2 在线资源
有几个在线资源可用于识别和分类计算机安全漏洞:
- SANS 研究所 :每半周发布一份关于过去一周计算机安全领域最重要新闻文章的高级执行摘要,你可以在 www.sans.org/newsletters/newsbites/?msc=cishp 查看过往文章并订阅新文章。
- CVE (Common Vulnerabilities and Exposures) :是一个标准化的漏洞名称列表,更多信息可访问 www.cve.org ,使用 CVE 名称描述漏洞是常见做法。
- 国家漏洞数据库 :是一个可搜索的计算机漏洞信息索引,由美国国家标准与技术研究院 (NIST) 发布,可在 https://nvd.nist.gov 找到该数据库。
7. 主机安全审查
在审查主机安全时,应重点评估以下几个方面的安全机制:
7.1 预防措施
- 安装操作系统更新 :Linux 发行版会迅速发布更新,当发现安全漏洞时,会立即发布更新修复问题。许多发行版提供在线更新功能,可保持系统最新。
- 设置安全密码 :确保用户账户使用强密码,避免使用容易被破解的密码。
- 改善文件权限 :保护重要系统文件,设置适当的文件所有权和权限。
- 为引导加载程序设置密码 :增强系统启动的安全性。
- 使用加密 :对敏感数据进行加密,防止数据泄露。
7.2 检测措施
- 捕获日志消息 :监控系统日志文件,及时发现异常活动。
- 使用 Tripwire 检查文件完整性 :Tripwire 是一个可以检测系统文件更改的工具,虽然它最初是开源的,但现在已不再是,不过你仍然可以搜索并下载原始版本。
7.3 响应措施
- 定期备份 :定期备份重要文件,以便在发生安全事件时能够恢复数据。
- 制定事件响应程序 :在发生计算机安全事件时,有明确的步骤来报告事件和恢复系统。
7.4 操作系统更新
Linux 发行版会快速发布更新,当发现安全漏洞时,会立即发布更新修复问题。许多发行版提供在线更新功能,可保持系统最新。更新操作系统的具体步骤取决于发行版。
7.5 文件权限
保护重要系统文件,设置适当的文件所有权和权限的关键步骤如下:
- 确定敏感文件 :找出包含敏感信息的文件,并了解其敏感原因。有些文件可能包含与工作或业务相关的敏感数据,而许多其他文件则因为控制 Linux 系统配置而敏感。
- 维护授权用户列表 :维护一份当前授权用户的列表,以及他们在系统上被授权执行的操作。
- 设置访问权限 :设置密码、用户组、文件所有权和文件权限,只允许授权用户访问文件。
以下是一些重要系统文件及其权限:
| 文件路径名 | 权限 | 描述 |
| — | — | — |
| /boot/grub/menu.lst | 600 | GRUB 引导加载程序菜单文件 |
| /etc/cron.allow | 400 | 允许使用 cron 提交定期作业的用户列表 |
| /etc/cron.deny | 400 | 禁止使用 cron 提交定期作业的用户列表 |
| /etc/crontab | 644 | 系统范围的定期作业 |
| /etc/hosts.allow | 644 | 允许使用 TCP 包装器启动的互联网服务的主机列表 |
| /etc/hosts.deny | 644 | 禁止访问使用 TCP 包装器启动的互联网服务的主机列表 |
| /etc/logrotate.conf | 644 | 控制日志文件轮转的文件 |
| /etc/pam.d | 755 | 可插拔认证模块 (PAMs) 的配置文件目录 |
| /etc/passwd | 644 | 包含用户账户信息但不包含密码的旧样式密码文件 |
| /etc/rc.d | 755 | 系统启动脚本目录 |
| /etc/securetty | 600 | root 用户可以登录的 TTY 接口(终端) |
| /etc/security | 755 | 控制系统访问的策略文件 |
| /etc/shadow | 400 | 包含加密密码和密码过期信息的文件 |
| /etc/shutdown.allow | 400 | 可以通过按 Ctrl+Alt+Delete 关闭或重启系统的用户 |
| /etc/ssh | 755 | SSH 配置文件目录 |
| /etc/sysconfig | 755 | 系统配置文件 |
| /etc/sysctl.conf | 644 | 内核配置参数 |
| /etc/syslog.conf | 644 | 记录消息的 syslogd 服务器的配置文件 |
此外,还需要检查具有 setuid 权限的可执行程序文件。如果一个程序具有 setuid 权限且由 root 拥有,那么无论谁运行该程序,它都会以 root 权限运行。可以使用以下 find 命令查找所有 setuid 程序:
find / -perm /4000 -print
你可能希望将输出保存到文件中(在命令后追加文件名),然后检查文件中是否有异常的 setuid 程序,例如用户主目录中的 setuid 程序就比较异常。
7.6 密码安全
确保密码、用户组和影子密码文件受到保护,特别是影子密码文件必须受到写保护,并且只能由 root 用户读取。以下是密码文件的所有权和权限建议:
| 文件路径名 | 所有权 | 权限 |
| — | — | — |
| /etc/group | root.root | 644 |
| /etc/passwd | root.root | 644 |
| /etc/shadow | root.root | 400 |
通过以上对 Linux 安全保障和漏洞测试的全面介绍,你可以更好地保护 Linux 系统和网络的安全。在实际操作中,应根据具体情况采取相应的安全措施,并定期进行安全审计和测试,以确保系统的安全性。
8. 网络安全审查
网络安全审查是计算机安全审计的重要组成部分,主要关注网络层面的安全防护,确保网络免受各种潜在威胁。以下将详细介绍网络安全审查的关键要点。
8.1 关闭不必要的互联网服务
不必要的互联网服务会增加系统的安全风险,因此需要关闭这些服务。可以通过以下步骤进行操作:
1. 查看当前运行的服务 :使用 netstat -tuln 命令查看当前系统中正在监听的网络端口和对应的服务。
2. 确定不必要的服务 :根据系统的实际需求,判断哪些服务是不必要的。例如,如果系统不需要运行 FTP 服务,那么就可以关闭它。
3. 停止并禁用服务 :使用 systemctl stop <service_name> 命令停止服务,使用 systemctl disable <service_name> 命令禁用服务,使其在系统重启后不再自动启动。
8.2 安装和配置防火墙
防火墙是网络安全的重要防线,可以阻止未经授权的网络访问。常见的 Linux 防火墙有 iptables 和 firewalld 。以下以 iptables 为例,介绍防火墙的配置步骤:
1. 定义规则 :使用 iptables 命令定义防火墙规则。例如,允许本地网络访问,拒绝其他所有外部访问:
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -j DROP
- 保存规则 :使用
iptables-save > iptables.rules命令将规则保存到文件中。 - 加载规则 :在系统启动时,使用
iptables-restore < iptables.rules命令加载保存的规则。
8.3 保护远程登录
远程登录是网络安全的一个重要环节,需要采取措施确保其安全性。常见的方法是使用 Secure Shell (SSH)。以下是保护 SSH 登录的建议:
- 更改默认端口 :SSH 的默认端口是 22,攻击者通常会扫描这个端口。可以通过修改 /etc/ssh/sshd_config 文件中的 Port 参数,将 SSH 端口更改为其他端口,增加安全性。
- 使用密钥认证 :禁用密码认证,使用 SSH 密钥对进行认证。生成密钥对后,将公钥添加到服务器的 ~/.ssh/authorized_keys 文件中。
- 限制登录用户 :在 /etc/ssh/sshd_config 文件中,使用 AllowUsers 或 DenyUsers 参数限制允许或禁止登录的用户。
8.4 使用 TCP 包装器访问控制
TCP 包装器可以对使用 TCP 协议的服务进行访问控制。可以通过编辑 /etc/hosts.allow 和 /etc/hosts.deny 文件来配置访问规则。例如,允许特定主机访问 SSH 服务:
# /etc/hosts.allow
sshd: 192.168.0.0/24
# /etc/hosts.deny
sshd: ALL
9. 漏洞测试工具
为了更有效地进行安全审计和漏洞测试,可以使用一些免费的工具和资源。以下是一些常见的漏洞测试工具:
9.1 Nmap
Nmap 是一个强大的网络扫描工具,可以用于发现网络中的主机和开放端口,以及识别主机上运行的服务和应用程序。使用方法如下:
- 扫描主机 :使用 nmap <target_ip> 命令扫描指定 IP 地址的主机,查看其开放的端口和运行的服务。
- 全面扫描 :使用 nmap -sV -O <target_ip> 命令进行全面扫描,识别服务版本和操作系统类型。
9.2 OpenVAS
OpenVAS 是一个开源的漏洞扫描器,可以对网络中的主机和系统进行全面的漏洞扫描。使用步骤如下:
1. 安装 OpenVAS :根据不同的 Linux 发行版,使用相应的包管理工具安装 OpenVAS。
2. 配置和启动服务 :启动 OpenVAS 服务,并进行必要的配置,如更新漏洞库。
3. 创建扫描任务 :在 OpenVAS 界面中创建扫描任务,指定扫描目标和扫描选项。
4. 执行扫描 :启动扫描任务,等待扫描结果。
9.3 Metasploit
Metasploit 是一个强大的渗透测试框架,可以用于测试系统的漏洞和安全性。使用方法如下:
1. 启动 Metasploit :在终端中输入 msfconsole 命令启动 Metasploit 控制台。
2. 搜索漏洞模块 :使用 search 命令搜索与目标系统相关的漏洞模块。
3. 选择和配置模块 :选择合适的漏洞模块,并使用 use 命令加载模块,然后使用 set 命令配置模块的参数。
4. 执行攻击 :使用 exploit 命令执行攻击,测试系统的漏洞。
10. 安全审计的最佳实践
为了确保安全审计的有效性,需要遵循一些最佳实践:
10.1 定期进行审计
定期进行安全审计可以及时发现系统中的安全漏洞和问题,并采取相应的措施进行修复。建议至少每季度进行一次全面的安全审计。
10.2 制定审计计划
在进行安全审计之前,需要制定详细的审计计划,明确审计的目标、范围、方法和时间安排。审计计划应该根据组织的实际情况进行定制。
10.3 培训审计人员
安全审计需要专业的知识和技能,因此需要对审计人员进行培训,使其熟悉安全审计的流程和方法,掌握相关的工具和技术。
10.4 记录审计结果
在审计过程中,需要详细记录审计的结果,包括发现的漏洞、问题和建议。审计记录可以作为后续整改和跟踪的依据。
10.5 持续改进
安全审计不是一次性的工作,而是一个持续的过程。需要根据审计结果,不断改进系统的安全策略和措施,提高系统的安全性。
11. 总结
Linux 系统的安全保障是一个复杂而重要的任务,涉及到多个方面的知识和技术。通过对防火墙规则管理、重要安全文件的了解、安全审计的实施、主机和网络安全审查以及漏洞测试工具的使用,可以有效地保护 Linux 系统和网络的安全。
在实际操作中,需要根据组织的实际情况和需求,制定合理的安全策略和措施,并定期进行安全审计和测试,及时发现和修复安全漏洞。同时,要不断学习和掌握新的安全技术和方法,以应对不断变化的安全威胁。
通过遵循安全审计的最佳实践,持续改进系统的安全性能,可以确保 Linux 系统在安全可靠的环境中运行,为组织的业务发展提供有力的支持。
超级会员免费看

被折叠的 条评论
为什么被折叠?



