一、设定密码
管理员在创建新用户时可以不为用户指定密码,新用户可以使用 passwd 命令来自行修改密码;而root 用户则可以使用以下命令来修改指定用户的密码:
# passwd USERNAME
密码的设定应该遵循密码安全策略,密码的安全策略包括以下内容:
1.足够复杂,不要使用生日、姓名等
2.密码的长度至少5位,越长越好,其中5为是redhat的默认策略。
3.包含大写字母、小写字母、属主和特殊字母中至少三类,建议随机生成密码。
采用这种组合方式,会增加密码破译的难度。如果采用纯数字来设定一个6位的密码,则密码的组合有 10*10*10*10*10*10种可能,对计算机而言,进行10^6运算并不复杂。如果采用大写字母、小写字母、特殊字符和数字的组合来设定6位密码,则可能的组合有将近 100^6种,对于目前计算机的运算能力而言,相对比较难以破译。
4.定期更换密码,不要重复此前使用过的密码。
需要注意的是,管理员设定的密码,即使违反了安全策略,系统也不会采取任何措施;而对于普通用户,如果违反了安全策略,则密码设定会失败。
例如我们用root用户来创建一个用户tom,并且给tom设定密码123, 这里123明显违反了安全策略,虽然系统给予了警告,但是依然设定成功了。
# useradd tom
# passwd tom
# su - tom //切换为tom用户
# passwd
用户tom想为自己修改密码,第一次输入456, 创建失败;输入centos,创建失败;输入centOS,创建失败;输入456@centOS,创建失败,输入O*Sentc@456则能够通过安全策略,创建成功。
通过查看/etc/shadow 文件,root用户可以知道哪些用户被锁定了。被锁定的用户名后面会有两个!!,如我们进行如下操作:
# passwd -l tom
# tail -1 /etc/shadow
# passwd -u tom
# tail -1 /etc/shadow
可以明显观察到tom用户后面!!的变化情况
二、密码的属性含义
用户密码相关的信息存放在 /etc/shadow文件中,我们来查看一下该文件,以理解用户密码的各种属性的含义:
# cat /etc/shadow
运行该命令可以得到密码的基本信息,以冒号为分隔符,分开的小段是密码的属性:
Accout: |
$n$ ABC...: |
Last_Time: |
Min_Period: |
Max_Period: |
Warning: |
Inactive: |
Expire_Date: |
Reserve |
|
用户的登录名 |
该密码选用的加密方式 |
加密后的密码串 |
最近一次修改密码的时间 |
密码的最短使用期限 |
密码的最长使用期限 |
密码到期警告时长 |
账户非活动天数 |
账号过期时间 |
预留段 |
对照上表,我们以用户tom为例来解释密码的属性含义:
在/etc/shadow文件中,tom用户的密码信息为:
tom:$6$V4K4KTHL.............:16168:0:99999:7: : :
tom: 用户名
$6$: tom 用户的密码采用的加密方式为 6 | SHA - 512 (single glibc 2.7)
我们可以通过以下命令来查看加密方式:
# man 3 crpt
V4K4KTHL...: tom用户的密码经过加密后得到的密码串
16168: 最近一次修改密码的时间。这是一个相对时间,为1970年1月1号到修改密码时所间隔的天数
0: 密码的最短使用期限,0表示不做限制
99999: 密码的最长使用期限
7: 密码到期前的警告时长。这里表示密码到期前7天警告。
: 非活动期限。此处缺省,表示tom用户没有账户非活动期限。实际上密码到期后用户不会立刻被锁定,缓冲期即为账户非活动期限,在此期限内,用户登陆系统后做的第一件事就是修改密码
: 账号过期的期限,此处缺省
: 预留段,此处缺省
三、密码管理
管理密码的命令主要有 passwd,chage和 usermod:
1. passwd
命令passwd除了基本的设定密码功能,还可以使用选项进行密码管理。passwd命令可以使用的基本选项如下表:
选项名 |
用法 |
-l |
锁定用户 |
-u |
为锁定用户解锁 |
-n |
设定密码的最短使用天数 |
-x |
设定密码的最长使用天数 |
-w |
密码过期前的警告天数 |
-i |
账号非活动天数 |
-e |
让用户的密码过期 |
下面我们来一一解释以上选项的用法:
root用户可以在使用passwd命令时加上 -l 选项,用来锁定用户。这样用户就不能登录了。使用 -u 选项,则可以为被锁定的用户解锁。例如锁定tom用户,可以进行以下操作:
# passwd -l tom
# login
# tom
此处即使tom用户输入的密码是正确的,也无法登录。
# exit
# passwd -u tom
# login
# tom
此时tom可以正常登录了。
使用 -n 选项可以设定密码的最短使用天数,例如我们将tom 用户的密码最短使用天数改为1天,可以使用如下命令:
# passwd -n 1 tom
# tail /etc/shadow
使用 -x 选项可以设定密码的最长使用期限,例如我们将tom 用户的密码最长使用天数改为2天,可以使用如下命令:
# passwd -x 2 tom
# tail /etc/shadow
使用-w选项可以设定密码过期前的警告天数,例如为tom用户设定密码过期前的警告天数为2天,若tom的密码过期时间为2天,那么当tom此时登陆,就会提示他密码将在2天后过期,而建议他修改密码:
# passwd -w 2 tom
# tail /etc/shadow
使用 -i 选项,可以设定用户密码过期后的非活动时间。在这个时间内,用户的密码已经过期了,但还是可以登陆,登陆后第一个操作即是修改密码:
# passwd -i tom
# tail /etc/shadow
使用 -e 选项可以使用户的密码过期,例如我们若让tom用户的密码立刻过期,可以使用如下命令:
# passwd -e tom
# tail /etc/shadow
2.chage
使用chage命令也可以管理用户的密码,它的用法和passwd命令非常相似,其基本选项如下表:
选项名 |
用法 |
-d |
修改密码的最近一次修改时间 |
-m |
设定密码的最短使用天数 |
-M |
设定密码的最长使用天数 |
-I |
账号非活动天数 |
-W |
密码过期前的警告天数 |
-E |
设定密码的过期时间 |
使用-d 选项,可以修改密码最近一次被修改的时间,此命令和选项常被黑客用来掩盖攻击行踪,如修改tom用户的密码最近修改时间,可以使用:
# chage -d YYYY-MM-DD tom
chage命令的其他选项如 -m,-M,-I,-W的用法和 passwd基本一致,故此处不加赘述,-E选项可以为用户指定具体的过期日期,如为tom用户指定具体的过期时间,可以使用:
# chage -E YYYY-MM-DD tom
3.usermod
此命令的主要作用并非用来管理用户的密码,但它也具备最基本的密码管理功能。它用来管理密码的基本选项有 -e 和 -f,其中-e可以用来设定密码的过期时间。
例如设定tom的密码具体过期日期,可以用如下命令:
# usermod -e YYYY-MM-DD tom
而 -f 选项后面的参数为密码的非活动天数,其中 -1表示没有密码的非活动天数,密码到期就失效,例如设定tom没有密码的非活动天数,可以使用如下命令:
# usermod -f -1 tom
四、给组设密码
除了可以为用户设定密码外,组也可以设定密码,使用的基本命令是:gpasswd。给组加密码的作用在于,当某用户临时想切换到一个本来不属于的组时,只有该组有密码,且此用户知道密码,才可以进行此项操作。若要进行此项操作,还需要引入令一个命令:newgrp,此命令的作用在于临时设定指定的组为自己的基本组。
例如root创建了组hellogrp,并为该组设定了密码,redis用户原本不属于该组 ,但想临时将hellogrp组作为自己的基本组,那么只要redis用户知道密码,就可以使用newgrp命令将自己的基本组临时切换为hellogrp,其基本操作如下:
# su - redis // 切换为redis用户
# id // 查看当前的用户属性,可知基本组为redis
# exit // redis 用户退出
# groupadd hellogrp // root用户创建hellogrp组
# gpasswd hellogrp //root用户为hellogrp组设定密码123
# su - redis // 切换为redis用户
# newgrp hellogrp // redis用户将自己的基本组切换为 hellogrp组,需要输入密码
# id // redis 用户查看自己当前的属性,可以看到hellogrp变成了基本组
# exit // redis 用户退出后即回到原来的基本组 redis
# id
# newgrp testgrp // redis用户原来就属于testgrp,因此不需要密码,就可以直接将基
# id // 本组切换为testgrp组