当我得到一个具有只读权限(以 root 身份读取和执行)的可执行文件时,我总是可以将其复制到我具有完全控制权限的主目录中。然后我将新文件设置为读取和执行。好的,我可以执行它。
文件模式真的有必要吗?我知道对于目录来说,这意味着不同。
答案1
我很惊讶没有人提到以特殊权限运行的二进制文件。Wireshark 有一个实际用例:它的一个主要功能是捕获网络流量,通常只有 root 才能执行此操作。您可能希望允许某些用户使用 Wireshark 捕获流量,而无需授予他们完全 root 访问权限,这是有道理的,因此 Wireshark 附带了一个名为 的二进制文件,dumpcap
它启用了必要的功能(CAP_NET_RAW 和 CAP_NET_ADMIN)。此二进制文件为 0754 ( rwxr-xr--
),其关联的 GID 是 Wireshark 安装的一个特殊组。这样,组中的任何用户都可以运行二进制文件(通常通过 Wireshark)来捕获流量,并且它将以必要的权限运行,但不在该组中的用户将无法执行此操作,因为他们没有执行权限。他们仍然可以将其复制到他们的主目录,但他们的副本将没有设置必要的功能,因此它实际上无法捕获任何流量。
答案2
因为 *nix 还没有脑残到把文件命名为“.exe”时就变成“二进制可执行文件”,或者把文件命名为“.bat”时就变成“脚本可执行文件”。
在 Linux 中,文件的名称并不重要。
以及你赋予文件的权限做事情。
这很有道理。依我之见……
答案3
执行位在作为权限和对象类型标识符之间有点混淆。
并且,您不能“始终将文件复制”到您的主目录:只有当它对您可读时才可以。
文件对您来说可执行,但不可读。
您说得对,如果某个文件对您而言是可读的但对您而言不是可执行的,您可以复制它并翻转执行位并使用它。也许可以。但这可能行不通。可执行文件可能对其安装位置很敏感。或者该文件可能依赖于其 setuid 根位。
我不会从头开始以这种方式设计权限系统;这完全没有意义。执行权限将与可执行文件类型属性分开,并且执行权限不会因搜索权限而过载(即使以这种方式存储;API 不会在位掩码级别显示它)。
答案4
您可能出于多种原因希望将文件标记为可读但不可执行,尤其是对于某些用户或组而言。请考虑以下情况:
# /usr/local/sbin/foo.sh
-rwxr--r-- 1 root root 890 2012-02-17 21:09 /usr/local/sbin/foo.sh
# ~/bin/foo.sh
-rwxr-xr-x 1 user user 890 2012-02-17 21:09 /home/bin/foo.sh
如果符合以下条件,则此举是合理的:
- 文件不同——也许您在脚本中将每个“root”实例替换为“user”——但您的路径包含
/usr/local/sbin:/home/user/bin
。权限将确保运行foo.sh
将运行用户的修改副本,即使 root 的副本在其执行位被设置的情况下在搜索路径中排在第一位。 - 这些文件是相同的,但在运行时会根据其基本名称、父目录、调用用户的主目录或其他一些巧妙的编程技巧执行不同的操作。在这种情况下,您想用户在运行文件之前将其复制到其他地方。许多示例脚本删除了执行位,以强制用户复制并自定义。
最终,没有什么可以阻止你复制任何你可以读取的文件,甚至直接用 运行它sh /path/to/file
。你的用户或组缺少执行位只是阻止你通过以下方式执行此操作事故。这不是一种安全措施,也不应将其视为安全措施。