在前面的步骤中,我们已经顺利的搭建了一台 workstation
充当个人工作站,以及另外 server1
和 server2
充当服务器,接下来我们开始一步一步学习如何使用Linux。
在前面的文章中介绍到,在/etc/passwd
文件的第二列,是最初存放密码的位置,后面为了安全,将密码从一个全局可读的文件中,迁移到了仅允许root
用户进行管理的/etc/shadow
文件,同样,可以使用getent
命令获取某个用户的密码条目:
$ sudo getent shadow funlinux
funlinux:$6$BYxMJ5HZyXHfzqlN$nCP...ommit..50:19669:0:99999:7:::
以上输出的内容,和/etc/passwd
文件的类似,也是由冒号:
作为分隔符,分成若干列,具体含义请看下表:
列 | 简述 | 描述 |
---|---|---|
1 | 登录名 | 用户登录系统的名称 |
2 | 已加密密码 | 使用哈希512加密后的内容,如果该列为空,则代表本地登录无需密码;如果在加密的密码前有!! 则代表密码被锁定,如果在加密的密码前有一个! ,代表账户被锁定,如果有且只有两个!! 则代表密码未设置。 |
3 | 上次最近一次修改密码的时间 | 这个时间使用的是距离 1970-01-01 UTC 时钟开始的天数 |
4 | 最短密码周期 | 代表从上一次修改密码当天算起,最短几天可以再次修改密码。默认为0 ,代表可以随时修改密码 |
5 | 最长密码周期 | 代表从上一次修改密码当天算起,多少天后密码将会过期,需要更新密码 |
6 | 密码过期前的警告时间 | 距离用户密码过期前几天,提醒用户密码将要过期 |
7 | 密码的不活跃期 | 可以理解为宽限期,当密码过期后,可以在这个宽限期内,可以使用旧密码认证,但是必须更新密码,否则无法登录系统 |
8 | 账户过期日期 | 设置账户不可登录系统的日期,它和密码的过期与否没有直接关联。两者任意一个先生效,用户均无法登录系统 |
9 | 保留 | 保留 |
❝这个文件对系统中任何用户来说,都是没有分配基本权限的,但是由于
❞root
用户的特殊性,以root
身份可以更新该文件内容。
在第二列的已加密密码内容中,被美元符$
分为三个部分:
$id$salt$encrypted_password
id
:代表用户密码加密方式,1
代表MD5
,2a
代表Blowfish
(在其他Linux发行版中存在,例如SUSE),5
代表SHA256
,6
代表SHA512
。salt
:盐值,会根据加密方式不同,生成长度不同的字符串,分散在用户提供的密码中。encrypted_password
:被加密后的密码字符串普通用户可以在不使用任何选项的前提下,更新自己的密码。
具有管理员权限(使用sudo
提权)或 root
用户可以使用passwd
管理其他用户的密码。
passwd USERNAME
直接更新用户密码。
常用选项:
-d
:删除用户密码。用户使用免密码认证登录。-l
: 锁定用户密码。-u
:解锁用户密码。-e
:使用户密码过期,用户下次登录系统必须重置密码。--stdin
: 读取标准输入作为密码。-S
:查看密码状态。alan
并查看用户密码状态,以及在/etc/shadow
中密码详情:$ sudo useradd alan
$ sudo passwd -S alan
alan LK 2023-11-21 0 99999 7 -1 (Password locked.)
$ sudo getent shadow alan
alan:!!:19682:0:99999:7:::
centos
,并查看密码状态:$ sudo passwd alan
Changing password for user alan.
New password: [centos]
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: [centos]
passwd: all authentication tokens updated successfully.
# 或者使用非交互式
$ echo centos | sudo passwd --stdin alan
Changing password for user alan.
passwd: all authentication tokens updated successfully.
$ sudo passwd -S alan
alan PS 2023-11-21 0 99999 7 -1 (Password set, SHA512 crypt.)
$ sudo getent shadow alan
alan:$6$ErYNetBOrHEZwLSv$jhPo9P...ommit...:19682:0:99999:7:::
$ sudo passwd -l alan
Locking password for user alan.
passwd: Success
$ sudo passwd -S alan
alan LK 2023-11-21 0 99999 7 -1 (Password locked.)
$ sudo getent shadow alan
alan:!!$6$ErYNetBOrHEZwLSv$jhPo9...ommit...AB/:19682:0:99999:7:::
$ sudo passwd -u alan
Unlocking password for user alan.
passwd: Success
$ sudo passwd -S alan
alan PS 2023-11-21 0 99999 7 -1 (Password set, SHA512 crypt.)
$ sudo getent shadow alan
alan:$6$ErYNetBOrHEZwLSv$jhPo9P...ommit.../EAB/:19682:0:99999:7:::
Mk40Vndc
:$ sudo passwd -e alan
Expiring password for user alan.
passwd: Success
$ sudo passwd -S alan
alan PS 1970-01-01 0 99999 7 -1 (Password set, SHA512 crypt.)
$ su - alan
Password: [centos]
You are required to change your password immediately (administrator enforced).
Current password: [centos]
New password: [Mk40Vndc]
Retype new password: [Mk40Vndc]
[alan@workstation ~]$ exit
su
或 ssh alan@localhost
方式登录:$ sudo passwd -d alan
Removing password for user alan.
passwd: Success
$ su - alan
[alan@workstation ~]$ exit
$ ssh alan@localhost
alan@localhost's password:
Permission denied, please try again.
alan@localhost's password:
Permission denied, please try again.
alan@localhost's password:
alan@localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
# 无密码账户是无法通过远程方式登录,也在一定程度上是“安全”的,有效避免网络暴力破解密码
要想实现对用户密码生命周期的管理,有两个途径:全局设置
和使用chage命令
。
管理员可以修改 /etc/login.defs
文件中下列内容:
PASS_MAX_DAYS 99999 # 定义用户最长密码周期
PASS_MIN_DAYS 0 # 定义用户最短密码周期
PASS_WARN_AGE 7 # 定义用户密码到期前警告时间
❝「注意」:
该文件的修改仅对新建用户有效,对已经存在的用户无效。
❞
假如设置用户迷人密码最长周期为60
天,密码最短可以更改密码的周期是3
天
$ sudo vim /etc/login.defs
...ommit...
PASS_MAX_DAYS 60
PASS_MIN_DAYS 3
...ommit...
$ sudo useradd susan
$ sudo passwd -S susan
susan LK 2023-11-21 3 60 7 -1 (Password locked.)
$ sudo getent shadow susan
susan:!!:19682:3:60:7:::
对系统中已经存在的账户,可以通过chage
命令进行修改密码生命周期。
chage
常用的选项如下:
-d
:设置上次修改密码的日期,如果设置为0
代表密码已经过期,强制用户下次登录时修改密码。-E
:指定用户账户过期日期。-I
:设置密码过期后的宽限天数。-l
:查看账户密码周期信息。-m
:设置密码最短密码周期。-M
:设置密码最长有效期。-W
:设置密码到期前的警告开始时间。为了大家方便理解,可以查看下图:
alan
可以在修改密码后,最短2天后才可以重新设置密码;设置完密码后,密码有效期为30天,在密码到期前3天提醒修改密码。如果在密码到期后没有修改密码,最多给alan用户1天时间作为宽限。并设置alan
账户将在2024年5月20日到期。$ sudo chage -m 2 -M 30 -W 3 -I 1 -E 2024-05-20 alan
$ sudo chage -l alan
Last password change : Nov 21, 2023
Password expires : Dec 21, 2023
Password inactive : Dec 22, 2023
Account expires : May 20, 2024
Minimum number of days between password change : 2
Maximum number of days between password change : 30
Number of days of warning before password expires : 3
alan
账户需要在下次登录系统时,重置用户密码:$ sudo chage -d 0 alan
$ sudo chage -l alan
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Account expires : May 20, 2024
Minimum number of days between password change : 2
Maximum number of days between password change : 30
Number of days of warning before password expires : 3
除了使用chage -E
设置账户在指定日期锁定外,别忘记了还可以通过usermod -L
方式立即锁定有用户。或者使用passwd -l
方式立即锁定用户密码限制用户登录。
「小贴士」:
在Linux中,如果我们需要一个账户,不需要他登录操作系统,但是又需要他作为身份验证,例如文件服务器上的账户,我们可以设置该用户的shell为
/sbin/nologin
:$ sudo useradd -s /sbin/nologin fsuser
# 或者对已经存在的更改shell
$ sudo usermod -s /sbin/nologin fsuser
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。