linux账户密码介绍
目录
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账户密码介绍相关推荐
- linux系统服务介绍
linux系统服务介绍 在windows系统中,我们可以打开任务管理器来打开或者关闭某些服务.在Linux系统下也同样有这样的需求,那么linux下怎么打开类似于windows下的"任务管理 ...
- Linux虚拟化介绍
一.Linux虚拟化介绍 1.虚拟化模型如下,通过虚拟化工具把cpu.内存.硬盘等真实硬件资源模拟成更少的虚拟硬件资源 2.为什么使用虚拟化? 硬件资源使用率最大化,独立出多台机器出来,把空闲资源利用 ...
- linux tf命令,Linux系统命令介绍之vmstat命令详解
今天小编要跟大家介绍的vmstat命令详解.熟悉Linux系统和使用Linux系统工作的小伙伴都知道Linux的命令有很多,而真正在工作中用到的命令应该不超过几十个,为了让大家更好的掌握这些命令,小编 ...
- linux内核模块是什么,Linux内核模块介绍,使用Linux模块的优点
描述 1.1 Linux内核模块介绍1.1.1 Linux内核模块概述 嵌入式设备驱动开发中将驱动程序以模块的形式发布,更是极大地提高了设备使用的灵活性--用户只需要拿到相关驱动模块,再插入到用户的内 ...
- 【安全牛学习笔记】Kali Linux***测试介绍
Kali Linux***测试介绍 安全问题的根源 优点:分工明确,工作效率高. 缺点:从业人员对系统没有整体的认识,对安全认识较为片面. 最大威胁是人,人都会犯错,安全问题不能100%绝对根除. ...
- arch linux安装命令,arch linux:安装Arch Linux方法介绍
今天来聊聊一篇关于arch linux:安装Arch Linux方法介绍的文章,现在就为大家来简单介绍下arch linux:安装Arch Linux方法介绍,希望对各位小伙伴们有所帮助. Arch ...
- 11款国内外多厂家linux面板介绍(含视频对比)
在linux服务器运维管理方面linux面板可是举足轻重的地位,因为它具有方便管理服务器的优势,尤其是界面化的操作,适合大部分高中低的用户体验. 这里要介绍的就是现在我用过的国内外的linux面板,介 ...
- 关于Linux的介绍与安装
一.引言 1.1开发环境 平时大家大多数是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的软件,这样会导致环境的稳定性和安全性降低. 1.2生产环境 是将程序运行在此环境 ...
- Linux常用命令(本篇包括,Linux目录结构介绍、Linux Shell介绍、9个常见命令介绍、文件的概念、文件的操作(20个)、目录的操作、文件和目录的权限、文件压缩及解压缩)
Linux常用命令(本篇包括,Linux目录结构介绍.Linux Shell介绍.9个常见命令介绍.文件的概念.文件的操作(20个).目录的操作.文件和目录的权限.文件压缩及解压缩) ...
最新文章
- SAP成都研究院郑晓霞:Shift Left Testing和软件质量保证的一些思考
- Linux下执行.sh命令出现-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory...
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响(一)
- Java Script 第十节课 Java Script的for循环练习。
- AM,DSB,SSB,FM信号调制matlab
- 【java基础】——java枚举类型基本介绍
- 转载 Android入门学习_代码常用布局
- LaTeX公式打出U上面一个小圈表示去心领域的符号:\mathring{U}
- MOSFET(一):基础
- springboot03-unittest mockmvc单元测试
- 艾伟_转载:在C#中实现3层架构
- idea启动tomcat出现‘D:\Programfiles‘ 不是内部或外部命令,也不是可运行的程序
- 海思HI35xx平台软件开发快速入门之H265解码实例
- Android中调用文件管理器进行选择文件(记录)
- Win系统 - 局域网内电脑文件共享
- 我问自己代言,甄嬛篇
- [原创] PS超写实:手绘铅笔
- 域用户绑定计算机,域批量绑定用户帐户与计算机帐户
- Java***冒泡排序***
- win10 系统更新服务器出错怎么办,win10系统更新出错的两种解决方法