1

我在远程服务器上有一个程序,可以将数据发布到数据库中。该程序必须以 root 权限执行才能正常运行。我必须从网页开始执行。即,如果事件触发,该脚本的执行应该开始(现在将事件视为单击按钮)

我知道这可以使用 php 或其他服务器端脚本语言来完成,但我不得不使用 javascript 或其他相关技术,如 AJAX、jquery 等。

我担心安全,所以这就是我的计划。

我将使用密钥对 ssh 进入服务器,然后拥有一个以 root 身份控制的 shell 脚本并开始执行程序。

我不想在我的网页上解析或打印任何输出。只需启动脚本就可以完成这项工作。

有人可以帮我解决这个问题吗..

谢谢!

4

2 回答 2

0

The problem is that JavaScript does not have support for TCP/IP sockets, so it is really impossible to do this purely in JavaScript. However, you could accomplish this using AJAX web sockets (like WebShell and AnyTerm do) and have the server handle and authenticate the session locally.

Another option, should you absolutely require everything to be done on the client-side, would be to use a java applet run in the user's browser. Obviously this applet could function as a terminal shell, but per your needs, you could very easily make the applet open, authenticate, run the script then pass back a confirmation the script started OK.

于 2013-09-01T03:13:23.200 回答
0

由于您不能以 root 身份 ssh 进入该框,因此您需要设置一个可执行脚本,该脚本将以用户 root 身份运行,可以从您以 ssh 身份登录的普通用户调用。去做这个:

chown 根可执行文件

chgrp 根可执行文件

chmod 4755 可执行文件

不幸的是,出于安全原因,可执行文件不能是 shell 脚本(无论如何在 Linux 下),因此您需要编写一个包含大量 system() 调用的简短 C 程序。编译这个,你应该离开了。当然 C 程序可以很简单

system("./executable");

但无论如何,这在普通服务器上将是一个巨大的安全漏洞。如果 C 程序采用参数进行替换,那么您需要验证这些参数,否则安全性可能会受到损害。至少 - 如果任何参数包含嵌入的“;”,则检查并退出而不做任何事情

于 2013-09-01T07:54:03.417 回答