介绍
Linux 权限决定了谁可以读取、修改或执行文件。RHCSA 任务通常要求你检查权限字符串、设置数字和符号模式、更改所有权,并配置目录以确保文件可供目标组使用。
在本实验中,你将直接在 /home/labex/project 目录下工作。你将检查准备好的文件,使用 chmod 应用标准文件模式,安全地启用脚本,获取 root 所有权文件的所有权,并配置一个 setgid 共享目录。
检查文件权限字段
在此步骤中,你将在更改权限之前先进行检查。ls -l 输出的第一列显示了文件类型和权限;所有者和所属组字段显示了谁拥有该文件的控制权。
进入标准的 LabEx 项目目录。
cd /home/labex/project
列出准备好的实验目录树。
ls -l permissions-lab
检查准备好的配置文件。在长格式列表中可以看到模式、所有者和所属组。
ls -l permissions-lab/configs
使用 stat 命令以简洁的方式查看单个文件。%a 打印数字模式,%U 打印所有者名称,%G 打印所属组名称。
stat -c '%n %a %U %G' permissions-lab/configs/private.conf
检查由 root 拥有的移交文件。注意,当前的所有者和所属组均为 root。
ls -l permissions-lab/shared/handoff.txt
使用数字 chmod 设置文件模式
在此步骤中,你将使用数字模式配合 chmod 命令。这三位数字分别描述了用户、组和其他人的权限。例如,600 表示仅所有者可读写,644 表示所有者可读写,而组和其他人仅可读取。
从项目目录开始。
cd /home/labex/project
将 private.conf 设置为仅所有者可读写。这对于包含敏感设置的文件非常适用。
chmod 600 permissions-lab/configs/private.conf
将 readme.txt 设置为所有人可读,但仅所有者可写。
chmod 644 permissions-lab/configs/readme.txt
使用 stat 检查模式。
stat -c '%n %a' permissions-lab/configs/private.conf permissions-lab/configs/readme.txt
你应该能看到 private.conf 为 600,readme.txt 为 644。
使用符号 chmod 启用脚本执行
在此步骤中,你将使用符号权限。符号模式允许你添加或删除特定权限,而无需重写整个数字模式。
从项目目录开始。
cd /home/labex/project
在更改脚本之前先进行检查。它应该是可读的,但不可执行。
ls -l permissions-lab/scripts/check-inventory.sh
为所有者和所属组添加执行权限。在 u+x,g+x 中,u 代表用户,g 代表组,+x 代表添加执行权限。
chmod u+x,g+x permissions-lab/scripts/check-inventory.sh
通过路径运行该脚本。
permissions-lab/scripts/check-inventory.sh
预期输出:
inventory check ok
检查最终模式。它现在应该包含用户和组的执行位。
stat -c '%n %a' permissions-lab/scripts/check-inventory.sh
更改移交文件的所有权
在此步骤中,你将使用 sudo chown 获取一个由 root 拥有的文件的所有权。更改所有权通常需要管理权限,因此对于此练习文件,使用 sudo 是合适的。
从项目目录开始。
cd /home/labex/project
检查当前的所有者和所属组。该文件初始状态为 root:root。
stat -c '%n %U:%G %a' permissions-lab/shared/handoff.txt
将所有者和所属组更改为 labex:labex。user:group 格式可以在一条命令中同时设置这两个字段。
sudo chown labex:labex permissions-lab/shared/handoff.txt
将文件限制为所有者可读写,组可读取。
chmod 640 permissions-lab/shared/handoff.txt
既然 labex 现在拥有该文件,追加一行操作记录。
printf 'Handled by labex after ownership update.\n' >> permissions-lab/shared/handoff.txt
检查最终的所有者、所属组、模式和内容。
stat -c '%n %U:%G %a' permissions-lab/shared/handoff.txt
cat permissions-lab/shared/handoff.txt
配置带有 setgid 的共享目录
在此步骤中,你将配置一个共享目录。目录需要执行权限才能进入和搜索。目录上的 setgid 位会使新文件继承目录的所属组,这有助于团队保持共享内容所属组的一致性。
从项目目录开始。
cd /home/labex/project
检查当前目录模式。
stat -c '%n %a %U:%G' permissions-lab/teamdrop
将目录模式设置为 2775。开头的 2 启用 setgid,775 为所有者和所属组提供完全访问权限,并为其他人提供读取/执行权限。
chmod 2775 permissions-lab/teamdrop
在共享目录内创建一个文件。
printf 'team handoff ready\n' > permissions-lab/teamdrop/status.txt
设置文件模式,以便所有者和所属组可以读写它。
chmod 664 permissions-lab/teamdrop/status.txt
检查目录和新文件。
stat -c '%n %a %U:%G' permissions-lab/teamdrop permissions-lab/teamdrop/status.txt
cat permissions-lab/teamdrop/status.txt
总结
你练习了为 RHCSA 准备的标准 Linux 权限和所有权操作。你检查了权限字段,应用了数字文件模式,使用符号 chmod 启用了脚本执行,通过 sudo chown 更改了所有权,设置了安全的文件模式,并配置了 setgid 共享目录,确保新文件能够继承预期的所属组。



