简介
欢迎来到 LabEx 公司的第 4 天,堡垒守护者!继昨天你出色地解决了「凤凰项目」(Project Phoenix)的关键问题后,公司首席技术官(CTO)亲自指派你负责整个项目的安全工作。
「我们承担不起另一次安全事故了,」CTO 在晨会上解释道,「你的调查显示我们之前的安全设置不够完善。莎拉·陈(Sarah Chen)和开发团队需要一个坚不可摧的环境,以按计划完成凤凰项目。」
最近的危机凸显了建立强大安全措施的必要性。一位新承包商即将加入团队以加快开发进度,你必须确保访问控制配置得当。你需要创建安全的文件系统,分配精确的所有权,设置细粒度的权限,并建立能够保护 TechNova 知识产权的协作工作区。
凤凰项目的成功——以及公司的未来——现在取决于你今天构建的数字堡垒。让我们开始加固系统吧!
为新项目创建安全文件
你的第一个任务是创建一个用于存储敏感项目密钥的文件。该文件必须严格保密,且仅允许其所有者访问。
任务
- 在
~/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-------,表示:
- 所有者拥有读写权限
- 组没有任何权限
- 其他人没有任何权限
分配项目资源的所有权
凤凰项目由莎拉·陈的开发团队领导,技术负责人 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 组。此特殊权限仅影响组所有者。用户所有者仍将是创建文件的账户,文件的读/写权限仍取决于该用户的 umask。
任务
- 在
~/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-r-- 1 labex developers 0 Apr 15 18:28 /home/labex/project/phoenix_project/src/new_file.txt
请注意,新文件自动属于 developers 组,即使你是以其他用户身份登录的。文件所有者仍然是创建文件的用户,而组所有者则从 src 目录继承。这确保了开发团队内部的协作,同时保持了正确的组所有权。
权限显示:
- 所有者(
dev_lead)拥有读和写权限 - 组(
developers)拥有读和写权限 - 其他人没有任何权限
- 组执行位置上的小写
s表示已设置 setgid 位,且组拥有执行权限
总结
出色的工作,堡垒守护者!你已经成功为凤凰项目构建了坚不可摧的安全基础。CTO 和莎拉·陈对你全面的安全实施感到惊叹。项目目录现在已成为一座堡垒,既能保护 TechNova 的知识产权,又能实现无缝协作。
在整个挑战中,你掌握了关键的 Linux 安全技能:
- 创建文件与基础权限:你通过精确的权限控制保护了敏感的项目密钥。
- 所有权管理:你专业地将所有权分配给了莎拉的开发团队和技术领导层。
- 目录安全:你平衡了项目主基础设施的访问权限与安全性。
- 高级权限:你配置了 setgid 权限,以确保协作团队工作区能够自动继承组所有权。
- 协作工作区:你配置了既能保持安全又能提高生产力的团队协作空间。
这些高级安全技能证明了你已具备胜任高级系统管理员职责的能力。明天,你将作为「密钥守护者」迎接最终挑战,通过控制用户对系统的访问权限,来管理凤凰项目安全中的人为因素!



