OpenWRT编译前启用Telnet

        有些时候,我们希望在生成路由器密码后仍能够使用OpenWRT提供的Telnet服务。但是OpenWRT默认将会在用户修改密码后终止Telnet服务,本文将会指导你如何在编译固件时永久保留Telnet服务并追加Telnet的登录验证。

软件平台:OpenWRT 14.07
硬件平台:Atheros ar71xx ar9331

1.使OpenWRT编译login程序

相信谁都不希望别人可以轻易得到我们路由器的终端控制权,因此有必要在Telnet的接入阶段提供用户登入的功能。然而OpenWRT默认不会为Telnet编译login这个程序(Linux下提供系统用户登录的程序),那么为了让Telnet能够借用login来验证用户的密码,我们就需要让OpenWRT将login这个程序编译到系统中。

首先,我们在编译目录键入命令
make menuconfig

来进入OpenWRT编译配置界面。随后请进入Base system,然后找到busybox,然后按下回车,之后你会看到一个Busybox的组件设置菜单,请在Login/Password Management Utilities上按下回车,然后选中这些选项:
-login
-Run logged in session in a child process
-Support for PAM (Pluggable Authentication Modules)
-Support for login scripts
-Support for /etc/nologin
-Support for /etc/securetty

如下图
OpenWRT_BBox_Login

 

2.修改OpenWRT源代码,使Telnet总是启动

默认OpenWRT在用户设置密码后就会禁用Telnet,从系统第二次启动开始用户就会发现自己无法启用Telnet服务,原因就在于Telnet的启动脚本: /etc/init.d/telnet,我们可以在OpenWRT的源代码的package/utils/busybox/files文件夹中找到这个启动脚本。

打开脚本可以看到这样的内容:
20150405_OpenWRT_telnet_init.d

这个文件中,start_service()区段即为启动服务的函数,可以看到在其中包含有if...then...fi的判断函数,它的作用是判断系统中root用户不存在密码,满足这个条件才会启动telnet。很明显,若要使telnet服务一直可用,需要移除这个判断,最简单的方法是将if区段中的判断部分注释掉,如下图所示:
20150405_OpenWRT_telnet_init.d_mod

 

3.使telnet启用登录验证

现在我们有了用来验证的login,有了无论如何都能够启动telnet的启动脚本。接下来就是让telnet来调用login从而实现验证了。

那么经过如上修改后,OpenWRT的Telnet就可以在任意时刻登录了吗? 答案是否定的,如果你修改了密码,那么登录后就只能看到一行Login failed。telnet默认在登录时会执行 /bin/login.sh 这个脚本(我们可以在OpenWRT的源代码的package/base-files/files/bin中找到这个脚本),但是这个脚本中有这么一段:
20150405_OpenWRT_login.bin_org

在这个脚本的上方有个if判断由于验证系统是否存在密码,如果存在密码,就会在输出一行Login failed.后退出并断开连接。因此,我们需要修改这个判断区段中检测到密码后的行为,修改为下图所示:
20150405_OpenWRT_login.bin_mod

如果你已经完成上述3处的修改,现在你就可以编译永久提供telnet的OpenWRT ROM了。最终效果如下:

20150405_OpenWRT__telnet_Login

 本文终

 


  请注意,本站的所有文章均要求阁下在转载时注明出处和原作者,阁下转载本站文章即表示阁下同意并遵守此规程,除非特别注明转载出处,否则文章即为其发布者所著。本站及文章作者保留文章的著作权并有权在阁下违反上述规程时予以追究。

本文链接地址: OpenWRT编译前启用Telnet

2 Response(s)

  1. Ragexe says :

    2015年4月15日

    不错的方法,希望站长能够多发布技术文章,提高我等小白的水平!

    回复
    1. 穿越蓝天 says :

      2015年4月17日

      抱歉,系统默认开启的审核,所以你的回复出现的晚了些。以后如果我弄好了WordPress的验证码后就会开放回复。谢谢支持

      回复

发表评论

您的电子邮箱地址不会被公开。

*