ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

银河麒麟V10安装配置Telnet服务全攻略:从基础安装到安全加固

银河麒麟V10安装配置Telnet服务全攻略:从基础安装到安全加固

1. 项目概述与背景

最近在给一台新部署的银河麒麟高级服务器操作系统V10(KylinosV10)做基础环境初始化,有个老旧的业务系统需要用到telnet服务进行设备管理。虽然现在SSH是远程管理的绝对主流,但架不住一些特定场景下,比如调试某些只支持telnet的嵌入式设备、或者维护一些遗留系统时,telnet这个“古董”协议还是绕不开的。在银河麒麟V10上,默认是没有安装telnet客户端和服务端的,需要手动操作。这活儿看起来简单,就是几条命令的事,但实际做下来,从包名确认、依赖解决到服务配置,还是有几个细节值得拿出来聊聊,尤其是对于刚接触国产操作系统的朋友。

简单来说,这个任务就是在银河麒麟V10服务器版上,安装并启用telnet的客户端(用于连接其他主机)和服务器端(允许其他主机连接本机)。整个过程会涉及到使用系统自带的包管理器(通常是yum或dnf,银河麒麟V10基于CentOS,所以是yum)、服务管理(systemctl)以及一些基础的安全配置考量。无论你是运维工程师、系统管理员,还是需要在国产化环境中部署应用的开发者,掌握这套标准化的软件安装和服务管理流程,都是必备技能。下面我就把这次实操的完整过程、踩过的坑以及一些优化建议,详细拆解一遍。

2. 核心需求与方案选型解析

2.1 为什么在SSH时代还要用Telnet?

首先得明确一点,除非业务强制要求,否则绝不建议在生产环境启用telnet服务端。原因很简单,telnet协议的所有通信(包括用户名和密码)都是明文传输的,这在现代网络环境下等同于“裸奔”,安全隐患极大。那为什么还要安装它呢?需求主要来自两方面:

  1. 客户端需求:作为管理机,去连接那些只开放了telnet端口的老旧网络设备(如交换机、路由器、工控设备等)。这时,我们只需要在本机安装telnet客户端即可。
  2. 服务器端需求:某些遗留的应用程序或测试环境,可能硬编码了使用telnet协议进行通信。在受控的内网环境(如物理隔离的测试网)中,临时启用用于调试或兼容性测试。

对于需求1,我们只安装telnet客户端包。对于需求2,则需要额外安装telnet-server服务端包并启动服务。本次操作假设两种需求都存在,因此会完成全套安装和配置。

2.2 银河麒麟V10的软件源与包管理

银河麒麟高级服务器操作系统V10是基于CentOS(或类似RHEL系)构建的,因此其底层的包管理工具是yum(或dnf,但V10默认仍是yum)。软件包的名字、安装方式与CentOS/RedHat基本一致。

这里有一个关键点:确保你的系统已经正确配置了可用的软件源(repository)。新安装的银河麒麟系统通常会自带官方的源,但有些定制化镜像可能为了精简而移除。你可以通过以下命令检查:

yum repolist all

如果能看到启用(enabled)的仓库列表,如baseupdates等,就说明源是正常的。如果列表为空或报错,就需要先联系系统提供方或根据官方文档配置软件源。这是后续所有安装操作的基础。

方案选型上,没有其他选择,就是通过yum来安装由麒麟官方或上游社区维护的telnettelnet-server软件包。这是最稳定、最合规的方式。

3. 详细安装步骤与操作实录

3.1 环境准备与检查

开始之前,请确保你拥有系统的root权限。所有安装操作都需要在管理员身份下进行。

首先,更新一下yum的缓存,确保获取到最新的软件包列表信息。这是一个好习惯,尤其是在新系统上。

yum makecache

或者使用更全面的更新命令:

yum update -y

如果当前没有其他紧急任务,执行全面更新可以让系统保持最新状态。如果只是安装telnet,makecache就足够了。

