Linux之密码知多少?
时间:2022-05-03
本文章向大家介绍Linux之密码知多少?,主要内容包括查看系统用户的脚本、passwd文件、shadow文件、预告一下明天的内容、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
一个Python简单脚本
好久没有更新内容了,也好久没有给大家打个招呼了,小白想死你们了。
查看系统用户的脚本
[root@VM_171_247_centos ~]# cat chk_user.py
# encoding: utf8
# written by lavenliu at 20170926
import pwd
import spwd
sys_users = {}
usr_no_passwd = []
usr_has_passd = []
users_entry = pwd.getpwall()
for entry in users_entry:
sys_users[entry.pw_name] = entry.pw_shell
for username in sys_users.keys():
pass_entry = spwd.getspnam(username)
if pass_entry.sp_pwd == '!!' or pass_entry.sp_pwd == '*':
usr_no_passwd.append(pass_entry.sp_nam)
else:
usr_has_passd.append(pass_entry.sp_nam)
print("These users have home directory:")
for user, home in sys_users.items():
if home == '/sbin/nologin':
continue
else:
print("%15s: %s" % (user, home))
print
print "These users can login system:"
for user in usr_has_passd:
print(user)
啥也不说,先看看执行结果是什么:
[root@VM_171_247_centos ~]# python chk_user.py
These users have home directory:
sync: /bin/sync
shutdown: /sbin/shutdown
halt: /sbin/halt
lavenliu: /bin/bash
root: /bin/bash
jiangzf: /bin/bash
These users can login system:
lavenliu
root
jiangzf
先解释一下这个脚本主要是做什么用的。
- 该脚本可以检查系统当中可以登录的用户有哪些。
- 该脚本的判断依据是/etc/shadow文件中的密码位是否为
!!
或*
,如果是,则对应的用户不能登录系统。
脚本中的内容涉及到了Unix系统中的系统账户问题,涉及到了C语言当中的两个库函数调用(getpwnam函数、getpwent函数),接下来我们看一看密码文件及加密文件的作用。
passwd文件
以冒号为分隔的7个字段,其字段的含义如下:用户名:口令:UID:GID:描述信息:家目录:登录shell
shadow文件
/etc/shadow
文件只有root用户才有权限进行查看和修改。/etc/shadow
中的记录与/etc/passwd
中的记录一一对应,它由pwconv命令根据/etc/passwd
中的数据自动产生。它的文件格式与/etc/passwd
类似,由若干字段组成,字段之间用“:”分隔。这些字段的含义如下:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- “登录名”是与
/etc/passwd
文件中的登录名相一致的用户账号 - “口令”字段存放的是加密后的用户口令字。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合
{./0-9A-Za-z}
中的字符,则对应的用户不能登录。 - “最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCOLinux中,这个时间起点是1970年1月1日。
- “最小时间间隔”指的是两次修改口令之间所需的最小天数。
- “最大时间间隔”指的是口令保持有效的最大天数。
- “警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
- “不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
- “失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
预告一下明天的内容
好久没有更新内容了,小白突然幡然醒悟、悔过自新,觉得对不住大家。明天该讲解新的内容了,那就是函数。以往我们所讲过的内容没有一点函数的影子,这样安排就是为了循序渐进,让我们没有基础的同学也可以按照文章的顺序依次进行自我学习。
今天的这个小结就作为过渡吧,真正好玩的在后面的内容当中。
- 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 数组属性和方法
- 相关性 ≠ 因果性,用图的方式打开因果关系
- 斗转星移 | 三万字总结Kafka各个版本差异
- Hadoop支持Lzo压缩配置及案例
- Spark SQL快速入门系列之Hive
- 手把手学机器学习算法中数据预处理(附代码)
- 「Workshop」第十六期:Pandas 使用介绍
- .net core学习笔记,组件篇:服务的注册与发现(Consul)初篇
- Android程序员想进大厂?算法很重要!2020年必学的 10 大算法关注一下
- PWN:Largebin Attack
- 实现LRU算法
- 逻辑漏洞之无密码登录(vlcms)
- Python开发 常见异常和解决办法
- 约瑟夫问题
- AUC、ROC详解:原理、特点&算法
- akka-streams - 从应用角度学习:basic stream parts