/etc/passwd文件和/etc/shadow文件
时间:2022-07-24
本文章向大家介绍/etc/passwd文件和/etc/shadow文件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在Linux系统中的账户,密码被存放在两个文件中:/etc/passwd和/etc/shadow。
/etc/passwd文件
上图就是etc/passwd文件中的内容。可以观察到,其中每一行的内容从格式上来看都是一致的。其实,每一行都代表一个帐号,比如上图中的第一行root账号,第二行daemon账号,第三行bin账号,......。这个文件中除了保存root账号,普通用户的账号之外,还保存了系统正常运行所需要的一些账号,比如daemon,bin,sys等系统账号。
既然每一行的形式都是一样的,我们就以第一行为例,进行说明。每一行都包含了7项内容,它们之间用冒号(:)隔开。
root:x:0:0:root:/root:/bin/bash
- 账户名 第一行的账户名就是root,每一个账户对应于一个uid。
- 密码 早期Unix系统的密码就是放在第二项的,但是因为/etc/passwd这个文件可以被所有的程序读取,这样很容易造成密码泄露(当年也没有像现在一样的加密算法。)。所以后来把密码放在了/etc/shadow文件中。故,这里的第二项是x。
- UID 系统使用uid来区分账户,UID=0的账户就是root用户。 1-999是保留给系统使用的账户UID。这些系统帐号通常是不可登入的。 1000——MAX的账户是给普通用户使用的。
- GID 组ID,这个和/etc/group有关。
- 账户信息说明 这一项是用来描述账户的意义的,这一项可以没有内容。
- 家目录 账户的家目录,root的家目录在/root,普通用户的家目录一般在/home/xxx。
- shell 这是账户预设的shell,也可以更改为其他shell。
/etc/shadow文件
上图是/etc/shadow文件的内容,想要查看这个文件的内容,那么必须具备管理员权限才可以查看其内容。和passwd文件一样,冒号用来分隔每一项。每一行有9项。
- 账号名称
- 密码
这里存储的密码是经过加密以后的密文密码。这个密码的结构和加密所使用的算法有关。 $6$pAl./ItX$hYHLnuAyyNfUQ9WEcWuHfLWBiGW2FN81sscpU/jXxRStVU8Z.OlFQMT5VPgW3PSa0Hzycfq3tXnQAjhnQyHYZ.
- 如果为空,则对应用户没有口令,登录时不需要口令;
- 星号(*)代表帐号被锁定;
- 双叹号(!!)表示这个密码已经过期了;
- 叹号(!)表示账户不能登录
这个密文密码本身也是由三部分组成的,这三部分由$隔开。第一项是说明加密方式的,第二项是加密算法的加密参数slat,第三项是加密以后的密码。
- $6开头的,表明是用SHA-512加密;
- $1表明是用MD5加密;
- $2是用Blowfish加密;
- $5是用 SHA-256加密;
- 最近一次更改密码的时间 这个时间是指从1970年1月1日以来经历过的天数。1970年1月1日就是第一天。
- 密码不能被更改的天数(从最近一次更改密码时算起) 这个帐号的密码在最近一次被更改后需要经过几天才可以再被更改,通常这一项是0,表示可以随时更改密码。
- 密码需要重新变更的天数(从最近一次更改密码时算起) 经常变更密码是个好习惯!为了强制要求使用者变更密码,以保护安全。我这里的账户全部都是拥有99999天的密码期限,这大概是274年的时间,也就是永久。
- 密码需要变更期限前的警告天数 当帐号的密码有效期限快要到的时候,系统会依据这个这一项的设定,发出警告,通知用户尽快变更密码。
- 密码过期后的帐号宽限时间 密码过期以后,账户使用者仍旧可以使用未更改的密码登录系统。就是给你宽限几天时间,让你赶紧改密码。否则密码一旦失效,你就不能登录进来了。
- 帐号失效日期 帐号在该项规定的日期之后,将无法再使用。
- 保留 目前这一项并没有被使用,作以保留。
- 30分钟精通快应用
- BZOJ2440: [中山市选2011]完全平方数(莫比乌斯+容斥原理)
- Dapper扩展之~~~Dapper.Contrib
- JVM活学活用——GC算法 垃圾收集器
- BZOJ1101: [POI2007]Zap(莫比乌斯反演)
- freeRTOS事件组学习
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
- JVM活学活用——优化springboot
- .Net中的AOP读书笔记系列之AOP介绍
- 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)
- .Net中的AOP系列之构建一个汽车租赁应用(上)
- Modbus RTU驱动程序开发指引
- freeRTOS任务创建
- 洛谷P4213 Sum(杜教筛)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android开发使用Handler实现图片轮播功能示例
- 简单实现Android刮刮卡效果
- CentOS7.4下 安装JDK1.8的图文教程
- Android Studio中导入JNI生成的.so库的实现方法
- Android实现文件上传和下载倒计时功能的圆形进度条
- 使用Apache ab进行http性能测试
- Android Imageloader的配置的实现代码
- Linux下如何查看版本信息的方法步骤
- Android开发实现Files文件读取解析功能示例
- Android实现iPhone晃动撤销输入功能 Android仿微信摇一摇功能
- 猿实战21——商品发布之商品数据存储
- Android编程自定义进度条颜色的方法详解
- Android TextView对齐的两种方法
- Android ScrollView实现反弹效果的实例
- Ubuntu 18.04上安装 phpMyAdmin的详细教程