Jac*_*ton 9 permissions system-calls executable linux-kernel exec
假设setuid/setgid位无关紧要。为什么有单独的执行权限?
从哲学上讲,我觉得写权限包含读权限,读权限包含执行权限。当然,在 Linux 中情况并非如此,这有时可能很有用,但我认为这种情况很少见。例如,如果一个进程可以读取一个不可执行的文件,那么只要该进程可以写入某个目录,它就可以简单地将文件复制到那里,设置执行位,然后运行该程序。所以说真的,read subsumes 在简单的情况下执行。显然,如果源文件有 setuid 位,或者进程只能写入 noexec 挂载点,这将无法正常工作。
我问的原因是我正在实现一个 Linux 系统调用,它允许进程访问exec其内存的任意块。(具体用例是我的主程序中捆绑了一个完整的程序,我不想将其写入磁盘以调用execve.)这样的系统调用是否存在任何我应该注意的严重问题? ?
正如您猜测的那样,执行权限很少用作权限。将其作为权限而不是文件的属性是一个历史意外。然而,既然它存在,它就不会消失。在两种情况下,拥有不同于读取权限的执行权限很重要。
chmod,或者可以仅被允许写入到目录上的文件系统,的安装有noexec。此类用户仅限于已存在的可执行文件。从内存中添加对 exec 的系统调用允许受限帐户执行任意代码。这相当于拥有一个可以从任何地方访问的本机代码解释器,甚至是受限制的帐户。这在主流内核中不会被接受,因为它会破坏安全限制。您可以将其部署在您自己的机器上,但您应该牢记其含义。
然而,为已经存在的功能携带大量的工作和大量的安全包袱。可以在不写入磁盘的情况下执行代码。您只需将代码写入非磁盘文件系统(例如 tmpfs)上的文件。
忽略setuid/ ,执行位setgid的目的之一是:
关于您问题的第二部分 - 关于linux syscall您实施的:
这似乎创造了一个新的攻击源。
如果您想得到认真的答案,您应该提供详细信息(最好在新问题中提供):
root(因此可能允许特权升级)| 归档时间: |
|
| 查看次数: |
2934 次 |
| 最近记录: |