0

如何使用 ejabberd 实现机器人?

这个想法是,在我的(Debian 7.0 Wheezy)VPS 上,我正在运行 ejabberd,并且我有一个特殊的 bot Jabber 用户,他可以运行的命令集有限。让我们称他为 butler@myvps.foo。

在另一个盒子(比如我的安卓手机)上,我有一个 Jabber 客户端连接到我的帐户,可能是第三方服务器。让我们称它为 me@somewhere.bar。

现在我希望 ejabberd:

  • 只允许一个特定的 Jabber ID,me@somewhere.bar 与这个 butler@myvps.foo 通信。

  • 将输入到与 butler@myvps.foo 聊天的所有内容传递给 shell 并作为命令执行,可能在 chrooted 或其他受保护的环境中(例如,使用特定的受限用户)。(当然,STDOUT + STDERR 作为回复返回。)

我知道可能存在安全风险,但现在我只想知道这是否可行。

4

1 回答 1

1

您可以简单地用任何语言编写一个机器人,并让它作为客户端连接到 XMPP 服务器。可以在此处找到 XMPP 客户端库的列表。

机器人可以检查它接收到的消息的“发件人”属性中的 JID 以验证身份。通常不可能在 XMPP 中伪造 JID,因为服务器对它们的客户端以及彼此进行身份验证。然而实际上,它仅与使用的身份验证方法一样安全(并且服务器不包含错误)。

要执行命令并读取结果,PTY 是一个很好的简单解决方案。有许多语言的 PTY 库,包括PythonRubyLua

你是对的,安全是一个问题,就像任何系统一样。多年来一直在努力保护 ssh,但偶尔仍会出现问题。

值得注意的是,Google 的 XMPP 服务器不支持服务器到服务器连接的加密,因此您的 XMPP 服务器和 Google 之间的网络上的某人将能够看到您的消息,并可能完全修改和/或伪造它们。

最后,即使他们确实支持服务器到服务器链接的加密......谷歌本身在技术上也有能力像你一样发送消息,你的手机也将是一个潜在的弱点。

隔离目标进程将消除很多安全问题。如果服务器在 Linux 上运行,LXC 容器可能是一个很好的解决方案。

希望这涵盖了您问题的所有方面!

于 2013-05-09T19:07:24.610 回答