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

2023-05-16

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

文章目录

  • 前言
  • 一、Linux开发板登录机制
  • 二、getty、login、passwd
    • 1、getty
    • 2、login
  • 三、Linux加密算法 和 passwd命令
    • 1、linux加密算法理解
    • 2、busybox工具生成的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的加密解密功能。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈linux开发板用户登录之getty/login/passwd 的相关文章

  • Ubuntu 换源看这一篇就够了

    背景 Ubuntu是新生代农民工比较常用的Linux系统 由于一些原因 xff0c 当我们用官网的源的更新和下载包的时候 xff0c 很慢 很卡 很费时间 所以 xff0c 我们应该把它换成国内的源 换源 ubuntu的源存放在 etc a
  • Hadoop学习记录2--hadoop的概述、部署、使用

    目录 一 Hadoop概述 1 1 为什么要用Hadoop xff1f 1 2 Hadoop的简要介绍 1 3 Hadoop的组成部分 1 4 HDFS系统架构 二 Hadoop安装部署 2 1 本地模式搭建 2 1 1 安装JDK 2 1
  • java 对字符串中的字符排序

    import java util Arrays import java util Scanner public class Main public static void main String args Scanner input 61
  • IntelliJ IDEA官方插件Big Data Tool的下载与使用

    奔走相告奔走相告 xff01 xff01 官方出了个插件 xff01 专业课要学习Hadoop 但是我的eclipse用不了 xff0c 懒得去配置文件里改 xff0c 就用了idea做 xff0c 在GitHub上有人给出了idea连接h
  • Deep-IRT Make Deep Learning Based Knowledge Tracing Explainable Using Item Response Theory

    写在前面 xff1a 本文在DKVMN的基础上结合项目IRT xff0c 加入了student ability network 和 difficulty network两个网络 xff0c 增加深度知识追踪的可解释性 1 摘要 基于深度学习
  • supervisor安装

    说明 Supervisor翻译过来是监管人 xff0c 在Linux中Supervisor是一个进程管理工具 xff0c 当进程中断的时候Supervisor能自动重新启动它 可以运行在各种类Linux unix的机器上 xff0c sup
  • openstack云计算平台(9)--kolla-ansible自动化部署

    文章目录 一 环境1 系统设置2 配置网卡 二 安装1 创建卷组2 配置epel源 xff0c 安装docker3 配置加速器4 安装python编译依赖5 安装ansible6 安装kolla ansible 三 配置1 配置kolla
  • 石头剪刀布

    石头剪刀布 总时间限制 1000ms 内存限制 65536kB 描述 石头剪刀布是常见的猜拳游戏 石头胜剪刀 xff0c 剪刀胜布 xff0c 布胜石头 如果两个人出拳一样 xff0c 则不分胜负 一天 xff0c 小A和小B正好在玩石头剪
  • windows 命令行ssh远程linux报错解决

    报错信息如下 报错原因 xff1a 是因为之前的域名解析改了ip地址所以 xff0c 当远程时使用的是原域名的key所以报错 解决方法 xff1a 在报错信息中找到key存储的位置 用记事本打开找到你对应ip地址修改一下key就行 xff0
  • debian10 简单的DNS服务器搭建

    安装DNS span class token function apt get span span class token function install span bind9 添加区域配置 vim etc bind named conf
  • debian10 简单搭建squid

    安装 span class token function apt get span span class token function install span squid 添加密码文件 此文件储存squid的用户与密码 span clas
  • 用python对远程服务器文件进行压缩

    前段时间 xff0c 学校有一个运维的实训 xff0c 老师布置了一个作业 用python对centos下的 home qzm bash history文件进行压缩 xff0c 我就在网上搜了一下 xff0c 发现有些我不会用 xff0c
  • CSP模测——咕咕东想吃饭

    咕咕东想吃饭 一 题目 咕咕东考试周开始了 xff0c 考试周一共有n天 他不想考试周这么累 xff0c 于是打算每天都吃顿好的 他决定每天都吃生煎 xff0c 咕咕东每天需要买ai个生煎 但是生煎店为了刺激消费 xff0c 只有两种购买方
  • Ubuntu 14.04 Storm(单机版)安装

    以下是本人自己成功安装的详细步骤 xff0c 希望对大家有所帮助 xff1a 一 安装JDK 1 从官网下载最新版本的JDK 2 将JDK解压到指定的文件夹中 xff1a sudo mkdir usr lib jvm tar span cl
  • 第十二周模测——消消乐大师——Q老师

    消消乐大师 Q老师 一 题目 Q老师是个很老实的老师 xff0c 最近在积极准备考研 Q老师平时只喜欢用Linux系统 xff0c 所以Q老师的电 脑上没什么娱乐的游戏 xff0c 所以Q老师平时除了玩Linux上的赛车游戏SuperTux
  • 第十二周作业——三维空间逃生

    三维空间逃生 一 题目 zjm被困在一个三维的空间中 现在要寻找最短路径逃生 xff01 空间由立方体单位构成 zjm每次向上下前后左右移动一个单位需要一分钟 xff0c 且zjm不能对角线移动空间的四周封闭 zjm的目标是走到空间的出口
  • Ceph — 使用cephadm搭建Ceph集群

    文章目录 准备安装 cephadm部署集群 本文将通过cephadm工具来学习如何简单地搭建一个octopus版集群 准备 服务器 主机名iposcpu 内存数据盘mgr 01192 168 2 15Centos7 72C4G无node 0
  • 国王的游戏(贪心,高精度)

    链接 xff1a https ac nowcoder com acm problem 16561 来源 xff1a 牛客网 题目描述 恰逢 H 国国庆 xff0c 国王邀请 n 位大臣来玩一个有奖游戏 首先 xff0c 他让每个大臣在左 右
  • Python下载安装you-get及使用指令

    一 安装 按WIN 43 R打开Windows的运行窗口 xff0c 输入pip3 install you get xff0c 输入命令you get安装 you get 二 使用指令 1 在cmd exe窗口输入you get o 保存地
  • 微信小程序项目目录结构以及各个文件夹和文件的作用

    pages文件夹 xff0c utils文件夹 xff0c 全局文件app js文件 xff0c 全局文件app json文件 xff0c 样式app wxss文件 xff0c 项目配置文件project config json xff0c

