【问题标题】:How to make python run shell commands under /usr/bin instead of /bin/sh?如何让python在/usr/bin而不是/bin/sh下运行shell命令?
【发布时间】:2021-03-15 18:37:17
【问题描述】:

首先很抱歉,如果有人问这个问题我找不到任何答案。

我有一个通过 uwsginginx 提供的 Flask 应用程序(与我的问题无关)。

我面临的问题是,如果我运行:

os.system(f"grep {needle} /some/path/haystack.txt")

我的服务器会输出以下遇到的错误:

/bin/sh: 1: grep: not found.

如果我跑:

os.system(f"/usr/bin/grep {needle} /some/path/haystack.txt")

一切都按预期进行。

我知道让用户运行命令是不安全的:这是我正在为公司开发的黑客 CTF 的一部分,他们必须能够运行命令,例如 ;cat /tmp/flag.txt。 p>

我想我可以有一个命令白名单,例如 cat less more 等,如果检测到这样的命令,只需将其替换为 /usr/bin/ 变体,例如:

; cat /tmp/flag.txt 

变成

os.system(f"/usr/bin/grep ; /usr/bin/cat /tmp/flag.txt /some/path/haystack.txt")

但这并不理想,我想告诉 Python 运行命令而不必指定它应该使用 /usr/bin。

非常感谢任何帮助!

【问题讨论】:

    标签: python bash path


    【解决方案1】:

    如果您不想在 Python 脚本中指定查看 /usr/bin,则可以选择创建指向 /usr/bin 的符号链接,然后将符号链接添加到服务器上的 PATH 变量并进行测试。

    首先我会查看服务器上的这些文件位置,/usr/bin 是否存在于服务器上,或者它是否 Python 脚本不能,然后文件实际在哪里,如果它们在 @987654325 上不存在@。另外检查您正在以哪个用户身份运行脚本,并检查您的权限。

    【讨论】:

    • 感谢您的回答!我会尝试你的建议,/usr/bin 确实存在,并且运行它的用户应该有权限。毕竟我决定使用白名单,因为我意识到它并没有那么糟糕 - 拥有一个只有一堆项目的白名单,例如“cat,less,grep,more”,并用它们的 /usr/bin 等价物替换它们,一切正在按预期工作,但我将研究符号链接的创建并将其添加到 PATH 中。谢谢!
    猜你喜欢
    • 2017-07-31
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多