3.2 安装Telnet客户端

安装客户端非常简单,一条命令搞定:

yum install -y telnet

命令解析:

  • yum install: yum包管理器的安装命令。
  • -y: 自动回答“yes”,在确认安装时无需手动输入。在脚本中或确定要安装时使用它非常方便。
  • telnet: 客户端软件包的名称。

安装完成后,可以通过以下命令验证客户端是否安装成功:

telnet --help # 或尝试连接一个不存在的地址,看命令是否可用 telnet 127.0.0.1 9999

如果出现telnet: connect to address 127.0.0.1: Connection refused之类的提示(表示连接被拒绝,而不是“命令未找到”),那就说明telnet客户端命令已经可用了。

3.3 安装与配置Telnet服务端

第一步:安装服务端包

yum install -y telnet-server

系统会自动安装telnet-server包及其可能需要的依赖。

第二步:理解Telnet服务的守护进程在RHEL/CentOS系(包括银河麒麟)中,telnet-server包提供的是由xinetd(扩展互联网服务守护进程)管理的服务。xinetd本身是一个超级守护进程,用于管理很多不常使用的、轻量级的网络服务(如telnet、tftp等),只在有连接请求时才激活对应的服务进程,节省系统资源。

因此,我们需要确保xinetd服务已安装并启用。通常安装telnet-server时会自动安装xinetd作为依赖,但最好确认一下:

systemctl status xinetd

如果未安装,则手动安装:

yum install -y xinetd

第三步:配置Telnet服务Telnet服务的配置文件位于/etc/xinetd.d/目录下,安装包会提供一个默认的配置文件telnet

cat /etc/xinetd.d/telnet

默认配置可能是禁用的(disable = yes)。我们需要编辑这个文件来启用服务。

vi /etc/xinetd.d/telnet

找到disable = yes这一行,将其改为disable = no。如果需要,你还可以修改其他参数,例如:

  • flags = REUSE: 设置套接字可重用。
  • socket_type = stream: 使用流式套接字(TCP)。
  • wait = no: 服务不等待,即xinetd会为每个新的连接请求派生一个新的服务进程。
  • user = root: 运行服务的用户(出于安全考虑,有些场景会改为非root用户,但telnet本身设计就需要root权限来登录任意用户)。
  • server = /usr/sbin/in.telnetd: telnet守护进程的位置。
  • log_on_failure += USERID: 在日志中记录登录失败的用户ID。

一个启用后的基础配置示例如下:

service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no }

编辑完成后,保存退出。

注意:直接以root运行服务是安全风险之一。但在严格的telnet使用场景下(如隔离测试网),这可能不是首要考虑。如果安全要求高,应考虑彻底不使用telnet。

第四步:启动服务首先,需要启动超级守护进程xinetd,并设置其开机自启。

systemctl enable xinetd --now

--now参数表示同时立即启动服务。

然后,由于修改了xinetd的子服务配置(telnet),需要重新加载xinetd的配置,使其生效。

systemctl reload xinetd

或者重启xinetd服务:

systemctl restart xinetd

第五步:防火墙配置(关键步骤)银河麒麟V10默认可能启用firewalldiptables作为防火墙。telnet默认使用TCP 23端口,必须允许该端口的入站连接,否则外部无法访问。

如果使用firewalld(默认):

# 查看当前防火墙状态和区域 firewall-cmd --state firewall-cmd --get-active-zones # 添加telnet服务(firewalld预定义了telnet服务,指向23/tcp) firewall-cmd --permanent --add-service=telnet # 或者直接添加端口 # firewall-cmd --permanent --add-port=23/tcp # 重新加载防火墙配置使规则生效 firewall-cmd --reload # 验证规则是否添加成功 firewall-cmd --list-services # 或 firewall-cmd --list-ports

如果使用iptables(较旧或特定定制版本):需要直接添加iptables规则,并确保规则持久化。

