Linux 中的基础安全概念 (CIA 三元组)

CompTIABeginner
立即练习

介绍

在本实验中,你将获得信息安全基础原理的实践经验,即 CIA 三元组:机密性(Confidentiality)、完整性(Integrity)和可用性(Availability)。在 Linux 环境下工作,你将学习保护数据和确保系统可靠性的实用技能。本实验将指导你配置文件权限,通过加密哈希(cryptographic hashes)演示文件完整性,并模拟基础服务监控,以理解这些核心概念如何在实际场景中应用。

你将首先使用 chmod 命令来操作 Linux 文件权限,以强制执行对敏感文件的机密性和完整性,确保只有授权用户才能访问和修改它。接下来,你将通过生成 MD5 和 SHA256 哈希来探索文件完整性,创建基线,然后验证文件是否未被篡改。最后,你将模拟一个简单的服务,并使用基础监控命令来理解可用性概念以及如何检测服务中断。

配置 Linux 文件权限以实现机密性和完整性

在此步骤中,你将学习如何使用基本的 Linux 文件权限来强制执行信息安全的两个关键原则:保密性 (Confidentiality) 和完整性 (Integrity)。保密性确保数据仅对授权用户可访问,而完整性确保数据不会被未经授权地修改。你将创建一个文件,检查其默认权限,然后使用 chmod 命令来限制访问并防止修改。所有操作都将在你的主项目目录 ~/project 中执行。

现在,在 ~/project 目录中,创建一个代表敏感数据的示例文件。我们将使用 echo 命令将一些文本放入其中。

echo "Top Secret Details" > confidential_data.txt

让我们使用 ls -l 命令来验证文件是否已创建并查看其默认权限,该命令提供长列表格式。

ls -l confidential_data.txt

你将看到类似以下的输出。确切的时间和大小可能会有所不同。

-rw-rw-r-- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

让我们分解权限字符串 -rw-rw-r--

  • 第一个字符 - 表示它是一个常规文件。
  • 接下来的三个字符 rw-所有者(用户 labex)的权限。r 表示读取,w 表示写入。
  • 接下来的三个 rw- 是为(组 labex)设置的。该组可以读取和写入文件。
  • 最后三个 r-- 是为其他人(系统上的所有其他用户)设置的。他们也只能读取文件。

此默认设置违反了保密性,因为系统上的任何用户都可以读取我们的“Top Secret”文件。让我们通过更改权限来解决此问题,以便只有所有者可以读取和写入。我们将使用带有数字(八进制)代码的 chmod 命令:4 表示读取,2 表示写入,1 表示执行。要为所有者提供读/写访问权限(4+2=6),并移除组(0)和其他用户(0)的所有访问权限,我们使用代码 600

chmod 600 confidential_data.txt

再次检查权限:

ls -l confidential_data.txt

输出现在反映了新的、更安全的权限,强制执行了保密性。

-rw------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

接下来,让我们通过将文件设置为只读来保护文件的完整性,即使对所有者也是如此。这可以防止意外修改。我们将权限设置为 400,这意味着只有所有者具有只读权限,从而同时维护了保密性和完整性。

chmod 400 confidential_data.txt

现在,让我们尝试通过向文件追加新文本来修改它。

echo "This should not be added." >> confidential_data.txt

操作将失败,你将看到“Permission denied”(权限被拒绝)错误。这表明文件的完整性免受更改的保护。

zsh: permission denied: confidential_data.txt

最后,最后一次检查权限,以查看其只读状态。

ls -l confidential_data.txt
-r-------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

你已成功配置文件权限,以保护其保密性和完整性。

通过哈希(MD5/SHA256)演示文件完整性

在本步骤中,你将学习如何使用加密哈希来验证文件完整性。虽然文件权限可以阻止未经授权的用户修改文件,但它们无法防止授权用户意外更改或更复杂的攻击。哈希函数为文件创建一个唯一的数字指纹(一个固定长度的字符字符串)。即使文件中的一个比特发生变化,也会产生一个完全不同的哈希值,使其成为检测篡改的绝佳工具。我们将使用 sha256sum 命令,这是 Linux 中一个标准且安全的哈希工具。

首先,确保你在正确的目录中。如果你是接着上一步操作,你应该已经在 ~/project 目录中。

在上一步中,我们将 confidential_data.txt 设置为只读以保护其完整性。为了演示哈希的工作原理,我们首先需要将该文件对所有者重新设置为可写。我们将使用 chmod 命令为用户(u+w)重新授予写入权限。

chmod u+w confidential_data.txt
ls -l confidential_data.txt

此时权限应显示为 -rw-------,表明所有者可以再次写入该文件,同时保持其机密性。

-rw------- 1 labex labex 19 Jul 21 15:09 confidential_data.txt

现在,让我们为原始的、受信任的文件生成 SHA256 哈希。此哈希将作为我们进行完整性检查的基准。

sha256sum confidential_data.txt

该命令将输出一个长字符串,即哈希值,后面跟着文件名。

