往期系列内容回顾:
Linux基础知识之Shell命令行及终端中的快捷键
Linux基础知识之man手册页_man 手册页-CSDN博客
Linux基础知识之Linux文件系统权限-CSDN博客
Linux基础知识之使用 Shell 扩展匹配文件名-CSDN博客
-
shadow 密码和密码策略
用户密码是Linux用户登录的传统凭据之一. 以前密码保存在 /etc/passwd 文件,所有用户皆可读,之后将密码保存到只有 root 可读的 /etc/shadow 文件中,文件格式如下:
[student@workstation ~]$ sudo grep student /etc/shadow
student:$6$mMzsPCHs9fkLFF4E$0ZH52HA8QGcAoYspzaXOyooRxCPTj7ct90Pfgl4XkYDkrOgEWVFAPi.tDZj51DAN8NoLuBkc3Bj3MaxJWqrcV0:19860:0:99999:7:::
这段 shadow 密码的格式是 Linux 系统中存储密码的方式之一。它表示用户"student"的密码信息。 这个 shadow 中包含的字段分别为:
- student:用户账户的名称
- $6: 用户的加密算法, 这里的 "6" 表示使用 SHA-512 算法进行密码加密
- salt 盐值 ("mMzsPCHs9fkLFF4E")。盐值是一个随机字符串,用于增加密码安全性。在密码哈希过程中,将密码和盐值混合在一起进行加密。
- 哈希后的密码散列值 ("0ZH52HA8QGcAoYspzaXOyooRxCPTj7ct90Pfgl4XkYDkrOgEWVFA")。这个字段是使用所选的哈希算法对密码和盐值进行 算得到的结果, 要解析这个 shadow 密码,你需要了解使用的加密算法以及盐值、哈希密码散列值的用途。
- 19860:上次更改密码事件距离纪元的天数;其中,纪元是 UTC 时区的 1970-01-01
- 0:自上次更改密码以来到用户可再次更改密码之前必须经过的最短天数
- 99999:在密码过期之间不进行密码更改的最长天数。空字段表示密码永不过期
- 7:在用户密码过期前提前多少天警告用户
- :在密码过期之日起,在账户自动锁定之前能够无活动的天数
- :密码到期之日距离纪元的天数。空字段表示密码永不过期
- 最后一个字段通常为空,预留给未来使用
用户登录时,使用 salt 组合用户 password,然后进行哈希加密,之后与 shadow 对应用户的散列值比对,一致则密码验证通过。
chage (change age)命令用以修改密码生命周期[MISSING IMAGE: , ]
- 示例一:
useradd sysadmin05
chage -l sysadmin05
chage -m 0 -M 90 -W 7 -I 14 sysadmin05
chage -l sysadmin05
# -m:最小生命周期
# -M:最大生命周期
# -W:警告周期
# -l:宽限周期
- 示例二:假设您在红帽服务器上管理用户密码策略。
cloudadmin10 用户是系统中的新用户,您要设置自定义密码期限策略。您希望账户到期时间设置即日起 30 天,可以使用以下命令:
[root@workstation ~]# useradd cloudadmin10
[root@workstation ~]# chage -l cloudadmin10
[root@workstation ~]# date +%F
[root@workstation ~]# date -d "+30 days" +%F
[root@workstation ~]# chage -E $(date -d "+30 days" +%F) cloudadmin10
[root@workstation ~]# chage -l cloudadmin10 | grep "Account expires"
- 其他例子:
chage -d 0 username # 要求 username 用户下次登录必须修改密码
chage -l username # 显示 username 用户密码生命周期详情
chage -E 2024-11-01 username # 定义密码过期时间
- 另外也可以在 /etc/login.defs 中定义用户密码生命周期,修改此文件不会影响旧的用户,只会影响更改后的新用户。
作用 | |
PASS_MAX_DAYS | 密码最大生命周期 |
PASS_MIN_DAYS | 密码最小生命周期 |
PASS_WARN_AGE | 密码警告周期 |
PASS_MIN_LEN | 密码最小长度 |
更多关于用户的配置可以查看 man 手册 login.defs(5)
man 5 login.defs
-
非登录 shell
当有效的用户的账户不需要登录系统,可以将其登录 shell 设置为 nologin shell。例如系统服务账号,并不需要登录操作系统示例:
[root@workstation ~]# usermod -s /sbin/nologin newapp
[root@workstation ~]# su - newapp
值得一提的是,nologin 可以防止以交互式使用系统,但不会阻止所有访问。如果用户使用用户密码进行身份验证,他们有时可以通过身份验证,并使用Web 应用、文件传输程序或邮件读取程序等应用上传或检索文件。
- 使用 usermod -L 可以锁定用户, usermod -U 解锁用户
- 如果用户在特定日期从公司离职,您可以通过一个 usermod 命令锁定账户并使其过期。该日期必须是距离 1970-01-01 的天数,或者使用 YYYY-MM-DD 格式。
[root@workstation ~]# usermod -L -e 0 student
[root@workstation ~]# ssh student@localhost
Your account has expired; please contact your system administrator.
Connection closed by ::1 port 22
[root@workstation ~]# chage -l student
Last password change : May 17, 2024
Password expires : never
Password inactive : neverAccount expires : Jan 01, 1970
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
— Linux文章推荐 —
【资料领取】200个Linux常用命令手册
《鸟哥Linux私房菜》全新完整中文版PDF
40 个简单又有效的 Linux Shell 脚本示例
linux运维必备,100道常见面试题
超强linux学习笔记,值得一看(附PDF下载)
红帽认证有什么优势?速看本文
5 种 Linux 安装包管理工具中文手册!抓紧看!
END
公众号:厦门微思网络
始于2002年,专业IT认证培训22年,面向全国招生!
微思-主要课程有:
*网络技术:华为HCIA/ HCIP/HCIE;思科CCNA/CCNP/CCIE
*Linux技术:红帽 RHCE/RHCA
*K8S&容器:CKA/CKS
*数据库:ORACLE OCP/ OCM ;MySQL ;达梦数据库
*虚拟化:VMware VCP/VCAP
*安全认证:CISP体系/CISSP/ CISA;CCSK;CISAW体系
*管理类:PMP 项目管理;软考中/高项;ITIL体系;Togaf
其他课程如:ACP;Azure...
———————————————