【问题标题】:What does "/bin/sh" stand for in execlp command?execlp 命令中的“/bin/sh”代表什么?
【发布时间】:2021-11-07 16:16:31
【问题描述】:

我想用 execlp 执行一个 shell 命令,我尝试了以下指令:

execlp("sh", "sh", "-c", p_command, (char*)NULL);

p_command 是一个指向 const char 的指针,代表一个 shell 命令行。

我的最小测试告诉我程序按预期成功。我首先选择使用"/bin/sh" 而不是"sh",但我了解到execlp 中的 p(ath) 允许我们避免编写完整路径,好像 exec 会为我们完成路径;所以我删除了“/bin/”。 我担心的是,我从来没有见过只使用“sh”的 execlp 的代码,因为它有效地作为 ls 的示例,我们可以直接使用 "ls" 而不是 "/bin/ls"

作为一个初学者,我想知道"/bin/sh" 代表什么,在这种情况下"sh""/bin/sh" 有什么区别,为什么我们必须为execlp 编写完整路径来执行shell?

【问题讨论】:

    标签: c shell operating-system exec


    【解决方案1】:

    当传递给execlp 的路径是sh 时,execlpPATH 环境变量中列出的目录中搜索它。如果攻击者能够在运行您的程序的环境中修改PATH 变量,他们可以将其设置为列出他们选择的目录,并且他们可以将自己的名为sh 的程序放置在该目录中。然后您的程序将执行他们的程序而不是执行系统sh 程序。在某些情况下(取决于文件模式位中的某个位),程序在其所有者的权限下执行,而不是在执行程序的用户的权限下执行。必须仔细编写此类程序,以避免出现这种情况,攻击者可以利用该程序。

    当传递给execlp 的路径为/bin/sh 时,execlp 从名为/ 的文件系统的根目录开始在/bin/sh 的路径中查找它。这将始终使用系统管理员放在/bin 目录中的sh 程序(通常作为系统安装的一部分完成)。

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 1970-01-01
      • 2021-11-13
      • 2019-04-19
      • 2013-05-16
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多