Linux 文件权限中的 SetUID、SetGID 和粘滞位
在 Linux 环境中,文件权限为文件所有者或管理员提供了执行程序或应用程序的特权。权限是使用 chmod 和 chown 命令以及读、写和执行标记为文件或目录设置的。Setuid、setgid 和粘滞位等特殊权限是为可执行文件或目录启动的;当设置这些特殊权限时,用户需要更加注意,因为它们可能会对所有其他用户构成安全风险。目录中存在的每个文件都有由文件所有者指定的 userId(称为 uid)和 groupId(称为 gid),为了执行进程,会将 uid 和 gid 与授权用户进行检查,以避免安全风险。为了更好地理解设置 uid、gid 和粘滞位(特殊文件权限),应该具备一定程度的基本 Linux 文件权限知识。
SetUID
当设置 SetUID 时,程序将以文件所有者设置的权限执行。它不会以当前正在处理它的用户身份执行。此 SetUID 可以由应用程序的所有者或具有 root 访问权限的用户使用 chmod 命令更改。例如,当用户执行启用了 SetUID 的文件时,该文件将以预定义的 root 权限执行,而不是以用户权限执行。
我们可以使用 ls 命令来了解 setuid 是否已启用
以上命令将返回
在上面的文件权限中,请注意设置了小写字符“s”,它定义了为密码命令设置的 SetUID 位。此可执行文件的 UID 由文件所有者设置。
文件所有者可以使用以下命令为所需文件设置 uid
要禁用已设置的 uid,请对可执行文件使用以下命令
ls -l /user/bin/passwd
-rwsr-xr-x root root 34487 May 15 20:22 /user/bin/passwd
chmod u+s file_name
chmod u-s file_name
SetGID
SetGID 权限属于位于目录中的文件的组。此权限对所有可执行文件及其目录启用。当为目录启用 SetGID 时,其中存在的文件属于目录所在的组,而不属于正在执行它的用户。根据为用户提供的对组进行写入和执行的权限,他们可以在目录中创建文件并访问它们。
指定的文件名已设置 gid,这可以在命令的组权限部分看到
使用以下命令为所需文件设置 gid
要禁用已设置的 uid,请对可执行文件使用以下命令。
-rwxrwsr-x root root 2433 May 15 20:22 file_name
chmod g+s file_name
chmod g-s file_name
像 SetUID 和 SetGID 这样的权限存在更多安全威胁,并且攻击者在获得对 root 目录的访问权限后可以跟踪由所有者设置了这些权限的可执行文件。管理员或组所有者必须进行频繁监控以检测文件权限中任何可疑活动的更改。
粘滞位
为目录中的文件提供粘滞位。当它为目录设置时,只有文件或目录的所有者才能删除或删除该文件,而没有权限的其他用户则无法删除目录中的文件。这可以保护文件免遭没有文件任何权限的公共用户的意外删除。tmp 目录最常用于粘滞位,当设置粘滞位时,用户无法删除其他用户的 tmp 文件。
使用 ls 命令列出给定目录或文件权限
ls 命令以及给定的目录名将产生以下结果。
此处设置了小写“t”,这意味着粘滞位已为目录中的所有文件启用,替换了通常的执行权限“x”。
使用以下命令为所需的目录设置粘滞位。
要禁用已设置的粘滞位,请对相应的目录使用以下命令。
ls -ld/directory_name
drwxrwxrwt. 10 root root 539 May 17 15:09/directory_name/
chmod +t directory_name
chmod -t directory_name
结论
Linux 特殊文件权限已为 root 用户或拥有所有特权的所有者启用,这些特权可以定义授予哪些用户访问哪些操作(如读、写和执行)的权限。当使用 uid 和 gid 等特殊权限时,必须监控文件或目录,因为它们可能会被任何非法用户入侵,而不是访问属于 root 或 bin 的文件。