<cmd> 透明"do X then <cmd>"的别名



标题很烂,但我不确定我想做的事情的正确术语,如果我知道的话,我现在可能已经找到答案了!

问题:

由于一个过度热心的端口扫描器(客户的网络监视器)和一个过于简单的telnet守护进程(busybox linux),每次端口23被扫描时,telnetd启动另一个实例/bin/login等待用户通过telnet输入。

由于端口扫描器实际上没有尝试登录,因此没有会话,因此不会出现会话超时,因此我们很快就会以运行/bin/login的十亿僵尸副本结束。

我想做什么:

telnetd给了我们启动一些其他东西的选项(-l) 而不是/bin/login,所以我认为我们可以用bash脚本取代/bin/login,杀死旧的登录进程,然后正常运行/bin/login:

#!/bin/sh
# First kill off any existing dangling logins
# /bin/login disappears on successful login so
# there should only ever be one
killall -q login
# now run login
/bin/login

但这似乎立即返回(没有错误,但没有登录提示)。我还尝试将命令链接到telnetd的参数中:

telnetd -- -l "killall -q login;/bin/login"

但这似乎也不起作用(再次-没有错误,但没有登录提示)。我敢肯定我遗漏了一些明显的皱纹。

系统是嵌入式Linux 2.6。

EDIT: OK,我是一个不使脚本可执行的prat,完成后,我得到login:提示,但在输入用户名后,我没有得到任何进一步的

检查脚本是否设置了执行位。权限应该与原始二进制文件相同,包括所有权。

对于-l:我的猜测是,它试图执行命令killall -q login;/bin/login(这是一个词)。

由于这是一个嵌入式系统,它可能不写日志。但无论如何,您都应该检查/var/log是否有错误消息。如果没有,您应该能够使用文档配置它:http://wiki.openwrt.org/doc/howto/log.overview

对,我修复了它,因为我怀疑我遗漏了一个皱纹:

执行/bin/login

我需要exec把控制权交给/bin/login,而不是直接调用它。

telnet守护进程是这样启动的:

/usr/sbin/telnetd -l /usr/sbin/not_really_login

非真正登录脚本的内容如下:

#!/bin/sh
echo -n "Killing old logins..."
killall -q login
echo "...done"
exec /bin/login

一切正常,在telnet连接上,我们得到这个:

**MOTD Etc...**
Killing old logins......done
login: zero_cool
password: 

我们可以像往常一样登录。

我唯一没有弄清楚的是,如果我们能检测到/bin/login的退出状态(如果我们杀死它),并打印一条消息说Too slow, sucker!或类似的。TBH虽然,这是一个细节,可以等待一个雨天,我只是高兴我们的东西不能被DDOS'通过Telnet了!

相关内容

  • 没有找到相关文章

最新更新