以 linux 用户身份 Telnet 登录并出现提示

以 linux 用户身份 Telnet 登录并出现提示

我正在尝试弄清楚 Ubuntu 服务器上端口 23 的设置。它是由我的前任以相当棘手的方式设置的,现在我需要将功能迁移到新机器。我大致知道它是如何运作的,但我不知道细节,这是我现在需要知道的。粗略的功能是这样的:

  • 用户通过端口 23 以常规 Linux 用户身份登录服务器(始终使用同一用户)。下面有更多详细信息...
  • 登录后,系统会提示他们输入一些信息
  • 他们根据提示输入信息,然后将其注销

我可以看到默认的 shell 是 bash(出于隐私原因修改了用户名和号码):

# grep theuser /etc/passwd
theuser:x:1111:1111::/home/theuser:/bin/bash

我可以看到该.bash_profile脚本在登录时将用户重定向到提示:

$ cat /home/theuser/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/scripts

export PATH
unset USERNAME

/home/theuser/scripts/prompts
exit

所以这并没有什么神秘之处。然而我的问题是端口 23 到底如何链接到普通 Linux 用户的登录提示符?我确信是这种情况,因为我可以按如下方式登录:

$ telnet localhost 23
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
machinename login: theuser
Password:
Last login: Fri Mar 24 14:25:48 CST 2017 from localhost on pts/5
prompt 1:

如果我检查端口 23 上运行的进程,则会得到:

$ netstat -tulpn | grep 23
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      2222/inetd

所以连接是由 处理的inetd。但这对我没有帮助,因为我不知道inetd在做什么。如果我查看/etc/inetd.conf,我会看到以下行:

telnet      stream  tcp nowait  root    /usr/sbin/tcpd  /usr/sbin/in.telnetd

但这并没有多大帮助。我已经知道telnet正在这台机器上运行。我需要知道如何telnet配置将用户重定向到登录提示。

答案1

让 TELNET 服务器侦听 TCP 端口 23 并不“棘手”。这是普通的(只要不考虑本世纪使用 TELNET 的异常现象)。那就是众所周知的端口号用于 TELNET 服务。

并且in.telnetd没有“配置”为将用户“重定向”到登录提示。向连接的客户端呈现登录界面是它能做什么。它的手册页(qv)非常明确:

Telnetd 的运行方式是为客户端分配一个伪终端设备 […],然后创建一个登录进程,该进程将伪终端的从属端作为 stdin、stdout 和 stderr。 Telnetd 操纵伪终端的主端,实现 telnet 协议并在远程客户端和登录进程之间传递字符。

登录流程正在运行login程序,显示登录提示。

相关内容