介绍
在本实验中,你将学习如何在 Linux 环境中管理特殊权限和 umask 设置,从而确保协作工作区的安全性。你将探索如何控制新创建文件的默认权限,以及如何利用特殊权限位(如粘滞位)来防止共享目录中的文件被其他用户误删。
你将首先准备一个模拟的共享环境,包括创建一个新的用户组和目录,并分配相应的属主和权限。接着,你将修改 umask 值以强制执行更严格的默认权限,并通过创建新文件来验证其效果。最后,你将在共享目录上设置粘滞位并确认其生效,确保在共享空间内只有文件所有者才能删除自己的文件。
准备环境并访问目录
在这一步中,你将为管理特殊文件权限准备环境。这包括创建一个专门的目录,用于模拟研究团队的共享工作区。你将创建一个新的用户组、一个目录,然后为其分配适当的属主和权限。所有操作都将在你的项目目录 ~/project 中进行。
首先,让我们创建一个名为 research 的新组。该组代表有权访问共享目录的团队成员。使用 sudo groupadd 命令来创建它。使用 sudo 是因为创建组属于行政管理任务。
sudo groupadd research
接下来,在 ~/project 目录下创建一个名为 RandD 的新目录。这将是我们本实验的主要工作目录。
mkdir ~/project/RandD
现在,将新创建的 RandD 目录的所属组更改为 research 组。chgrp 命令专门用于此目的。
sudo chgrp research ~/project/RandD
为了确保只有所有者(labex 用户)和 research 组的成员可以访问此目录,我们需要设置其权限。我们将使用带有数字代码 770 的 chmod 命令。此代码授予用户和组读取、写入和执行权限(rwx,即 4+2+1=7),而对其他用户不授予任何权限(---,即 0)。
chmod 770 ~/project/RandD
你可以使用 ls -ld 命令验证目录的权限和属主信息。-l 选项提供详细列表格式,-d 选项则仅列出目录本身,而不是其内容。
ls -ld ~/project/RandD
你应该会看到类似以下的输出,确认了权限(drwxrwx---)、所有者(labex)和所属组(research)。
drwxrwx--- 2 labex research 4096 Dec 12 10:30 /home/labex/project/RandD
最后,将当前位置切换到 RandD 目录。你将在接下来的步骤中在此执行任务。
cd ~/project/RandD
你现在已成功设置好工作环境。
使用 umask 027 限制默认文件权限
在这一步中,你将学习如何使用 umask 命令控制新创建文件的默认权限。当你创建一个文件时,系统会为其分配一组默认权限。通常这些默认值过于宽松,例如允许「其他」用户读取你的文件。在像 RandD 这样安全的目录中,我们需要对此进行限制。
umask(用户文件创建模式掩码)命令指定了在创建新文件或目录时,应从基础权限中移除哪些权限。
- 对于文件,基础权限是
666(rw-rw-rw-)。 - 对于目录,基础权限是
777(rwxrwxrwx)。
我们将把 umask 设置为 027。这个值告诉系统移除以下权限:
- 用户(所有者):
0- 不移除任何权限。 - 组:
2- 移除写入权限。 - 其他:
7(4+2+1) - 移除读取、写入和执行权限。
这意味着任何新创建的文件权限将为 666 - 027 = 640 (rw-r-----),任何新目录的权限将为 777 - 027 = 750 (rwxr-x---)。
首先,在终端提示符下输入 umask 027,更改当前终端会话的默认权限。请确保你仍处于 ~/project/RandD 目录中。
umask 027
接下来,通过单独输入该命令来验证 umask 的新值。
umask
命令应显示新的 umask 值。前导零表示掩码中不包含特殊权限(如你稍后将学到的粘滞位)。
027
你现在已成功更改了当前会话的默认文件创建权限。在下一步中,你将创建一个文件来观察新 umask 的效果。
创建文件并验证新的 umask 权限
在这一步中,你将通过创建一个文件来实践新的 umask 设置。这将演示你上一步配置的默认权限是如何自动应用的,从而保护你的新文档免受未经授权的访问。你应当仍处于 ~/project/RandD 目录中。
让我们使用 touch 命令创建一个名为 schedule.odt 的新空文件。touch 命令是创建空文件或更新现有文件时间戳的简便方法。
touch schedule.odt
文件创建后,你需要验证其权限。使用 ls -l 命令显示 schedule.odt 的详细信息。
ls -l schedule.odt
你将看到类似以下的输出。最重要的部分是第一列,它显示了文件的权限。
-rw-r----- 1 labex research 0 Dec 12 10:35 schedule.odt
让我们拆解权限字符串 -rw-r-----:
- 第一个字符
-表示这是一个普通文件。 - 接下来的三个字符
rw-是用户(所有者)的权限,即读取和写入。这对应数字值6。 - 再接下来的三个字符
r--是组的权限,即只读。这对应数字值4。 - 最后三个字符
---是其他用户的权限,意味着没有任何权限。这对应数字值0。
这些权限(640)是将 umask 值 027 应用于系统默认文件权限 666 的直接结果。正如我们预期的那样,umask 成功移除了组的写入权限以及其他用户的所有权限。
使用 chmod 1771 在目录上设置粘滞位
在这一步中,你将解决共享目录中的一个常见问题。目前,research 组的任何成员都可以删除 ~/project/RandD 目录下的任何文件,甚至是其他用户创建的文件。这是因为目录上的写入权限允许创建和删除文件。为了防止意外或恶意的删除行为,你将设置一种称为「粘滞位」(sticky bit)的特殊权限。
当粘滞位应用于目录时,它会修改这种行为。它确保目录中的文件只能由文件所有者、目录所有者或 root 用户删除或重命名。这对于像 RandD 这样的协作环境非常理想。
你将使用带有四位八进制数字的 chmod 命令来设置粘滞位。命令为 chmod 1771 RandD。
- 第一位数字
1代表粘滞位。 - 后三位数字
771设置标准权限:用户为rwx,组为rwx,其他用户为--x。
首先,你需要进入 RandD 的父目录才能修改其权限。由于你当前在 ~/project/RandD 中,请使用 cd .. 命令向上移动一级到 ~/project。
cd ..
现在,在 ~/project 目录中,对 RandD 目录应用粘滞位。
chmod 1771 RandD
粘滞位现在已在 RandD 目录上设置完成。在最后一步中,你将使用 ls -l 命令查看此特殊权限的显示方式并验证其效果。
使用 ls -l 验证粘滞位权限
在最后一步中,你将验证粘滞位是否已正确应用于 RandD 目录。ls -l 命令为粘滞位等特殊权限提供了视觉指示。你应当仍处于 ~/project 目录中。
在终端提示符下,输入 ls -ld RandD 命令以查看目录本身的权限。
ls -ld RandD
仔细检查输出。它看起来应该类似于:
drwxrwx--t 2 labex research 4096 Dec 12 10:45 RandD
关键的变化在于权限字符串:drwxrwx--t。
d表示这是一个目录。rwx显示用户(labex)拥有全部权限。- 第二个
rwx显示research组拥有全部权限。 - 最后一部分
--t是显示粘滞位的地方。t替换了原本属于「其他用户」的执行权限(x)。小写的t表示粘滞位和「其他用户」的执行权限都已设置。这证实了你的chmod 1771命令已成功执行。
恭喜!你已成功配置了一个共享目录,通过 umask 设置了安全的默认权限,并通过设置粘滞位保护了其内容免受未经授权的删除。
总结
在本实验中,你学习了如何为用户组准备一个安全的共享目录。这包括使用 groupadd 创建新组,创建目录,然后使用 chgrp 和 chmod 分配正确的组属主和限制性权限(770)。你还练习了通过设置特定的 umask 值(027)来操作新创建文件和目录的默认权限,并通过创建新文件并检查其权限来验证了效果。
此外,你还通过使用 chmod 1771 命令在共享目录上应用粘滞位,探索了特殊权限。你了解到粘滞位对于协作环境至关重要,因为它确保用户只能删除或重命名自己拥有的文件,从而防止他人作品被意外或恶意删除。最后,你通过使用 ls -l 并识别目录权限字符串中的 t,验证了粘滞位已正确应用。



