目录

passwd shadow文件介绍

shadow文件格式

生成密码方式

1. openssl生成

2. chpasswd

3. crypt函数

4. passwd

5. python crypt库


passwd shadow文件介绍

在unix早些时候是没有/etc/shadow这个文件的。用户的所有信息都只是保存在/etc/passwd文件中,加密后的用户密码保存在了passwd文件的第二个字段中。那么为什么要产生shadow文件呢? 我们看一下文件的权限,

-rw-r--r-- 1 root root   2313 12月  4 14:03 /etc/passwd
-rw-r----- 1 root shadow 1356 12月  5 15:59 /etc/shadow

可以看出,passwd对每个用户都是可读的,那么这不就把用户密码暴露给任何人了么?虽然是加过密的,但是这样也存在安全性问题,于是产生了shadow文件, 将用户的密码加密后存入shadow文件, 而passwd文件仅存放用户名等其他标识, 并对shadow文件的权限进行限制, 只有root用户可读可写.

当普通用户调用/usr/bin/passwd命令修改自己的密码,因为passwd对任何用户都是可执行的,会变身为root,所以此时用户拿着root的权限去读写shadow文件,当命令执行完成后变身结束,便失去root权限。可以看出经过对shadow文件的分离,既保证了普通用户对自己密码的修改,也保证了普通用户看不到加密后的密码串提升了安全性。

shadow文件格式

它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志ice:$6$5NAhdLZN$PSiSm7IMPVsB6kCoFFVcI5JSPYqzM.c139wesTl/YGl6Z0MqTaTVmbTbWlJQkX11Uvr.sKTT46uO9QYDun87..:18000:0:99999:7:::

1) “登录名”是与/etc/passwd文件中的登录名相一致的用户账号
2) “口令”字段存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令;   
          星号代表帐号被锁定,将无法登录;双叹号表示这个密码已经过期了, 如果是$x$xxxxxxxx$的形式,则代表密码正常。
          $6$开头的,表明是用SHA-512加密的,密文长度86,示例中‘5NAhdLZN’为salt值,是一个随机字符串,供加密使用
          $1$ 表明是用MD5加密的,密文长度22个字符
          $2$ 是用Blowfish加密的,
          $5$ 是用 SHA-256加密的,密文长度43

3) “最后一次修改时间”表示的是从1970-1-1,到今天修改口令时的天数。
4) “最小时间间隔”指的是两次修改口令之间所需的最小天数。
5) “最大时间间隔”指的是口令保持有效的最大天数。
6) “警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
7) “不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
8) “失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号

1:MD5加密,密文长度22 
5:SHA-256加密,密文长度43 
6:SHA-512加密,密文长度86 
4.手动生成password字串(测试于centos6.5) 
方法一:dovecot包中提供dovecotadm命令。

生成密码方式

介绍几种通过编程自动修改linux用户密码的方式。

1. openssl生成

openssl passwd -1 -salt "abcdefgh" "123456"   // 指定随机字符串为‘abcdefgh’, 密码为'123456',   注意,-1是数字1, 同样的可以使用-6$1$abcdefgh$KJHEbEnUJaxWv269o9nH60

将生成的秘钥替换掉shadow相应的行即可

2. chpasswd

echo ice:123456 | chpasswd     //将用户ice的密码修改为‘123456’

chpasswd将直接修改shadow文件

3. crypt函数

int create_user_password(char *user, char *plain_text)
{struct spwd *shd = NULL;char * pwd = NULL;char salt[64] = {0};int i=0,j=0;char rand_str[12] = {0};if (geteuid() != 0){return -1;} shd= getspnam(user);if(shd != NULL){while(1){salt[i] = shd->sp_pwdp[i];if(salt[i] == '$'){j++;if(j == 3){break;}}i++;}pwd = (char *)crypt((const char *)plain_text, (const char *)salt);printf("pwd:%s\n",pwd);return 0;}return -1;
}

其中, plain_text代表密码明文,   salt格式: $1$xxxxxxxx$

通过crypt方式,同样需要人为的使用生成的字符串替换shadow中的行.

4. passwd

通过passwd命令来修改密码(该命令需要输入两次密码), 但是如果希望通过编程的方式,来自动化的输入密码,则还需要借助交互工具库expect.

5. python crypt库

__import__("crypt").crypt("password","$1$abcdefg$")

