首页 > 解决方案 > execlp 命令中的“/bin/sh”代表什么?

问题描述

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

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

p_command 是指向 a 的指针,const char表示 shell 命令行。

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

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

标签: cshelloperating-systemexec

解决方案


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

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


推荐阅读