第 04 天:堡垒守护者

LinuxBeginner
立即练习

介绍

欢迎来到 LabEx 公司的第四天,堡垒守护者!在你昨天出色地解决了「凤凰项目」(Project Phoenix)的关键问题后,公司的首席技术官(CTO)亲自指派你负责整个项目的安全工作。

「我们承担不起另一次安全事故的代价,」CTO 在早上的简报中解释道,「你的调查显示,我们之前的安全设置是不够的。Sarah Chen 和开发团队需要一个坚不可摧的环境,以便按时完成凤凰项目。」

最近的危机凸显了采取强有力安全措施的必要性。一名新的外包人员将加入团队以协助加速开发,你必须确保访问控制配置得完美无缺。你需要创建安全的文件系统、分配精确的所有权、设置细粒度的权限,并建立协作工作区,以保护 TechNova 的知识产权。

凤凰项目的成功——以及公司的未来——现在都取决于你今天构建的数字堡垒。让我们开始加固这个系统吧!

这是一个「挑战」(Challenge),它与「引导实验」(Guided Lab)不同,你需要尝试独立完成挑战任务,而不是跟随实验步骤学习。挑战通常具有一定的难度。如果你觉得困难,可以与 Labby 讨论或查看解决方案。历史数据显示,这是一个初学者级别的挑战,通过率为 96%。它在学习者中获得了 98% 的好评率。

为新项目创建安全文件

你的第一个任务是创建一个用于存储敏感项目密钥的文件。该文件必须严格保密,且只能由其所有者访问。

任务

  • ~/project/phoenix_project 目录内创建一个名为 project_keys.txt 的新空文件。
  • 设置该文件的权限,使得只有所有者拥有读取和写入权限,其他任何人(甚至是同一用户组中的用户)都没有任何访问权限。

要求

  • 文件名必须为 project_keys.txt
  • 文件路径必须为 ~/project/phoenix_project/project_keys.txt
  • 使用 chmod 命令的数字表示法来设置权限。

提示

  • 你可以使用 touch 命令创建一个空文件。
  • 记住权限的数值:读取 (4)、写入 (2) 和执行 (1)。
  • 最终权限应为 600(所有者可读写,组和其他人无权限)。

示例

完成此任务后,你应该看到类似以下的内容:

$ ls -l ~/project/phoenix_project/
-rw------- 1 labex labex 0 Sep 3 16:03 project_keys.txt

文件权限显示为 -rw-------,表示:

  • 所有者拥有读取和写入权限
  • 用户组没有任何权限
  • 其他人没有任何权限
✨ 查看解决方案并练习

分配项目资源的所有权

凤凰项目由 Sarah Chen 的开发团队领导,技术负责人 dev_lead 负责管理核心开发工作。该用户属于你本周一直在接触的 developers 用户组。你需要转移所有项目文件和目录的所有权,以确保正确的访问控制。

任务

  • ~/project/phoenix_project 目录及其所有内容的所有者更改为用户 dev_lead
  • ~/project/phoenix_project 目录及其所有内容的内容所属组更改为 developers 组。

要求

  • 所有者必须是 dev_lead
  • 所属组必须是 developers
  • 所有权更改必须递归应用于 ~/project/phoenix_project 目录下的所有文件和子目录。
  • 你必须使用 chown 命令。

提示

  • chown 命令可以使用 user:group 语法同时更改用户和组。
  • chown 命令中寻找一个允许递归操作文件和目录的选项。man chown 命令会很有帮助。
  • 由于这些文件目前归 root 所有,你需要使用 sudo 来更改所有权。

示例

完成此任务后,你应该看到类似以下的内容:

$ ls -ld ~/project/phoenix_project/
drwxrwxr-x 4 dev_lead developers 53 Sep 3 16:00 ~/project/phoenix_project/

$ ls -l ~/project/phoenix_project/
total 0
drwxrwxr-x 2 dev_lead developers 27 Sep 3 16:00 docs
-rw------- 1 dev_lead developers 0 Sep 3 16:03 project_keys.txt
drwxrwxr-x 2 dev_lead developers 6 Sep 3 16:00 src

所有文件和目录现在应归属于:

  • 用户:dev_lead
  • 用户组:developers
✨ 查看解决方案并练习

保护主项目目录

现在所有权已经正确,你需要为项目主目录 ~/project/phoenix_project 设置基础权限。策略如下:所有者应拥有完全控制权,用户组应能够列出文件并进入目录,而外部人员则完全没有访问权限。

任务

  • 设置 ~/project/phoenix_project 目录的权限。