106b4d0169831f239fec7a53b072640a2c0b815e00b088bbe44e6689e92cb96d  confidential_data.txt

为了方便后续验证,通常会将此受信任的哈希值保存到一个单独的文件中。让我们将命令的输出重定向到一个名为 hashes.sha256 的新文件中。

sha256sum confidential_data.txt > hashes.sha256

你可以查看这个新文件的内容来确认哈希值已保存。

cat hashes.sha256
106b4d0169831f239fec7a53b072640a2c0b815e00b088bbe44e6689e92cb96d  confidential_data.txt

现在,让我们模拟一次未经授权的修改。我们将向敏感文件追加一行新文本。

echo "This is an unauthorized modification." >> confidential_data.txt

文件 confidential_data.txt 现在已被修改。为了验证其完整性,我们可以使用 sha256sum-c(或 --check)选项,指示它将文件当前计算出的哈希值与存储在 hashes.sha256 中的受信任值进行比较。

sha256sum -c hashes.sha256

由于文件内容已更改,新的哈希值将与存储的哈希值不匹配。该命令将报告失败,证明文件的完整性已被破坏。

confidential_data.txt: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match

这项强大的技术使你能够快速可靠地检查文件是否已从其原始状态发生更改。

模拟服务可用性和基本监控

在此步骤中,你将探索可用性(Availability)原则,这是 CIA 安全三元组的第三个组成部分。可用性确保系统和服务在需要时是运行正常且可访问的。你将模拟一个简单的 Web 服务,学习如何检查它是否正在运行,模拟服务故障,然后编写一个基本监控脚本来自动化可用性检查。

首先,请确保你位于 ~/project 目录中。

我们将使用 Python 内置的 Web 服务器来模拟一个正在运行的服务。此命令将在端口 8000 上启动一个 Web 服务器,并提供当前目录下的文件。末尾的 & 会将进程置于后台运行,以便你可以继续使用终端。

python3 -m http.server 8000 &

你将看到一条消息,指示进程已启动,以及其进程 ID(PID)。

[1] 12345

Enter 继续。

你的服务现在正在运行。检查服务是否运行的基本方法是查看其进程是否存在。我们可以使用 pgrep 命令按名称查找进程的 PID。

pgrep -f http.server

这应该会返回服务器进程的 PID,确认它正在内存中运行。

12345

然而,一个正在运行的进程并不能保证服务正常工作。更好的检查方法是尝试连接到它,就像用户会做的那样。我们将使用 curl 命令向我们的本地服务器发送请求。

curl http://localhost:8000/confidential_data.txt

由于服务可用,它将响应你在前几步创建的文件的内容。

Top Secret Details
This is an unauthorized modification.

现在,让我们模拟一次服务故障。我们将使用 kill 命令终止 Web 服务器进程。你需要使用之前找到的 PID。

## 将 12345 替换为 pgrep 命令的实际 PID
kill 12345

运行 kill 后,你可能会看到后台作业的“Terminated”(已终止)消息。现在,让我们再次尝试使用 curl 访问服务。

curl http://localhost:8000/confidential_data.txt

这次,命令将失败,因为服务不再运行且无法接受连接。这表明可用性不足。

curl: (7) Failed to connect to localhost port 8000 after 0 ms: Connection refused

最后,让我们创建一个简单的监控脚本来自动化此检查。使用 nano 创建一个名为 monitor.sh 的新文件。

nano monitor.sh

在编辑器中输入以下脚本。此脚本使用 curl 来检查服务。如果它收到成功的响应(200 OK),它会报告服务为“UP”(运行中);否则,它会报告“DOWN”(已停止)。

#!/bin/bash

## 检查 localhost:8000 上的服务是否响应
if curl -s --head http://localhost:8000 | grep "200 OK" > /dev/null; then
  echo "Service Status: UP"
else
  echo "Service Status: DOWN"
fi

保存文件并退出 nano,按 Ctrl+X,然后按 Y,最后按 Enter

使用 chmod 使脚本可执行:

chmod +x monitor.sh

现在,运行你的监控脚本。由于服务已停止,它应该报告“DOWN”。

./monitor.sh
Service Status: DOWN

你现在已经学会了如何启动服务、检查其可用性、模拟故障以及创建基本脚本来监控它。

总结

在此次实验中,你使用常见的 Linux 工具获得了 CIA(保密性、完整性、可用性)安全三元组基础原则的实践经验。你通过使用 chmod 命令操作 Linux 文件权限来学习强制执行保密性(Confidentiality),限制对敏感文件的访问,使其只有授权所有者才能查看其内容。此外,你还探索了完整性(Integrity),首先通过设置文件权限来防止未经授权的修改,然后使用 MD5 和 SHA256 等哈希算法生成唯一的校验和(checksum),使你能够验证文件是否未被篡改。

通过模拟服务的运行状态并执行基本监控以确认其可访问性,演示了可用性(Availability)的概念。通过这些实践步骤,你应用了基本的 Linux 命令来实际实现和理解信息安全的核心原则。