介绍
Linux 文件权限是一项基础安全功能,用于控制不同用户对文件和目录的访问、修改和执行权限。理解并有效管理这些权限对于维护系统安全和合理共享资源至关重要。
在这个实验中,你将学习如何使用 chmod 命令查看、设置和修改文件权限。chmod 命令允许管理员控制哪些用户可以读取、写入或执行特定文件,确保敏感数据得到保护,同时让授权用户能够访问必要的资源。
完成这个实验后,你将能够创建具有特定权限的文件、修改现有文件的权限,并分配基于组的访问控制——这些技能对于任何 Linux 系统管理员或用户来说都是至关重要的。
理解 Linux 文件权限
Linux 实现了一个权限系统,允许对谁可以访问文件和目录以及他们可以执行的操作进行细粒度控制。在这一步中,你将了解 Linux 权限的工作原理以及如何查看它们。
首先,导航到你将在本实验中执行所有操作的工作目录:
cd ~/project
让我们创建一个示例文件来检查其权限:
touch sample_file.txt
要查看此文件的权限,请使用带有 -l 选项的 ls 命令:
ls -l sample_file.txt
你应该会看到类似以下的输出:
-rw-rw-r-- 1 labex labex 0 Oct 25 12:34 sample_file.txt
让我们来详细分析这个输出:
第一个字符 (
-) 表示文件类型。短横线 (-) 代表普通文件,而d则表示目录。接下来的九个字符以三个一组的形式表示文件权限:
- 前三个字符 (
rw-) 显示文件所有者的权限 - 接下来的三个 (
rw-) 显示文件所属组的权限 - 最后三个 (
r--) 显示其他所有用户的权限
- 前三个字符 (
在每组中,三个位置分别代表:
r表示读取权限w表示写入权限x表示执行权限-表示未授予该权限
权限后面是其他详细信息,如链接数、所有者名称、组名称、文件大小、最后修改日期/时间和文件名。
Linux 权限位也可以用数字表示:
- 读取 (
r) = 4 - 写入 (
w) = 2 - 执行 (
x) = 1
通过将这些值相加,你可以将任何权限组合表示为一个数字:
rwx= 4 + 2 + 1 = 7rw-= 4 + 2 + 0 = 6r-x= 4 + 0 + 1 = 5r--= 4 + 0 + 0 = 4
当我们在后续步骤中使用数字模式的 chmod 命令时,这一点就变得很重要了。
创建具有特定权限的文件
在这一步中,你将创建一个新文件,并将其初始权限设置为仅允许所有者访问。当创建包含敏感信息、不应被其他用户访问的文件时,这非常有用。
首先,创建一个名为 secure_file.txt 的新文件:
touch secure_file.txt
现在,让我们向文件中添加一些内容:
echo "This file contains secure information." > secure_file.txt
默认情况下,大多数 Linux 系统创建的文件权限允许所有者和所属组进行读写操作,而其他用户只能读取。让我们检查一下当前的权限:
ls -l secure_file.txt
你应该会看到类似以下的输出:
-rw-rw-r-- 1 labex labex 37 Oct 25 12:40 secure_file.txt
对于包含敏感信息的文件,我们希望将访问权限限制为仅所有者。我们将使用数字模式的 chmod 命令将权限设置为 600,这意味着:
- 所有者:可读可写 (
6=4+2) - 所属组:无权限 (
0) - 其他用户:无权限 (
0)
运行以下命令来更改权限:
chmod 600 secure_file.txt
现在再次检查权限:
ls -l secure_file.txt
输出现在应该显示:
-rw------- 1 labex labex 37 Oct 25 12:40 secure_file.txt
注意权限是如何改变的——现在只有所有者(labex 用户)具有读写权限,而组成员和其他用户无法访问此文件。
让我们尝试创建另一个文件,但这次我们将使用不同的方法在创建时设置权限。
首先,创建一个名为 public_file.txt 的新文件并添加内容:
echo "This file is readable by everyone." > public_file.txt
现在,让这个文件对所有人可读,但仅允许所有者写入:
chmod 644 public_file.txt
检查权限:
ls -l public_file.txt
你应该会看到:
-rw-r--r-- 1 labex labex 33 Oct 25 12:45 public_file.txt
这种权限设置 (644) 通常用于公共文件,即每个人都应该能够读取,但只有所有者可以修改。
使用符号模式进行 chmod 操作
在上一步中,你使用数字模式来设置权限。现在,让我们来探索符号模式,它提供了一种更直观的方式来修改权限。
符号模式使用字母和符号来表示用户和权限:
u- 用户(所有者)g- 组o- 其他用户(除所有者和组成员之外的所有人)a- 所有用户(等同于 ugo)
以及权限符号:
r- 读取w- 写入x- 执行
让我们创建一个脚本文件来进行练习:
touch my_script.sh
向脚本中添加一个简单的命令:
echo '#!/bin/bash' > my_script.sh
echo 'echo "Hello from the script!"' >> my_script.sh
检查当前的权限:
ls -l my_script.sh
你应该会看到该脚本不可执行:
-rw-rw-r-- 1 labex labex 44 Oct 25 12:50 my_script.sh
要使脚本对所有者可执行,请使用以下命令:
chmod u+x my_script.sh
这会为用户/所有者 (u) 添加 (+) 执行 (x) 权限。
再次检查权限:
ls -l my_script.sh
现在你应该会看到:
-rwxrw-r-- 1 labex labex 44 Oct 25 12:50 my_script.sh
现在,让脚本对所有用户都可执行:
chmod a+x my_script.sh
这会为所有用户(所有者、组和其他用户)添加执行权限。
再次检查权限:
ls -l my_script.sh
你应该会看到:
-rwxrwxr-x 1 labex labex 44 Oct 25 12:50 my_script.sh
让我们运行这个脚本:
./my_script.sh
你应该会看到:
Hello from the script!
你还可以使用 - 运算符来移除权限。例如,要移除组和其他用户的写入权限:
chmod go-w my_script.sh
检查权限:
ls -l my_script.sh
你应该会看到:
-rwxr-xr-x 1 labex labex 44 Oct 25 12:50 my_script.sh
你还可以一次性设置多个权限。例如,要给所有用户赋予读取和执行权限,但只给所有者赋予写入权限:
chmod u=rwx,go=rx my_script.sh
这会为每个类别设置 (=) 特定的权限。
再检查一次权限:
ls -l my_script.sh
结果应该和之前一样:
-rwxr-xr-x 1 labex labex 44 Oct 25 12:50 my_script.sh
处理组权限
Linux 允许将文件与组关联起来,从而实现协作式的访问控制。在这一步中,你将学习如何创建一个组、更改文件的组所有权以及设置适当的组权限。
首先,让我们创建一个新组。在实际场景中,这个组可能代表一个部门或项目团队:
sudo groupadd developers
现在,让我们创建一个将与这个组共享的文件:
touch shared_config.txt
echo "## Development configuration settings" > shared_config.txt
echo "debug_mode=true" >> shared_config.txt
echo "log_level=verbose" >> shared_config.txt
目前,这个文件属于你的用户和你的主组。让我们检查一下:
ls -l shared_config.txt
你应该会看到类似以下的输出:
-rw-rw-r-- 1 labex labex 61 Oct 25 13:00 shared_config.txt
要将文件的组所有权更改为 developers 组,请使用 chown 命令:
sudo chown labex:developers shared_config.txt
语法是 chown user:group filename。在这里,我们将用户保持为 labex,但将组更改为 developers。
现在检查所有权:
ls -l shared_config.txt
你应该会看到:
-rw-rw-r-- 1 labex developers 61 Oct 25 13:00 shared_config.txt
注意,组已经更改为 developers,但权限仍然相同。让我们修改权限,允许组成员读取但不允许写入,同时阻止其他用户访问:
chmod 640 shared_config.txt
这将设置:
- 所有者:可读可写 (
6=4+2) - 组:只读 (
4) - 其他用户:无权限 (
0)
再次检查权限:
ls -l shared_config.txt
现在你应该会看到:
-rw-r----- 1 labex developers 61 Oct 25 13:00 shared_config.txt
现在,developers 组的成员可以读取这个配置文件,但不能修改它。不在 developers 组中的用户则根本无法访问该文件。
你也可以使用符号模式来达到相同的效果:
chmod u=rw,g=r,o= shared_config.txt
这个命令明确设置了:
- 用户/所有者:可读可写
- 组:只读
- 其他用户:无权限
要将一个用户添加到 developers 组,通常你会使用:
sudo usermod -a -G developers username
然而,这超出了本实验的范围,因为这需要创建额外的用户账户。
总结
在本次实验中,你学习了 Linux 文件权限的基本概念和操作方法。以下是你所完成内容的回顾:
- 你了解了 Linux 权限模型的工作原理,包括用户、组和其他用户的读取、写入和执行权限的概念。
- 你创建了具有特定权限的文件,学会了使用
chmod命令的数字模式为不同类型的文件设置适当的访问级别。 - 你探索了
chmod命令的符号模式,它为添加、删除或设置特定权限提供了更直观的方法。 - 你学习了如何使用组权限,包括创建组、更改文件的组所有权以及设置适当的组级访问控制。
这些技能对于维护 Linux 系统的安全性和控制访问至关重要。无论你是在管理服务器配置、开发软件,还是仅仅整理个人文件,了解如何正确设置和修改文件权限是任何 Linux 用户必备的技能。
在你继续使用 Linux 的过程中,请记住,正确的权限管理是系统安全的关键组成部分。始终遵循最小权限原则——只给用户和进程执行其任务所需的权限,不多给。