要求

  • 所有者 (dev_lead) 必须拥有读取、写入和执行权限。
  • 用户组 (developers) 必须拥有读取和执行权限。
  • 其他人必须没有任何权限。
  • 使用 chmod 命令将这些权限应用于 ~/project/phoenix_project 目录本身(非递归)。
  • 由于该目录归 dev_lead 所有,你可能需要使用 sudo 来更改权限。

提示

  • 目录上的「执行」权限允许你 cd 进入该目录。
  • 计算所有者、用户组和其他人的数字权限值。
  • 所有者 (rwx) = 4+2+1 = 7
  • 用户组 (r-x) = 4+0+1 = 5
  • 其他人 (---) = 0+0+0 = 0

示例

完成此任务后,你应该看到类似以下的内容:

$ ls -ld ~/project/phoenix_project/
drwxr-x--- 4 dev_lead developers 53 Sep 3 16:00 ~/project/phoenix_project/

目录权限显示为 drwxr-x---,表示:

  • 所有者 (dev_lead) 拥有读取、写入和执行权限
  • 用户组 (developers) 拥有读取和执行权限
  • 其他人没有任何权限

这意味着:

  • dev_lead 可以完全访问该目录
  • developers 组成员可以列出内容并进入目录
  • 外部人员无法访问该目录
✨ 查看解决方案并练习

为开发团队设置协作权限

注意:请确保你已先完成步骤 2,该步骤已将所有项目目录(包括 src)的所有权设置为 dev_lead:developers。本步骤建立在这些所有权设置之上。

开发团队需要在 ~/project/phoenix_project/src 目录内进行高效协作。为了确保协作顺畅,在 src 内部创建的任何新文件或目录都应自动属于 developers 组,而不是创建该文件的用户的主组。

任务

  • ~/project/phoenix_project/src 目录上设置一个特殊权限,强制在该目录下创建的所有新文件和子目录自动继承 src 目录本身的所有组(即 developers)。

要求

  • 解决方案必须确保 ~/project/phoenix_project/src 中的新文件自动归 developers 组所有。
  • 你必须使用 chmod 命令来设置此特殊权限。
  • 你可能需要使用 sudo 来设置归其他用户所有的目录权限。

提示

  • 这种特殊权限被称为「设置组 ID」(set group ID)或 setgid 位。
  • 你可以使用符号表示法 (g+s) 或数字表示法来应用 setgid 位。
  • 在数字表示法中,setgid 位的值为 2。它被放置在标准三位权限数字之前(例如 2770)。

示例

完成此任务后,你应该看到类似以下的内容:

$ ls -ld ~/project/phoenix_project/src/
drwxrws--- 2 dev_lead developers 6 Sep 3 16:00 ~/project/phoenix_project/src/

用户组执行位上的 s 表示已设置 setgid 位且该组拥有执行权限。现在当你创建一个新文件时:

$ touch ~/project/phoenix_project/src/new_file.txt
$ ls -l ~/project/phoenix_project/src/new_file.txt
-rw-rw---- 1 dev_lead developers 0 Sep 3 16:05 new_file.txt

请注意,即使你以不同的用户身份登录,新文件也会自动属于 developers 组。这确保了开发团队内部的协作工作,同时保持了正确的组所有权。

权限显示:

  • 所有者 (dev_lead) 拥有读取和写入权限
  • 用户组 (developers) 拥有读取和写入权限
  • 其他人没有任何权限
  • 用户组执行位上的小写 s 表示已设置 setgid 位且该组拥有执行权限
✨ 查看解决方案并练习

总结

干得漂亮,堡垒守护者!你已经成功为凤凰项目构建了牢不可破的安全基础。CTO 和 Sarah Chen 对你全面的安全实施感到惊讶。项目目录现在是一座坚固的堡垒,既能保护 TechNova 的知识产权,又能实现无缝协作。

通过这次挑战,你掌握了关键的 Linux 安全技能:

  • 创建文件与基础权限:你通过精确的权限控制保护了敏感的项目密钥。
  • 所有权管理:你专业地将所有权分配给了 Sarah 的开发团队和技术领导层。
  • 目录安全:你在主项目基础设施的访问便利性与安全性之间取得了平衡。
  • 高级权限:你配置了 setgid 权限,以确保团队协作空间具有自动的组所有权继承功能。
  • 协作工作区:你配置了既能保持安全又能提高生产力的团队协作空间。

这些高级安全技能证明了你已经准备好承担高级系统管理员的职责。明天,你将作为「密钥保管人」迎接最后的挑战,通过控制用户对系统的访问来管理凤凰项目安全中的人为因素!