linux账户密码介绍相关推荐

  1. linux系统服务介绍

    linux系统服务介绍 在windows系统中,我们可以打开任务管理器来打开或者关闭某些服务.在Linux系统下也同样有这样的需求,那么linux下怎么打开类似于windows下的"任务管理 ...

  2. Linux虚拟化介绍

    一.Linux虚拟化介绍 1.虚拟化模型如下,通过虚拟化工具把cpu.内存.硬盘等真实硬件资源模拟成更少的虚拟硬件资源 2.为什么使用虚拟化? 硬件资源使用率最大化,独立出多台机器出来,把空闲资源利用 ...

  3. linux tf命令,Linux系统命令介绍之vmstat命令详解

    今天小编要跟大家介绍的vmstat命令详解.熟悉Linux系统和使用Linux系统工作的小伙伴都知道Linux的命令有很多,而真正在工作中用到的命令应该不超过几十个,为了让大家更好的掌握这些命令,小编 ...

  4. linux内核模块是什么,Linux内核模块介绍,使用Linux模块的优点

    描述 1.1 Linux内核模块介绍1.1.1 Linux内核模块概述 嵌入式设备驱动开发中将驱动程序以模块的形式发布,更是极大地提高了设备使用的灵活性--用户只需要拿到相关驱动模块,再插入到用户的内 ...

  5. 【安全牛学习笔记】Kali Linux***测试介绍

    Kali Linux***测试介绍  安全问题的根源 优点:分工明确,工作效率高. 缺点:从业人员对系统没有整体的认识,对安全认识较为片面. 最大威胁是人,人都会犯错,安全问题不能100%绝对根除. ...

  6. arch linux安装命令,arch linux:安装Arch Linux方法介绍

    今天来聊聊一篇关于arch linux:安装Arch Linux方法介绍的文章,现在就为大家来简单介绍下arch linux:安装Arch Linux方法介绍,希望对各位小伙伴们有所帮助. Arch ...

  7. 11款国内外多厂家linux面板介绍(含视频对比)

    在linux服务器运维管理方面linux面板可是举足轻重的地位,因为它具有方便管理服务器的优势,尤其是界面化的操作,适合大部分高中低的用户体验. 这里要介绍的就是现在我用过的国内外的linux面板,介 ...

  8. 关于Linux的介绍与安装

    一.引言 1.1开发环境 平时大家大多数是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的软件,这样会导致环境的稳定性和安全性降低. 1.2生产环境 是将程序运行在此环境 ...

  9. Linux常用命令(本篇包括,Linux目录结构介绍、Linux Shell介绍、9个常见命令介绍、文件的概念、文件的操作(20个)、目录的操作、文件和目录的权限、文件压缩及解压缩)

    Linux常用命令(本篇包括,Linux目录结构介绍.Linux Shell介绍.9个常见命令介绍.文件的概念.文件的操作(20个).目录的操作.文件和目录的权限.文件压缩及解压缩)         ...

最新文章

  1. SAP成都研究院郑晓霞:Shift Left Testing和软件质量保证的一些思考
  2. Linux下执行.sh命令出现-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory...
  3. 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响(一)
  4. Java Script 第十节课 Java Script的for循环练习。
  5. AM,DSB,SSB,FM信号调制matlab
  6. 【java基础】——java枚举类型基本介绍
  7. 转载 Android入门学习_代码常用布局
  8. LaTeX公式打出U上面一个小圈表示去心领域的符号:\mathring{U}
  9. MOSFET(一):基础
  10. springboot03-unittest mockmvc单元测试
  11. 艾伟_转载:在C#中实现3层架构
  12. idea启动tomcat出现‘D:\Programfiles‘ 不是内部或外部命令,也不是可运行的程序
  13. 海思HI35xx平台软件开发快速入门之H265解码实例
  14. Android中调用文件管理器进行选择文件(记录)
  15. Win系统 - 局域网内电脑文件共享
  16. 我问自己代言,甄嬛篇
  17. [原创] PS超写实:手绘铅笔
  18. 域用户绑定计算机,域批量绑定用户帐户与计算机帐户
  19. Java***冒泡排序***
  20. win10 系统更新服务器出错怎么办,win10系统更新出错的两种解决方法

热门文章

  1. 国内开源商城系统如何选型
  2. 地图慧一直显示服务器,瑞友慧连接服务端
  3. 在RSS服务器上订阅网站,快速服务器上的RSS订阅实现
  4. android 从相册读取多张图片大小,Android优化查询加载大数量的本地相册图片
  5. 2022年江西省中职组“网络空间安全”赛项模块A解析
  6. 微信小程序(八):地图
  7. java画星星_用java画色彩斑斓的星星
  8. 7.项目成本管理+信息系统项目管理+野马合集
  9. Pytest-Pytest框架的使用
  10. 什么是Tick 数据?