更多课程 选择中心

Linux培训
美国上市教育机构

400-111-8989

Linux培训

关于Linux用户登录密码的生成

  • 发布:linux培训
  • 来源:Linux教程
  • 时间:2017-11-01 18:02

一、从自动化需求说起

如何生成一个Linux用户登录密码?可能有人会说用passwd生成。的确,passwd命令能够帮助我们重置用户登录密码,但是这并没有解答如何生成一个Linux用户登录密码的疑问。

对于这个问题,秉承着实用主义的精神,我原本也不会去深究。毕竟,安装的时候会设置密码,安装完毕后能通过passwd命令重置密码,学会这两点后已满足一般的需求已经绰绰有余了。

但是,对于自动化而言,知道以上的两点是不够的。Linux的自动化安装过程中,设置用户登录密码这事,肯定不能有人为干预,否则谈什么自动化。操作系统安装完毕后,也有可能会有重置用户密码的自动化需求,此时使用passwd命令来重置用户密码,也不见得是最佳的选择。

如果明白了密码的生成机制,那么这个自动化需求的难题也就迎刃而解了。

二、密码生成理论

Linux基础的人一定知道,Linux的用户登录密码信息是存放在/etc/shadow文件当中的,并且该文件只有root用户能够访问。以下会以voidint这个用户为例,看一下这个用户的密码信息。

$ sudo cat /etc/shadow | grep voidint

[sudo] password for voidint:

voidint:$6$3kheX/Vg$TGum9JEjfmGsj8Mfk3SUY/d/bWkJgnRimCxoaDTX7wcgrraYvU.fiziEUdpDglWc58uPZqWJhKNjiXayP9Q6b0:16892::::::

很明显,这个字符串被:符号分隔成了9段。我们这里只关注前两段,至于每一段具体的含义,可以戳这里自行阅读。第一段,是用户名称。第二段,即为用户密码。其实密码这种称呼并不准确。相对准确的说法是,用户密码明文经过某种哈希算法计算所获得的密文。但是,鉴于这个相对准确的说法实在太长太拗口,不便于表达。因此,以下提到的密码在无特别说明情况下,一律指的是密码明文的密文。

言归正传,看到这里相信好多人会和我有一样的思考: 是不是只要知道了密码生成的算法,并按照此算法生成一个满足Linux要求的密码,再把密码覆盖这个第二段的内容,那么用户密码就被重置了吗?

仔细看这段密码,会发现它是由$xxx$xxx$xxx的格式构成,即由$符号分隔的3端字符串构成。查阅资料后得知,这个格式可以进一步概括为$id$salt$encrypted。简要说明下$id$salt$encrypted中各个部分的含义:

id: 加密(确切说是哈希)所用算法的代号。

salt: 由程序随机生成的字符串,即盐)。

encrypted: 用户密码明文字符串加盐后使用哈希算法所得的哈希值,即哈希(明文+盐)。

特别说明

资料中还提到了另外一种形式的密码——$id$rounds=yyy$salt$encrypted。其中,盐的部分换成了rounds=yyy。yyy是一个由用户(调用方)提供的[1000, 999999999]之间的整数。

三、密码生成实践

知道了上面这部分基础知识,那么接下来就是理论指导实践的环节了。具体可以借助什么工具来生成密码呢?这里使用的grub-crypt工具。你可以在某个Linux发行版中安装这个工具,也可以使用我提供的这个dockerfile。

使用sha512算法生成密码

$ grub-crypt --sha-512

Password:

Retype password:

$6$r1jcut3Crl8bSIMo$XfKnrl4Ykzk2KPQ59MCXcUef9OjZWoZrIp7aeWwnCzIVQY1p/G1EiJQE4DYFej783NlvR5KtKYXs4P/hQaVst.

将生成的密码写入/etc/shadow文件中(该文件只有root用户才有权限读写,若root也无权限,则赋予600权限即可)

$ sudo cat /etc/shadow | grep voidint

voidint:$6$r1jcut3Crl8bSIMo$XfKnrl4Ykzk2KPQ59MCXcUef9OjZWoZrIp7aeWwnCzIVQY1p/G1EiJQE4DYFej783NlvR5KtKYXs4P/hQaVst.:16892::::::

退出当前用户并使用新修改的密码登录

四、参考

CRYPT(3)

CentOS / RHEL 6 : How to password protect grub (Password-Protected Booting)

Command | kickstart之中rootpw密码生成方法

鸟哥的Linux私房菜——/etc/shadow文件结构

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:八大系统监控工具 你值得拥有!
下一篇:Linux编程const使用详细介绍

达内8月Linux培训免费训练营开班啦!课程安排查收一下~

达内7月Linux培训免费训练营开班啦!课程安排查收一下~

达内6月Linux培训免费训练营开班啦!课程安排查收一下~

达内5月Linux培训免费训练营开班啦!课程安排查收一下~

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省