运行 shell 来自 redis 服务器进程的命令
Run shell command from within redis server process
我运行在 RHEL 系统上安装 Redis 服务器,要求进程每 24 小时更新一次 AFS 身份验证令牌。
在将数据发布到数据库的客户端代码中,我可以通过每 N POST 个请求调用 shell 命令来更新 AFS 令牌(例如 echo PASSWORD | kinit && aklog
.
我想在服务器进程中实现类似的功能,但不确定如何实现。是否有任何 "post-receive-data" 回调样式挂钩可用于从 Redis 服务器进程中 运行 shell 命令?如果其他人可以就此问题提供任何建议,我将不胜感激。
否 - Redis 服务器不是为此设计的,也不打算用于此目的。如果你真的坚持使用来自 Redis 服务器的事件来触发 shell 命令,你可以通过以下方式破解:
- 跟踪服务器的日志文件并查找由客户端调用
EVAL
并使用调用 redis.log
Lua 函数的脚本生成的事件。
- 运行 一个带有基本本地 Redis 客户端(例如
redis-cli
)的循环,BRPOP
来自队列,完成工作并重复
- 编写一些代码作为一种守护进程,使用 Redis 的 PubSub 通过通道接收消息以触发 shell 命令
- 等等...
注意:WRT 至 "Redis server isn't designed for that" - 如果您确实发现了一些允许您执行所需操作的漏洞,请将其报告为严重的安全问题。从这个意义上说,您可能想阅读 http://antirez.com/news/96
我运行在 RHEL 系统上安装 Redis 服务器,要求进程每 24 小时更新一次 AFS 身份验证令牌。
在将数据发布到数据库的客户端代码中,我可以通过每 N POST 个请求调用 shell 命令来更新 AFS 令牌(例如 echo PASSWORD | kinit && aklog
.
我想在服务器进程中实现类似的功能,但不确定如何实现。是否有任何 "post-receive-data" 回调样式挂钩可用于从 Redis 服务器进程中 运行 shell 命令?如果其他人可以就此问题提供任何建议,我将不胜感激。
否 - Redis 服务器不是为此设计的,也不打算用于此目的。如果你真的坚持使用来自 Redis 服务器的事件来触发 shell 命令,你可以通过以下方式破解:
- 跟踪服务器的日志文件并查找由客户端调用
EVAL
并使用调用redis.log
Lua 函数的脚本生成的事件。 - 运行 一个带有基本本地 Redis 客户端(例如
redis-cli
)的循环,BRPOP
来自队列,完成工作并重复 - 编写一些代码作为一种守护进程,使用 Redis 的 PubSub 通过通道接收消息以触发 shell 命令
- 等等...
注意:WRT 至 "Redis server isn't designed for that" - 如果您确实发现了一些允许您执行所需操作的漏洞,请将其报告为严重的安全问题。从这个意义上说,您可能想阅读 http://antirez.com/news/96