# 添加允许23端口的规则 iptables -I INPUT -p tcp --dport 23 -j ACCEPT # 保存iptables规则(银河麒麟上保存命令可能因版本而异,通常是) service iptables save # 或 iptables-save > /etc/sysconfig/iptables

实操心得:很多朋友安装配置完服务后,发现本地telnet 127.0.0.1 23能通,但外部机器连不上,十有八九就是防火墙端口没开。务必养成检查防火墙规则的习惯。可以使用ss -tlnp | grep :23netstat -tlnp | grep :23查看23端口是否处于监听(LISTEN)状态。

4. 功能验证与基础测试

4.1 服务状态检查

  1. 检查xinetd及端口监听

    systemctl status xinetd ss -tlnp | grep :23

    如果状态为active (running)且能看到xinetd进程在监听23端口,说明服务已正常启动。

  2. 本地回环测试: 在服务器本机上测试telnet服务是否响应。

    telnet 127.0.0.1 23

    如果连接成功,你会看到类似以下的提示,这表示telnet服务端正在工作:

    Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. Kylinos Linux release V10 (Tercel) Kernel 4.19.90-... on an x86_64 login:

    此时,你可以输入一个有效的系统用户名和密码进行登录测试。注意:root用户默认可能被PAM(可插拔认证模块)策略禁止通过telnet登录,这是安全加固的一部分。可以尝试用普通用户登录。

4.2 远程连接测试

从网络中的另一台Linux或Windows客户端进行测试。

  • Linux客户端
    telnet <服务器IP地址> 23
  • Windows客户端: 现代Windows默认未安装telnet客户端。可以在“控制面板”->“程序”->“启用或关闭Windows功能”中勾选“Telnet客户端”进行安装。安装后,在CMD或PowerShell中执行:
    telnet <服务器IP地址> 23

成功连接并登录即表示整个telnet服务安装配置完成。

5. 安全加固与生产环境考量

再次强调,在互联网或非受信网络环境中启用telnet是极其危险的行为。如果因特殊原因必须在某个环境使用,请务必考虑以下加固措施:

  1. 使用防火墙严格限制源IP:不要对所有IP开放23端口。使用firewalld的--add-rich-rule或iptables的-s参数,只允许特定的管理IP或IP段访问。

    # firewalld 示例:仅允许192.168.1.100访问 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="telnet" accept' firewall-cmd --reload
  2. 修改默认端口(安全性提升有限):修改/etc/services文件可以改变telnet的公认端口,但这不是真正的安全措施,因为端口扫描很容易发现。修改方法复杂且可能影响其他组件,一般不推荐。

  3. 使用TCP Wrappers进行额外控制xinetd通常支持TCP Wrappers。可以通过配置/etc/hosts.allow/etc/hosts.deny文件来进一步控制访问。

    # /etc/hosts.allow in.telnetd: 192.168.1.0/255.255.255.0 # /etc/hosts.deny in.telnetd: ALL

    上述配置允许192.168.1.0/24网段,拒绝所有其他。注意,TCP Wrappers的优先级和兼容性需要根据系统具体配置确认。

  4. 强制使用SSH替代:最根本的解决方案。向业务方说明安全风险,推动将客户端或服务端协议升级为SSH。对于需要连接老旧设备的情况,可以考虑在网络上部署一个“跳板机”,该跳板机通过SSH管理,并在其上安装telnet客户端用于连接内网老旧设备。

6. 常见问题排查与解决实录

在实际操作中,你可能会遇到以下问题:

6.1 连接被拒绝 (Connection refused)

  • 现象telnet <IP> 23后立刻返回Connection refused
  • 可能原因及排查
    1. 服务未启动:检查xinetd服务状态和23端口监听状态(ss -tlnp | grep :23)。
    2. 配置文件未启用:确认/etc/xinetd.d/telnetdisable = no
    3. 防火墙拦截:这是最常见的原因。检查本地防火墙规则,并确认客户端与服务器之间的网络路径上没有其他防火墙(如云平台安全组、硬件防火墙)拦截了23端口。

