最近公司托管在异地的若干台服务器的OpenSSH被服务商通知存在用户枚举漏洞(CVE-2018-15473),于是就开始着手升级服务器上的OpenSSH。
由于服务器的安全设定,只能通过外网的VPN进行访问,服务器本身是上不了网的,所以升级包只能在本地下载好之后,用SCP复制上去
查询相关资料的时候,看到说启用telnet后再更新,以防止ssh挂掉无法远程,于是接下来就是开启telnet的过程。
安装telnet
准备好telnet的相关安装包
telnet-server-0.17-65.el7_8.x86_64.rpm
telnet-0.17-65.el7_8.x86_64.rpm
xinetd-2.3.15-14.el7.x86_64.rpm
然后用rpm命令去安装
[root@linux-node3 ~]# rpm -ivh telnet-server-0.17-65.el7_8.x86_64.rpm
[root@linux-node3 ~]# rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm
[root@linux-node3 ~]# rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm
配置telnet
安装完成之后,接下来就是配置环节了。
启动telnet服务,并设置开机自动启动:
[root@linux-node3 ~]# systemctl enable xinetd
[root@linux-node3 ~]# systemctl enable telnet.socket
Created symlink from /etc/systemd/system/sockets.target.wants/telnet.socket to /usr/lib/systemd/system/telnet.socket.
[root@linux-node3 ~]# systemctl start telnet.socket
[root@linux-node3 ~]# systemctl start xinetd
启动后,查看端口23号是否已经打开:
[root@linux-node3 ~]# netstat -lntp|grep 23
tcp6 0 0 :::23 :::* LISTEN 1/systemd
如上所示,telnet已经启动成功。
防火墙配置
Centos7 默认是启用防火墙的,所以想要访问23号端口,得在防火墙上打开23号端口,或者干脆关掉防火墙
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
允许telnet端口
firewall-cmd --zone=public --add-port=23/tcp --permanent
firewall-cmd --reload
注意,一定要reload,才能让规则生效
配置用户登录
默认情况下,telnet是不允许root用户进行登录的,表现在用户名和密码都正确,但是服务器提示Login incorrect。
为了能够正常使用,有下面两种办法:
- 建立一个普通用户,使用该用户通过telnet登录,然后使用su切换到root用户(推荐)
- 直接配置root用户登录(不安全,不推荐)
由于我们是内网环境,所以就直接使用第二种办法,配置root登录。
然后重点来了,不要轻信网上的修改/etc/pam.d/login文件。我这边的服务器情况则是:使用该方法,连着SSH的时候telnet也可以连接,ssh断开后telnet也没法连接😓。另外搭建了一台同样环境的虚拟机测试则是完全不起作用,即使你输入了正确的用户名和密码,但是服务器依然提示Login incorrect
我严重怀疑,你们真的就试过了可以,还是只是单纯的复制粘贴,所以,没试过的别去浪费时间了
真正能起作用的是修改/etc/pam.d/remote文件:
[root@localhost ~]# cat /etc/pam.d/remote
#%PAM-1.0
auth required pam_securetty.so
auth substack password-auth
auth include postlogin
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
把auth required pam_securetty.so
这行注释掉然后保存,telnet就可以用root用户连接了!
测试连接
可以直接在服务器上进行测试
[root@localhost ~]# telnet 127.0.0.1 23
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Kernel 3.10.0-1160.45.1.el7.x86_64 on an x86_64
localhost login: root
Password:
Last login: Tue Nov 2 16:48:37 from 10.37.129.2
[root@localhost ~]#
也可以使用远程计算机进行测试
root@5df89c0059d7:/# date
Tue Nov 2 16:50:21 CST 2021
root@5df89c0059d7:/# telnet 10.37.129.3
Trying 10.37.129.3...
Connected to 10.37.129.3.
Escape character is '^]'.
Kernel 3.10.0-1160.45.1.el7.x86_64 on an x86_64
localhost login: root
Password:
Last login: Tue Nov 2 16:48:57 from localhost
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]#
题外话
- 有人的情况是,在/etc/securetty中添加pts就可以登录。但是他的服务器系统为CentOS release 5.11,这不在本文的讨论范围之内。有兴趣的可以自行研究:telnet登录Linux上报Login incorrect【附源码】_阿里云顾问_51CTO博客
- 大部分文章指出,需要修改/etc/secrueety,加入pts/1等,实际上我配置下来没改动这个文件,所以要不要加入,是个问号,首先先尝试不要改动,如果不行,再进行相应的尝试
致谢
[telnet使用root登陆报“Login incorrect”_Aevery的博客-CSDN博客](