我正在尝试弄清楚 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
程序,显示登录提示。