6.2 连接超时 (Connection timed out)

  • 现象:连接长时间无响应,最终超时。
  • 可能原因及排查
    1. 网络不通:使用ping命令检查基础网络连通性。
    2. 中间防火墙丢弃包:网络路径上的防火墙直接丢弃了数据包,而非拒绝。需要逐段排查网络设备策略。
    3. 服务绑定IP错误:默认xinetd服务监听在所有IP(0.0.0.0)上。检查配置是否有bindonly_from等指令限制了监听地址。

6.3 登录失败或立即断开

  • 现象:能连接到登录提示符,但输入用户名/密码后登录失败,或连接立即关闭。
  • 可能原因及排查
    1. PAM安全策略限制:检查/etc/securetty文件,该文件列出了允许root登录的终端设备。默认可能不包含pts/*(伪终端),导致root无法通过telnet登录。不建议修改此文件来允许root登录,应使用普通用户
    2. 用户shell不可用:检查/etc/passwd中该用户指定的shell(如/bin/bash)是否存在且可执行。
    3. selinux影响:银河麒麟V10可能默认启用SELinux。SELinux可能会阻止xinetdin.telnetd进程的正常操作。可以临时将SELinux设置为宽容模式测试:
      setenforce 0
      注意:这仅是临时测试方法。生产环境如需调整,应使用正确的SELinux布尔值或策略模块,如setsebool -P xinetd_disable_trans=1(具体策略名需根据系统审计日志ausearchsealert确定)。

6.4 软件包安装失败

  • 现象yum install telnetyum install telnet-server失败。
  • 可能原因及排查
    1. 软件源问题yum repolist all检查源是否可用。尝试yum clean all && yum makecache
    2. 包名差异:极少数情况下,包名可能有细微差别。可以使用yum search telnetyum list available | grep telnet来搜索确切的包名。
    3. 依赖冲突:系统可能与其他软件包存在依赖冲突。仔细阅读yum报错信息,或尝试使用yum install -y telnet-server --skip-broken(谨慎使用)。

7. 进阶:将Telnet服务封装为Systemd服务(可选)

虽然通过xinetd管理是标准方式,但有些人更喜欢用systemd直接管理服务,感觉更“现代”和统一。我们可以为telnet创建一个自定义的systemd服务单元。

  1. 创建服务单元文件

    vi /etc/systemd/system/telnet.service
  2. 写入以下内容

    [Unit] Description=Telnet Server After=network.target [Service] Type=simple ExecStart=/usr/sbin/in.telnetd -debug 23 StandardInput=socket StandardOutput=inherit StandardError=journal Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target

    这里使用-debug参数让in.telnetd在前台运行,便于systemd管理。端口直接指定为23。

  3. 禁用xinetd的telnet配置,启用新的systemd服务

    # 将xinetd中的telnet服务改回禁用 sed -i 's/disable = no/disable = yes/' /etc/xinetd.d/telnet systemctl reload xinetd # 启用并启动自定义的telnet服务 systemctl daemon-reload systemctl enable telnet.service --now systemctl status telnet.service

注意事项:这种方式绕过了xinetd,一些原本由xinetd提供的访问控制功能(如/etc/xinetd.d/telnet中的only_from等)将失效,需要依靠防火墙或TCP Wrappers(如果编译时支持)来实现。除非你对systemd管理有强烈偏好,否则对于telnet这种服务,沿用传统的xinetd管理方式更为常见和简单。

整个安装和配置过程就完成了。核心其实就是理解银河麒麟V10作为RHEL系发行版的软件管理逻辑,以及xinetd这个超级守护进程的工作机制。安全永远是悬在头上的剑,时刻提醒自己telnet的局限性,并在条件允许时尽快迁移到更安全的协议上。

返回列表