作为 Linux 新手用户,您将了解与文件和目录相关的权限和所有权。 Linux/类 Unix 操作系统允许您设置九位权限的组合,以防止其他用户不必要的文件/目录访问。 与这些类似的是可执行文件的特殊权限,称为设置 UID、设置 GID 和粘性位。
对于有抱负的 Linux 管理员来说,了解特殊权限可能有点难以理解。 在这里,您将了解有关常规文件权限的一些背景知识,并解释它们与特殊权限的区别。 我们还通过示例演示了 SetID、GetID 和粘滞位功能,以便全面了解。
常规 Linux 文件权限
Linux 使用 chmod 命令分配/更改读取 (r=4), 写 (w=2),并执行 (x=1) 文件和文件夹的权限。 也就是说,上面提到的九个比特适用于三大类权限组。 前三个用于拥有文件的用户,第二组用于分配给文件/目录的组,最后三个代表所有其他用户。
例如,一个常规文件将所有类别的用户的所有类型的权限都显示为 -rwxrwxrwx。 而 – 代替字母表示没有该权限。 现在 修改 命令使用数字和字母来更改权限,如下所示:
sudo chmod 755 file #for rwxr-xr-x
sudo chmod 644 file #for rw-r--r--
sudo chmod a-w file #for r-xr-xr-x
sudo chmod a+x file #for --x--x--x
特殊的 Linux 文件权限
这 设置 bit 表示对可执行文件的权限,该可执行文件可由拥有所有者授权的其他用户运行。 例如,当用户 最大限度 以用户身份运行 vi 命令 约翰,您将拥有以下的读/写权限 约翰.
要使用 setuid 识别文件,请使用 ls 命令并寻找 s 位代替可执行位 X, 如下。
设置 UID 位
这 设置 bit 表示对可执行文件的权限,该可执行文件可由拥有所有者授权的其他用户运行。 例如,当用户 最大限度 运行 vi 命令作为 根, 他将拥有 根. 要使用 setuid 识别文件,请使用 ls 命令并寻找 s 位代替执行位 X, 如下:
ls -la /etc/passwd
-rwsr-xr-x 1 root root 88464 Dec 14 12:46 passwd
其他一些例子是:
ls -la /bin/gpasswd
-rwsr-xr-x 1 root root 88464 Jul 14 15:08 gpasswd
ls -la /bin/su
-rwsr-xr-x 1 root root 67816 Jul 21 2020 su
ls -la /newgrp
-rwsr-xr-x 1 root root 44784 Jul 14 15:08 newgrp
ls -la /bin/sudo
-rwsr-xr-x 1 root root 166056 Jan 19 2021 sudo
要为可执行文件设置 setuid 位,请使用 chmod 命令,如下所示:
chmod u+s /etc/passwd
要删除非 root 用户或所有者执行文件的权限:
chmod u-s /etc/passwd
设置 GID 位
如前所述,set uid 位控制对其他用户的文件访问,而 setgid (GID) 位创建协作目录。 这意味着在该目录中创建的任何文件都可以被该目录的组访问。 因此,它允许所有组成员在没有所有者权限的情况下运行可执行文件,并保护它们免受其他用户的侵害。
按照以下步骤在 Linux 系统中创建协作目录:
使用 组添加 用于协作的组 ID 为 415 的命令:
groupadd -g 415 admins
使用 usermod 命令添加 约翰 到组以进行文件访问/执行。
usermod -aG admins john
使用 mkdir 创建目录的命令:
mkdir /tmp/collaborative_dir
使用 chgrp 命令将目录分配给 管理员 团体:
chgrp admins /tmp/collaborative_dir
使用 修改 命令将目录权限更改为 2775。2 位打开设置的 gid,7 将完整的 rwx 分配给用户和组,而 5 (rw) 用于其他。
chmod 2775 /tmp/collaborative_dir
最后,将您的用户帐户更改为 约翰 并在协作目录中创建一个文件以检查文件权限。
su - john
touch /tmp/collaborative_dir/file.txt
su 命令可能会给您一个身份验证错误。 在这种情况下,键入 sudo 苏 命令切换到root并重新运行 苏-约翰 更改用户帐户
现在列出检查目录和新创建文件的 GID 位设置的权限。
ls -ld /tmp/collaborative_dir /tmp/collaborative_dir/file.txt
在典型情况下,由 john 创建的文件将分配有一个组 john。 由于您在设置的 GID 位目录中创建文件,因此它将权限分配给 管理员 组,例如属于该组的任何人,例如用户 克里斯, 将可以访问它。
粘性位
与 SID 和 GID 位不同,粘性位在功能上有所不同,因为它可以保护文件和目录不被其他用户重命名和删除。 常规文件权限允许任何具有写入权限的用户删除或重命名文件。 而使用粘性位设置,除非您是根用户或文件的所有者,否则这是不可能的。
使用粘滞位的理想情况是所有用户都可以访问的目录来创建文件。 例如,使用 ls -ld 命令检查 tmp 目录权限,如下:
你可以注意到粘性位 吨 替换执行位 X. 按照给定的说明创建受限删除目录:
现在在 /tmp 文件夹:
mkdir /tmp/new_dir
将文件权限更改为 1777 设置粘性位(吨) 和完整的目录访问权限:
chmod 1777 /tmp/new_dir
现在从 /ETC 文件夹到 /tmp/new_dir 并将其权限更改为 666:
cp /etc/ /tmp/new_dir
chmod 666 /tmp/new_dir/services
列出目录及其所有内容以查看权限:
ls -ld /tmp/new_dir /tmp/new_dir/services
您可以注意到粘着位而不是执行位,这意味着只有 root 或用户 john 可以删除文件,因为该文件位于粘着位目录中。
了解 Linux 中的特殊文件权限
本文演示了如何设置这些位以改进共享文件和目录的协作,并保护它们免受未经授权的访问、执行和删除。 即使您不使用这些位创建文件/目录,了解特殊文件权限在许多情况下也很有帮助,尤其是在故障排除或作为系统时 admin. 然而,不明智地使用这些位可能会导致各种安全漏洞。