透明地将 <cmd> 别名为 "do X then <cmd>"
Alias <cmd> to "do X then <cmd>" transparently
标题很糟糕,但我不确定我正在尝试做的事情的正确术语,如果我知道我现在可能已经找到答案了!
问题:
由于 over-zealous 端口扫描器(客户的网络监视器)和过于简单的 telnet 守护程序(busybox linux),每次扫描端口 23 时,telnetd 都会启动 另一个 /bin/login
的实例等待用户通过 telnet 输入。
由于端口扫描器实际上并没有尝试登录,所以没有 session,所以不会有 session 超时,所以我们很快就得到了 session 的 squillion 僵尸副本=14=] 运行.
我正在尝试做些什么:
telnetd
为我们提供了启动 其他东西的选项 (-l
) 而不是 /bin/login
所以我认为我们可以替换 /bin/login
使用 bash 脚本杀死旧的登录进程,然后正常运行 /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
但这似乎会立即 return(没有错误,但没有登录提示)。我还尝试在 telnetd 的参数中链接命令:
telnetd -- -l "killall -q login;/bin/login"
但这似乎也不起作用(同样 - 没有错误,但没有登录提示)。我确定这里遗漏了一些明显的皱纹。
系统是嵌入式的Linux 2.6.x运行Busybox所以保持简单是首选。
编辑:好的,我是个笨蛋,因为我没有让脚本可执行,完成后我得到了 login:
提示,但在输入用户名后我什么也得不到进一步。
检查您的脚本是否设置了执行位。权限应与原始二进制文件相同,包括所有权。
至于-l
:我的猜测是它试图执行命令killall -q login;/bin/login
(这是一个词)。
由于是嵌入式系统,可能不会写日志。但是你应该检查 /var/log
无论如何错误信息。如果有none,你应该可以使用文档配置它: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 不过,这是一个可以等待下雨天的好东西,我很高兴我们的东西不能再通过 Telnet 进行 DDOS!
标题很糟糕,但我不确定我正在尝试做的事情的正确术语,如果我知道我现在可能已经找到答案了!
问题:
由于 over-zealous 端口扫描器(客户的网络监视器)和过于简单的 telnet 守护程序(busybox linux),每次扫描端口 23 时,telnetd 都会启动 另一个 /bin/login
的实例等待用户通过 telnet 输入。
由于端口扫描器实际上并没有尝试登录,所以没有 session,所以不会有 session 超时,所以我们很快就得到了 session 的 squillion 僵尸副本=14=] 运行.
我正在尝试做些什么:
telnetd
为我们提供了启动 其他东西的选项 (-l
) 而不是 /bin/login
所以我认为我们可以替换 /bin/login
使用 bash 脚本杀死旧的登录进程,然后正常运行 /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
但这似乎会立即 return(没有错误,但没有登录提示)。我还尝试在 telnetd 的参数中链接命令:
telnetd -- -l "killall -q login;/bin/login"
但这似乎也不起作用(同样 - 没有错误,但没有登录提示)。我确定这里遗漏了一些明显的皱纹。
系统是嵌入式的Linux 2.6.x运行Busybox所以保持简单是首选。
编辑:好的,我是个笨蛋,因为我没有让脚本可执行,完成后我得到了 login:
提示,但在输入用户名后我什么也得不到进一步。
检查您的脚本是否设置了执行位。权限应与原始二进制文件相同,包括所有权。
至于-l
:我的猜测是它试图执行命令killall -q login;/bin/login
(这是一个词)。
由于是嵌入式系统,可能不会写日志。但是你应该检查 /var/log
无论如何错误信息。如果有none,你应该可以使用文档配置它: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 不过,这是一个可以等待下雨天的好东西,我很高兴我们的东西不能再通过 Telnet 进行 DDOS!