浅谈linux开发板用户登录之getty/login/passwd

最近在排查一个关于用户登录的问题,需要了解开发板启动以及远程登录进行用户名和密码验证背后的原理。经过查询学习,简单总结如下


前言

在我们使用Linux设备时,开机启动后总会遇到一个用户登录界面,类似于QQ号登录一样,但是Linux输入密码是不显示输入的字符的,这个和Windows不一样,有的设备并未有这个过程,对于其背后的机制,大家是否清楚呢?


一、Linux开发板登录机制

  对于该内容我已经在我之前的文章中讲过了,需要了解的请阅读《简易根文件系统构建实验及过程详解

二、getty、login、passwd

  getty程序会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户名将作为参数传给login程序来验证用户的身份。

  在嵌入式Linux开发板中这两个程序来源于busybox。

1、getty

  作为系统启动所执行的程序,其具有以下功能

(1)打开tty行并设置其模式

(2)打印登录提示并获取用户名

(2)开始用户的登录过程


注意:网络登录的处理方式与控制台登录不同,因为为每个潜在的网络登录提供getty是不
切实际的。网络登录是通过互联网超级守护进程处理的,inetd使用telnet或rlogin通信
协议。

  Getty程序也可作为linux命令去使用,但不是所有的Linux系统都支持以下功能项:

Linux getty命令用于设置终端机模式,连线速率和管制线路。

getty指令是UNIX之类操作系统启动时所必须的3个步骤之一。

getty [-h][-d<组态配置文件>][-r<延迟秒数>][-t<超时秒数>][-w<等待字符串>][终端机编号][连线速率<终端机类型><管制线路>] 或 getty [-c<定义配置文件>]

参数:
-c<定义配置文件> 指定定义配置文件,预设为/etc/gettydefs。
-d<组态配置文件> 指定组态配置文件,预设为/etc/conf.getty。
-h 当传输速率为0时就强制断线。
-r<延迟秒数> 设置延迟时间。
-t<超时秒数> 设置等待登入的时间。
-w<等待字符串> 设置等待回应的字符串。

实例开启终端:
# getty tty7

2、login

  Linux的帐号验证程序是login,login会接收getty传来的用户名作为用户名参数。然后login会对用户名进行分析:如果用户名不是root,且存在/etc/nologin文件,login将输出nologin文件的内容,然后退出。这通常用来系统维护时防止非root用户登录。只有/etc/securetty中登记了的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录。/etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。

  在分析完用户名后,login将搜索/etc/passwd以及/etc/shadow来验证密码以及设置帐户的其它信息,比如:主目录是什么、使用何种shell。如果没有指定主目录,将默认为根目录;如果没有指定shell,将默认为/bin/bash。

  login程序成功后,会向对应的终端在输出最近一次登录的信息(在/var/log/lastlog中有记录),并检查用户是否有新邮件(在/usr/spool/mail/的对应用户名目录下)。然后开始设置各种环境变量:对于bash来说,系统首先寻找/etc/profile脚本文件,并执行它;然后如果用户的主目录中存在.bash_profile文件,就执行它,在这些文件中又可能调用了其它配置文件,所有的配置文件执行后,各种环境变量也设好了,这时会出现大家熟悉的命令行提示符,到此整个启动过程就结束了。

	如果命令行上没有给出参数,登录程序将提示输入用户名。如果文件“/etc/nologin”
存在且用户不是root用户,则“/etc/nolog”文件的内容将打印到屏幕上,并终止登录。如
果为登录文件“etc/usertty”的用户指定了特殊的访问限制,则必须满足这些限制,否则登
录将被拒绝,程序syslog将记录该尝试。如果用户是root用户,则登录必须在文件“etc/
securety”中列出的终端上。

	如果满足上述条件,将请求用户密码,然后将进行检查(如果此用户名需要密码)。
三次尝试登录失败后,响应变得非常缓慢,10次尝试后,登录失败。与往常一样,syslog
工具将报告所有登录失败。如果文件“.hushlogin”存在于用户的主目录中,则执行“安静”
登录,这将禁用邮件检查和打印上次登录时间以及当天的消息。否则,如果文件“var/log/
lastlog”存在,则打印上次登录时间,然后将当前登录记录在此文件中。如果当前登录名
不存在或文件“.hushlogin”存在,则记录在此文件中。

	此时,登录程序将执行标准管理任务。其中包括:
(1)设置tty的UID和GID

(2)保留终端环境变量(如果存在)。

(3)如果使用–p选项,则保留其他环境变量

(4)设置HOME、PATH、SHELL、TERM、MAIL和LOGNAME环境变量。

(5)对于普通用户,默认路径设置为“/usr/local/bin:/bin:/usr/bin:.”,对于root用户,
默认设置为“/sbin:/bin://usr/sbin”。

(6)如果这不是“quiet”登录,将打印当天的消息,并检查用户名为“/usr/spool/mail”的文
件,如果该文件的长度为非零,将打印消息。

(7)用户shell启动。shell在文件“/etc/passwd”中指定。如果未指定,登录将使用“/bin/
sh”作为默认shell。

(8)如果在“/etc/passwd”中没有为用户指定目录,则默认情况下登录将使用“/”作为用户的
主目录。

该程序在运行过程中会使用以下文件:
/etc/nologin
/etc/usertty
/etc/seruretty
.hushlogin
/var/log/lastlog
/etc/passwd

可参考阅读:https://blog.csdn.net/m_de_g/article/details/126444846

  login与getty类似,也可用Linux命令的方式去使用:

Linux login命令用于登入系统。

login指令让用户登入系统,您亦可通过它的功能随时更换登入身份。在Slackware发行版中
,您可在指令后面附加欲登入的用户名称,它会直接询问密码,等待用户输入。当/etc目录
里含名称为nologin的文件时,系统只root帐号登入系统,其他用户一律不准登入。

三、Linux加密算法 和 passwd命令

1、linux加密算法理解

  存储在linux中的密码必须是经过加密后的密码,linux通过加密算法来产生加密后的密码数据。

  目前linux中主要有两种加密算法;

	DES:这是传统的unix使用的加密算法,只支持八个字符内的密码数据,如果密码长度
超过八个字符,则会只匹配前八个字符,后面的字符可以忽略,该算法相对安全性较差。

	MD5:常见的linux中一般都使用该算法,支持255个字符的的密码数据。相对来说安全
性较高。

	DES和MD5都是单向式哈希算法,哈希算法是具有下面所有条件的数学算法:
	(1)输入长度可以不确定.但是输出长度一定是固定的;
	(2)输入不变,输出不变:输入改变,输出改变;
	(3)无法由输出推算出输入的值。

	现在的MD5算法中还有一种是产生一种固定长度的随机数,把随机数连同原始密码一同
交给单向哈希算法,计算出密码与随机数的哈希值

  默认情况下使用busybox生成的passwd工具去设置用户密码时,采用的是DES加密算法,具有安全漏洞,但是passwd命令中的-a选项可以解决该问题,该选项将会使用一种新的加密算法。

2、busybox工具生成的passwd工具

  passwd,一种计算机命令、文件的名称。passwd命令用来更改使用者的密码,passwd文件通常在Linux系统中,用户的关键信息被存放在系统的/etc/passwd文件中。

Usage: passwd [OPTIONS] [USER]

Change USER's password (default: current user)

-a ALG Encryption method
-d Set password to ''
-l Lock (disable) account
-u Unlock (enable) account

passwd root -d  无论后面任何参数都是去掉用户的密码,完全删除掉密码,这样会导致
远程无法访问

  据个人结合实际开发过程中的问题猜测,passwd程序和login程序有种某种程度的默契,passwd更改了加密方法后,login也会做出相应的改变识别出新的加密方法。或者还有可能就是,二者内部的加密解密机制是相同的,毕竟二者都来源于busybox。再可能就是login使用了passwd的加密解密功能。

注:本文参考了网上他人的技术博客、经验案例、百度百科,结合自己的实际开发经历综合整理而来,如有侵权,联系删除!欢迎各位在评论区交流学习。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小嵌同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值