java - 从 PHP/Java/Python Web 应用程序调用 shell 命令(包括那些需要 root 权限的命令)的正确方法是什么?

标签 java php linux security shell

我期待开发一个远程系统管理 Web 应用程序(例如 Webmin)。显然,我将需要调用由 root 或其他特定非 nobody 用户发出的要执行的 shell 命令。

这项任务的一般准则是什么?

现在我想到的唯一解决方案是在一个特殊端口上运行 Web 服务器,该端口(通过防火墙)只能供本地和 VPN 连接的用户访问。但是也许有一些特殊的技巧可以保护这样的应用程序,即使它暴露在公共(public)网络上也是如此?

最佳答案

由于我们讨论的是控制 native 任务的网络应用程序,因此您需要考虑几个方面(至少对于 Java,但通常对于每个设计良好的解决方案):

  • 使用异步模型来执行 native 任务,因为其中一些任务可能需要相当长的时间,并且在浏览器中,用户不知道是机器或互联网出现问题还是其他原因。
  • 不要直接使用 Java Runtime#exec(),因为很容易导致无法正常工作或出错,或者代码在不同机器上的行为不同,或者至少要小心使用:参见 JavaWorld article关于可能的陷阱。
  • 如果可能将应用程序分为两部分:网络应用程序和执行任务(并与网络应用程序安全通信)的“ headless 代理”。通过这种方式,您可以通过一个网络应用程序控制多台机器(只安装了“代理”),当一台机器出现问题时,网络应用程序仍然可以响应,并且可能会启动所需的恢复步骤。
  • 当在同一台机器上运行时(web 应用程序和代理及其可执行命令),如果应用程序“搬起石头砸自己的脚”,您需要一个“备份计划”,从而影响您对机器的访问。

关于java - 从 PHP/Java/Python Web 应用程序调用 shell 命令(包括那些需要 root 权限的命令)的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3299202/

相关文章:

java.lang.LinkageError : Failed to link freemarker/core/TemplateElement

java - 通过扫描仪声明变量?

python - 如何分发将可执行文件添加到路径的 Python 包?

php - 访问根目录之外的文件

php - 使用 HTTPS 的 Paypal IPN 验证回传

linux - 使用linux命令在txt文件中设置范围

java - 无法访问带注释的 Spring 服务

java - 如何在 JTextfield 上添加 command+a?

php - 向 Propel 模型添加自定义列?

php - 将文件从 localhost 传输到 Bluehost