随机推荐

  • 使用SSD mobilenet训练自己的数据集

    1 首先配置好环境 xff0c 我是用的的torch1 7 1 xff0c 和torchvision0 8 2版本 xff0c 可以直接根据作者给出的requirements txt文件进行其他安装包的配置 2 下载代码lufficc SS
  • C#第二天

    1 变量的作用 xff1a 存储数据 2 int number 表示在内存中开辟了一个整数类型的房间 xff0c 并且我们取名为 number number 61 50 xff1b 表示将50这个整数放到房间number中 3 声明变量的语
  • Visual studio 配置pyqt 转换资源文件 qrc to py

    整体方法与前人类似 xff0c 笔者在此进行一点补充 宇宙最强VisualStudio2017配置pyQt5用于python3 6的UI界面工具 Visual studio 2017下设置和使用pyQt5应注意的几个问题 xff08 主要参
  • PHP爬虫 爬取污染数据实例

    PHP爬虫 爬取污染数据实例 标签 xff08 空格分隔 xff09 xff1a PHP HTML 爬虫 抓取的目标页面 http www pm25 com city shenzhen html 抓取后输出的Json数组 xff1a htt
  • JDK11下载安装、JRE生成、环境配置

    一 下载 JDK11官网下载 xff1a Java SE Downloads Oracle Technology Network Oracle 选择自己合适的版本 二 安装 三 生成JRE 1 安装目录 找到jdk的安装目录 2 jdk11
  • 传统目标跟踪——光流法

    目录 一 光流法 二 LK光流法 2 1 实现原理 2 2 API 三 代码 四 总结 基于特征点的光流跟踪 xff0c 在目标上提取一些特征点 xff0c 然后在下一帧计算这些特征点的光流匹配点 xff0c 统计得到目标的位置 在跟踪的过
  • WSL win11下 Linux 子系统安装 无法解析服务器的名称或地址

    前言 想在win11上部署docker于是乎找到wsl xff0c 可是在powershell上安装总是报 无法解析服务器的名称或地址 的错误 网上冲浪一般解决方案为手动修改DNS 114 114 114 114 8 8 8 8 xff0c
  • ACCESS从零入门教程

    最近 xff0c 在公司实习自学了一款简单的access数据库软件 xff0c 下面是自己的一些学习心得过程 xff0c 供大家参考 一 access导入数据 两种方法 xff1a 1 直接复制 xff0c crtl c v即可 2 若数据
  • 基于ROS的自主充电路径规划

    以下是一个简单的基于ROS的自主充电路径规划的代码示例 xff0c 仅供参考 在 ROS 中创建一个包 xff08 package xff09 xff1a 充电路径规划的代码需要位于一个独立的包中 xff0c 可以使用 catkin cre
  • HDU第六场

    1002 https vjudge net contest 387998 题目 xff1a https vjudge net contest 387998 problem B 思路 xff1a 题意是给一个等式 xff0c 判断是否能在2
  • 解决服务器不能复制粘贴的方法

    1 打开远程的服务器 在服务器的任务栏随便一块空白处右击鼠标 选择 启动任务管理器 2 在打开的任务管理器中 我们找到 rdpclip exe 这个进程 如果没有找到就算了 3 找到这个进程后 选择 34 结束进程 34 4 然后再往服务器
  • 最小二乘法,最大似然估计什么情况下统一

    机器学习中 线性回归算法用到最小二乘法 逻辑回归算法用到最大似然估计 在推导梯度的过程中 发现结果一样 这是为何呢 目录 一 最小二乘法1 基本思想2 作用3 如何求解最小二乘法 二 最大似然估计1 概念2 似然估计的思想是3 如何求解最大
  • Linux 系统目录结构

    树状目录结构 bin xff1a bin 是 Binaries 二进制文件 的缩写 这个目录存放着最经常使用的命令 boot xff1a 这里存放的是启动 Linux 时使用的一些核心文件 xff0c 包括一些连接文件以及镜像文件 dev
  • MySql8.x版本my.cnf文件配置详解

    my cnf for 8 0版本 注意 xff1a 个别建议可能需要根据实际情况作调整 xff0c 请自行判断或联系我 xff0c 本人不对这些建议结果负相应责任 本配置文件主要适用于MySQL 8 0版本 client port 61 3
  • YouTube推荐系统

    The YouTube Video Recommendation System RecSys2010 实际的YouTube推荐系统在不断的改进 我们这里看到的是2010年RecSys会议上YouTube的一篇关于推荐的文章 xff0c 事实
  • Mysql配置文件/etc/my.cnf解析

    Mysql配置文件 etc my cnf解析 客户端设置 client port 61 3306 默认情况下 xff0c socket文件应为 usr local mysql mysql socket 所以可以ln s xx tmp mys
  • 数据结构:使用链栈实现回文判断

    题目 xff1a 回文判断 试写一个算法 xff0c 判断依次读入的一个以 64 为结束符的字母序列 xff0c 是否为形如 序列1 amp 序列2 模式的字符序列 其中序列1和序列2中都不含字符 amp xff0c 且序列2是序列1的逆序
  • Python 读取pdf

    好久没有更新 xff0c 主要是工作比较忙 抽空记录一个最近用到的东西 用python 读取pdf 话不多少 还是先上代码 span class token keyword import span pdfplumber span class
  • Python中的字符串相似度

    文章目录 一 Python字符串相似度二 Python相似度评估1 在计算图片的相似度时 xff0c 我自己用到过余弦距离2 欧式距离3 曼哈顿距离4 切比雪夫距离5 闵可夫斯基距离6 标准化欧氏距离7 马氏距离8 编辑距离 一 Pytho
  • 浅谈linux开发板用户登录之getty/login/passwd

    最近在排查一个关于用户登录的问题 xff0c 需要了解开发板启动以及远程登录进行用户名和密码验证背后的原理 经过查询学习 xff0c 简单总结如下 文章目录 前言一 Linux开发板登录机制二 getty login passwd1 get