2014年4月9日星期三

Linux_029:设置用户的口令策略

环境:RHEL 7

1. 口令文件与口令策略
以前用户的密码是加密保存在 /etc/passwd 中的,后来出现了字典式攻击,觉得不太安全。
于是现在把用户的密码保存在 /etc/shadow 中,同时可以设置密码的有效时间。
密码由三部分构成,以“$”间隔,比如:$1$gCjLa2/Z$6Pu0EK0AzfCjxjv2hoLOB/。
第1部分:1 表示 MD5 hash;5 表示 SHA-256 hash;6 表示 SHA-512 hash。
第2部分:salt,保证即使相同的口令也不会产生相同的密文。
第3部分:加密后的 hash 值。

用户登录时,验证口令的过程:
使用用户输入的明文口令 + /etc/shadow 中的第 2 部分(salt),使用指定的加密算法加密,对比 /etc/shadow 中的第 3 部分,相同则通过。

RHEL 7 默认的加密算法是 SHA-512,可以使用命令设置默认的加密算法:authconfig --passalgo md5/sha256/sha512
/etc/shadow 文件内容格式
name:password:lastchange:minage:maxage:warning:inactive:expire:blank
字段说明:
(1)name 账户名称。
(2)password 加密的口令。
(3)lastchange 最近一次修改口令的时间,是自 1970.01.01 日开始的天数。参数 -d
(4)minage 修改口令需要经过的最少天数,0 表示没有最短时效限制。参数 -m
(5)maxage 口令允许不修改的最多天数,到达此天数后必须修改口令。参数 -M
(6)warning 口令过期前多少天,警告提示用户,口令还有多少天到期,0 表示不警告。参数 -W
(7)inactive 口令过期后多少天,账户依然保持激活状态。在此期间,依然允许用户登录系统修改口令;超过此期限后,账户将被锁定,状态改变为不活动状态。参数 -I
(8)expire 账户过期的天数,是自 1970.01.01 日开始的天数。参数 -E
(9)blank 保留,为以后使用。

2. 口令生命周期

(1)强制某账户下次登录时修改口令:chage -d 0 username
(2)强制某账户每 90 天修改一次口令:chage -M 90 romeo
(3)显示某账户当前口令设置:chage -l username
(4)设置某账户在某日期过期:chage -E YYYY-MM-DD username
例子:
$ date -d "+45 days" // 显示当前日期 + 45天后的日期
$ sudo chage -E 2016-08-08 romeo
$ sudo chage -E $(date +%Y-%m-%d -d +90days) romeo // 设置账户在90天后过期

如果要设置所有用户必须 30 天修改一次口令,需要修改 /etc/login.defs 文件
$ sudo vi /etc/login.defs
  ...Output omitted...
  PASS_MAX_DAYS 30
  PASS_MIN_DAYS 0
  PASS_MIN_LEN 5
  PASS_WARN_AGE 7
  ...Output omitted...

3. 限制用户访问
锁定某账户,一般用户离职时,使用锁定功能锁定该账户,而不是删除该账户
$ sudo usermod -L -e 1 elvis // -e 指定账户过期(注意不是口令过期)的天数,从 1970.01.01 开始计算。
如果账户解锁后,账户仍然过期,需要修改账户过期时间才能使用。
$ sudo usermod -e "" elvis // 账户永不过期,设置为 "" 即可
$ sudo usermod -U romeo // 解锁某用户

4. 非登录 Shell
有时用户需要一个能够认证的账户,但是不需要能够登录系统并交互的账户,比如邮件账户用来收发邮件、上传文件,但是不需要登录系统。
# usermod -s /sbin/nologin student // 设置某用户的 shell 为 nologin shell

没有评论: