Linux 文件权限中的设置 UID、获取 UID 和粘滞位是什么?
了解 Linux 中的特殊文件权限,以便对用户的文件和目录访问进行精细控制。
作为 Linux 新手用户,您将了解与文件和目录相关的权限和所有权。类Linux/Unix操作系统允许您设置九位权限的组合,以防止其他用户不必要的文件/目录访问。与这些类似的是可执行文件的特殊权限,称为设置 UID、设置 GID 和粘滞位。
对于有抱负的 Linux 管理员来说,了解特殊权限可能有点困难。在这里,您将了解常规文件权限的一些背景知识,并解释它们与特殊权限的区别。我们还通过示例演示了 SetID、GetID 和粘性位功能,以便全面理解。
常规 Linux 文件权限
Linux 使用 chmod 命令来分配/更改读取 (r=4)、写入 (w=2) 和执行 (x=1) ) 文件和文件夹的权限。也就是说,上面提到的九位适用于三大类权限组。前三个用于拥有该文件的用户,第二组用于分配给该文件/目录的组,最后三个代表所有其他用户。
例如,常规文件将所有类别用户的所有类型权限显示为 -rwxrwxrwx。而 - 代替字母表示没有该许可。现在chmod命令使用数字和字母来更改权限,如下所示:
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 文件权限
setuid 位表示对可执行文件的权限,该文件可以由其他用户在所有者授权的情况下运行。例如,当用户max以用户john的身份运行vi命令时,您将拥有john的读/写权限。
要使用 setuid 识别文件,请使用 ls 命令并查找 s 位来代替可执行位 x,,如下所示。
设置 UID 位
setuid 位表示对可执行文件的权限,该文件可以由其他用户在所有者授权的情况下运行。例如,当用户max以root身份运行vi命令时,他将拥有root的读/写权限。要使用 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 系统中创建协作目录:
使用 groupadd 命令创建一个组 ID 为 415 的组以进行协作:
groupadd -g 415 admins
使用usermod命令将 john 添加到该组以进行文件访问/执行。
usermod -aG admins john
使用mkdir命令创建目录:
mkdir /tmp/collaborative_dir
使用chgrp命令将目录分配给admins组:
chgrp admins /tmp/collaborative_dir
使用chmod命令将目录权限更改为2775。第2位打开设置的gid,7为用户和组分配完整的rwx,而5(r-w)为其他人。
chmod 2775 /tmp/collaborative_dir
最后,将您的用户帐户更改为john,并在协作目录中创建一个文件来检查文件权限。
su - john
touch /tmp/collaborative_dir/file.txt
su 命令可能会给您一个身份验证错误。在这种情况下,请键入 sudo su 命令切换到 root 并重新运行 su - john 来更改用户帐户
现在列出检查目录和新创建文件的 GID 位设置的权限。
ls -ld /tmp/collaborative_dir /tmp/collaborative_dir/file.txt
在典型情况下,由 john 创建的文件将被分配一个组 john。由于您在设置的 GID 位目录中创建文件,因此它会将权限分配给 admins 组,这样属于该组的任何人(例如用户 chris)都将拥有访问它。 相关:如何使用 touch 在 Linux 上创建新文件
粘性位
与 SID 和 GID 位不同,粘性位的功能有所不同,因为它可以保护文件和目录不被其他用户重命名和删除。常规文件权限允许任何具有写入权限的用户删除或重命名文件。而设置粘性位后,除非您是根用户或文件的所有者,否则这是不可能的。
使用粘滞位的理想情况是所有用户都可以访问该目录来创建文件。例如使用ls -ld命令检查\tmp目录权限,如下:
您可以注意到粘滞位t 取代了执行位x。按照给定的一组说明创建受限删除目录:
现在在 /tmp 文件夹中创建另一个目录:
mkdir /tmp/new_dir
将文件权限更改为 1777 以设置粘滞位 (t) 和完整目录访问权限:
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 中的特殊文件权限
本文演示了如何设置这些位以改善共享文件和目录的协作并保护它们免受未经授权的访问、执行和删除。即使您不使用这些位创建文件/目录,了解特殊文件权限在许多情况下也会很有帮助,特别是在故障排除或作为系统管理员时。然而,不明智地使用这些位可能会导致各种安全漏洞。