我正在寻找一种干净、安全的方法来从 Web 界面运行特定的 Linux 系统命令。
假设我想要sudo -u differentuser ping 0.0.0.0
。IP 地址由用户在 HTTP 请求中提供,我想将结果打印在网页上。最好的方法是什么?
我正在考虑使用 PHP 的exec()
命令:
<?php
echo exec('sudo -u differentuser ping ' . $_POST['ip']);
但这看起来非常肮脏和不安全,我必须将 apache 用户添加到 sudoers 文件中。
您将使用什么语言以及如何实现这一目标?
感谢您的帮助。
编辑:sudo
这里很重要,因为我需要以不同于托管 Web 界面的特定用户身份运行这些命令。
答案1
通常不安全。不管你是否让用户发送命令或进行任何其他类型的交互。即使你的脚本单独运行,也可以发明漏洞以某种形式利用它,甚至可能改变它的操作。
但是,这仅适用于您希望在服务器上设置疯狂的安全规则的情况。在现实世界中,您危及服务器安全的可能性微乎其微。
我还有一些建议给你:
确保你
确保你的脚本不接受任何外部输入,它不读取数据库或文件。所有内容都必须包含在脚本内。
尝试将脚本放在 documentRoot 之外的某个地方,这样用户就无法访问它。
对脚本设置一些特殊权限,以便将其操作限制为以该脚本运行的用户。即使有人以某种方式破坏了它,操作系统也不会允许他做除了在特定环境中运行该特定命令之外的事情。
这当然可以通过更多的规则来完成,但这只是现在想到的。
答案2
把你的命令放入 shell 脚本中并执行以下操作:
chown root:wheel ping.sh
chmod +xs ping.sh
然后通过 exec() 在 php 脚本中运行该脚本
这应该可行:-)