在Linux系统中,修改telnet密码的核心逻辑并非直接修改telnet服务的独立密码,而是通过修改系统用户的登录密码来实现,因为telnet服务默认依赖系统的PAM(可插拔认证模块)进行用户认证,telnet协议本身存在明文传输密码的安全风险,因此在实际生产环境中强烈建议使用更安全的SSH协议替代,但若因兼容性或旧系统需求必须使用telnet,需确保在可信网络环境中操作,并严格限制登录用户权限,以下是详细的操作步骤和注意事项,涵盖服务安装、用户管理、配置优化及安全加固等关键环节。
检查并安装telnet服务
大多数现代Linux发行版(如Ubuntu、CentOS等)默认不安装telnet服务,需手动安装,不同发行版的安装命令和包管理工具存在差异,具体如下:
基于RPM的发行版(如CentOS、Red Hat、Fedora)
使用yum
或dnf
包管理器安装telnet服务器端组件:
# 更新软件包缓存 sudo yum update -y # 安装xinetd(若使用xinetd管理telnet服务) sudo yum install xinetd -y # 安装telnet-server sudo yum install telnet-server -y
基于DEB的发行版(如Ubuntu、Debian)
使用apt
包管理器安装telnet相关服务:
# 更新软件包列表 sudo apt update # 安装telnetd(Ubuntu/Debian的telnet服务器包) sudo apt install telnetd -y
验证安装
安装完成后,检查telnet服务是否已正确安装:
# 查看telnet-server软件包信息(RPM系统) rpm -qa | grep telnet-server # 查看telnetd软件包信息(DEB系统) dpkg -l | grep telnetd
若返回包含telnet-server
或telnetd
的行,表示安装成功。
创建或修改系统用户
telnet登录的密码即为系统用户的登录密码,因此需先确保存在允许telnet登录的用户,或为已有用户设置密码。
创建新用户(可选)
若需新增telnet用户,使用useradd
命令(推荐使用adduser
交互式创建,更友好):
# 创建用户(telnetuser) sudo useradd -m telnetuser # 设置用户初始密码(必须设置,否则无法登录) sudo passwd telnetuser # 按提示输入两次新密码
参数说明:-m
表示自动创建用户主目录(若不添加,用户可能无法正常登录)。
修改已有用户密码
若需修改现有用户的telnet登录密码,直接使用passwd
命令:
# 修改目标用户密码(user1) sudo passwd user1 # 按提示输入两次新密码
注意:普通用户只能修改自己的密码(无需sudo
),root用户可修改任意用户密码。
配置telnet服务允许登录
默认情况下,telnet服务可能因安全策略限制登录(如禁止root用户登录、未启用服务等),需通过配置文件调整。
检查telnet服务管理方式
Linux中telnet服务可通过两种方式运行:xinetd超级服务器(传统方式)或独立运行(现代系统较少使用),需先确认当前管理方式:
-
xinetd管理:检查
/etc/xinetd.d/telnet
文件是否存在:ls /etc/xinetd.d/telnet
若文件存在,表示通过xinetd管理;若不存在,可能是独立运行或未安装。
-
独立运行:检查
/etc/init.d/telnet
或systemctl
单元文件:systemctl status telnet.socket # 或 telnet.service
配置xinetd管理的telnet服务(常见)
若通过xinetd管理,编辑/etc/xinetd.d/telnet
文件:
sudo vim /etc/xinetd.d/telnet ```类似如下,需确保`disable = no`(启用服务),并注释或删除`no_access`和`only_from`等限制项(若有): ```ini service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no # 关键:设置为no启用服务 # 可选:限制允许登录的IP(仅允许内网192.168.1.0/24) # only_from = 192.168.1.0/24 }
配置独立运行的telnet服务(较少见)
若独立运行,需创建或修改/etc/sysconfig/telnet
(CentOS)或/etc/default/telnet
(Ubuntu)文件,确保TELNET_ENABLE=yes
:
# CentOS系统 sudo vim /etc/sysconfig/telnet TELNET_ENABLE=yes # Ubuntu系统 sudo vim /etc/default/telnet RUN_DAEMON=yes
禁止root用户telnet登录(安全加固)
出于安全考虑,建议禁止root用户通过telnet直接登录,仅允许普通用户登录后通过su
切换至root,操作方法:
- 编辑
/etc/securetty
文件,注释或删除pts/0
、pts/1
等虚拟终端行(仅保留物理终端如tty1
、tty2
等):sudo vim /etc/securetty # 在文件开头添加#注释所有pts开头的行, # pts/0 # pts/1 # ...
修改后,root用户仅能通过物理终端或SSH登录,无法通过telnet远程登录。
启动并启用telnet服务
配置完成后,需启动服务并设置开机自启。
xinetd管理方式
# 重启xinetd服务加载配置 sudo systemctl restart xinetd # 设置xinetd开机自启 sudo systemctl enable xinetd # 检查服务状态(应显示active) sudo systemctl status xinetd
独立运行方式
# 启动telnet服务 sudo systemctl start telnet.socket # 或 telnet.service # 设置开机自启 sudo systemctl enable telnet.socket # 检查服务状态 sudo systemctl status telnet.socket
检查端口监听
telnet默认使用23端口,确保服务已监听该端口:
# 使用netstat检查 sudo netstat -tulnp | grep 23 # 或使用ss命令(推荐) sudo ss -tulnp | grep 23
若返回类似LISTEN 0 128 *:23 *:*
的输出,表示23端口已正常监听。
测试telnet登录
本地测试
在Linux服务器本地,使用telnet
命令连接本地服务:
telnet localhost
输入用户名和密码(步骤二中设置的账户),若登录成功,会显示类似Login successful
的提示,并进入shell界面。
远程测试
在另一台设备(如Windows/Linux客户端),通过IP地址连接服务器:
telnet <服务器IP地址>
telnet 192.168.1.100
,输入用户名和密码验证登录是否正常。
常见问题排查
- 登录失败提示“Login incorrect”:检查密码是否正确,用户是否被锁定(
passwd -S username
查看状态,若为L
表示锁定,需usermod -U username
解锁)。 - 连接超时:检查防火墙是否开放23端口(如CentOS:
sudo firewall-cmd --add-port=23/tcp --permanent
;Ubuntu:sudo ufw allow 23/tcp
)。 - “Connection refused”:确认telnet服务已启动(步骤四),或检查
/etc/xinetd.d/telnet
中disable
是否为yes
。
安全性建议
由于telnet协议所有数据(包括密码)均明文传输,存在严重安全隐患,建议:
- 替换为SSH:优先使用SSH(默认端口22)替代telnet,可通过
sudo apt install openssh-server
(Ubuntu)或sudo yum install openssh-server
(CentOS)安装SSH服务。 - 限制登录IP:在telnet配置文件中通过
only_from
参数限制允许登录的IP地址,减少暴露面。 - 定期更新密码:通过
chage
命令设置密码过期策略(如sudo chage -M 90 username
,90天后强制改密)。 - 最小权限原则:仅授予telnet用户必要权限,避免使用root账户直接登录。
相关问答FAQs
Q1:telnet密码修改后登录失败,提示“Login incorrect”,如何排查?
A:首先确认密码是否正确(可通过ssh username@localhost
测试SSH登录是否正常,排除键盘输入错误);其次检查用户状态,使用passwd -S username
查看是否被锁定(显示L
表示锁定,需执行usermod -U username
解锁);然后检查/etc/securetty
文件,确认用户是否被禁止telnet登录(如root用户需注释pts/
相关行);最后检查防火墙是否拦截,使用telnet localhost 23
测试本地连接,若失败则可能是服务未启动,需执行systemctl restart xinetd
或systemctl restart telnet.socket
。
Q2:如何禁止特定用户通过telnet登录?
A:可通过两种方式实现:
- 锁定用户账户:使用
usermod -L username
锁定用户,锁定后该用户无法通过telnet、SSH等方式登录,解锁命令为usermod -U username
。 - 限制登录终端:编辑
/etc/securetty
文件,添加pts/
限制规则(如仅允许pts/0
和pts/1
,其他终端禁止),或直接删除用户对应的终端行(如删除pts/2
,则用户无法通过pts/2登录)。 - 修改PAM配置:编辑
/etc/pam.d/login
文件,添加auth required pam_listfile.so item=user sense=deny file=/etc/telnet_users onerr=succeed
,并在/etc/telnet_users
文件中添加禁止登录的用户名(每行一个),实现更精细的控制。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/17745.html