问题是如何在 sudo 中运行可能包含 ; && | < > << >> $ 等等的通用命令。
可能的解决方案包括:
- 在 sudo 中使用解释器
sudo /bin/bash -c 'command ; command | ...'
或者
sudo -s <<< 'command ; command | ...'
但我没有 sudoer /bin/bash /bin/sh 或任何其他权限。因此导致权限被拒绝。
- 我也可以使用这样的东西:
sudo command ; sudo command
但问题是我需要一个解决方案,可以解决作为我的函数参数给出的任何命令(参见上下文)
一些背景信息:
我正在编写一个 python Popen 包装器,它有一个标志 sudo=True/False。如果 sudo 为真,它应该在 sudo 内运行任何给定的命令字符串(意味着命令可以包含 ;| <> &&)
答案1
也许将命令写入 shell 脚本、使其可执行并使用 sudo 运行它就可以满足您的需要。
但是你正在做的事情非常危险。允许以 root 身份执行可能不受信任的命令行是一场即将发生的灾难。查找“shell 注入”类型的漏洞。然后也许可以考虑检查需要做什么,然后重新设计它,而无需以 sudo 身份运行任何命令。