Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 别名<;cmd>;至;那么做X<;cmd>&引用;透明地_Linux_Bash_Command Line_Alias_Io Redirection - Fatal编程技术网

Linux 别名<;cmd>;至;那么做X<;cmd>&引用;透明地

Linux 别名<;cmd>;至;那么做X<;cmd>&引用;透明地,linux,bash,command-line,alias,io-redirection,Linux,Bash,Command Line,Alias,Io Redirection,标题很烂,但我不确定我想做什么的正确术语,如果我知道我现在可能已经找到了答案的话 问题: 由于每次扫描端口23时都有一个过于热心的端口扫描程序(客户的网络监视器)和一个过于简单的telnet守护程序(busybox linux),telnetd会启动另一个/bin/login实例,等待用户通过telnet输入 由于端口扫描程序实际上没有尝试登录,因此没有会话,因此不会出现会话超时,因此我们很快就会看到运行/bin/login的无数僵尸副本 我想做什么: telnetd为我们提供了启动其他东西的选

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

问题:

由于每次扫描端口23时都有一个过于热心的端口扫描程序(客户的网络监视器)和一个过于简单的telnet守护程序(busybox linux),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”

但这似乎也不起作用(同样,没有错误,但没有登录提示)。我肯定这里少了一些明显的皱纹

该系统是运行Busybox的嵌入式Linux 2.6.x,因此保持简单是首选


编辑:好的,我是一个不让脚本可执行的傻瓜,完成后我会得到
登录:
提示,但在输入用户名后,我不会得到任何进一步的提示。

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

至于
-l
:我猜它试图执行命令
killall-q login/bin/login
(这是一个词)


由于这是一个嵌入式系统,它可能不会写入日志。但无论如何,您都应该检查
/var/log
以查看错误消息。如果没有,您应该能够使用文档对其进行配置:

对,我修复了它,因为我怀疑我丢失了一条皱纹:

exec/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 connect上,我们得到了以下信息:

**MOTD Etc...**

Killing old logins......done

login: zero_cool
password: 
我们可以像往常一样登录


我唯一没有弄清楚的是我们是否能检测到
/bin/login
(如果我们杀死它)的退出状态,并打印一条消息说
太慢了,笨蛋或类似。TBH虽然,这是一个可以等待雨天的好消息,我只是很高兴我们的东西不能再通过Telnet进行DDOS攻击了

您是否为脚本设置了执行位?有人仍然使用
telnet
来执行最初创建的脚本?登录?哇,
-l
标志是否采用了第二个示例中的shell脚本文本?我希望它需要一些可以执行的东西(比如二进制或可能是带有执行位和适当shebang行的shell脚本)。现在获取
登录:
,但不再进一步。脚本现在可执行-请参阅编辑。已启用通过syslog进行日志记录,但未显示来自登录的消息。请在脚本中放入一组
echo 1>/tmp/debug
,以查看是否调用了它以及调用的距离。