ILD

login命令与telnet登录
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2024-1-19 站点:Inside Linux Development

之前一直好奇,telnet和linux系统等,登录功能到底是哪个模块负责的。

比如,对于telnet连接,是telnet负责吗,还是telnet启动的shell进程负责。


启动一个telnet服务进程:

# telnetd


然后在另外一个主机登录,弹出登录提示:


Xrouter login:


此时在telnet服务设备执行pstree:

# pstree

init-+-boa

     |-endpointd

     |-led

     |-logd

     |-netd-+-dhcp6c

     |      |-dnsmasq

     |      |-2*[hostapd]

     |      `-udhcpc

     |-ntpd

     |-sh---pstree

     |-telnetd---login

     `-ubusd


可以看到telnetd启动了一个login进程。这样就知道了login命令。


login命令

login命令是util-linux的一个工具,用来登录一个系统,用户输入用户名和密码,校验ok后,login命令,将执行一个shell替换自己。

login不带参数的时候,由登陆者输入用户名,login也可以带一个username参数,则用户只需要输入这个用户的密码,来登录特定账户。


由此可知,telnetd在收到telnet请求后,创建login子进程,处理登录任务。


# telnetd --help

BusyBox v1.33.2 multi-call binary.


Usage: telnetd [OPTIONS]


Handle incoming telnet connections


        -l LOGIN        Exec LOGIN on connect

        -f ISSUE_FILE   Display ISSUE_FILE instead of /etc/issue

        -K              Close connection as soon as login exits

                        (normally wait until all programs close slave pty)

        -p PORT         Port to listen on

        -b ADDR[:PORT]  Address to bind to

        -F              Run in foreground

        -i              Inetd mode

        -w SEC          Inetd 'wait' mode, linger time SEC

        -S              Log to syslog (implied by -i or without -F and -w)



也可以使用-l选项,来指定特定的登录进程,指定sh,可以直接跳过登录。


参考:

https://github.com/util-linux/util-linux/blob/master/login-utils/login.c

https://man7.org/linux/man-pages/man1/login.1.html



Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.