一,/etc/passwd
1,在讲用户管理前先来看看/etc/passwd文件。
[root@localhost~]# more /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin
2,现在来慢慢解释每个字段含义。原文可以参考#man 5 passwd
Passwd文件结构account:password:UID:GID:GECOS:directory:shell。
以
root:x:0:0:root:/root:/bin/bash
为例
Account:用户的名称,如例子中的root;
Password:用户密码,我们看到这里只显示x,不是指密码就为x,而是表示该密码已经
被移动到shadow中去了(这个后面会讲到)。为什么这么做呢?早期的linux
系统密码是放在passwd文件中的,但因为这个文件是要被所有程序都能够
读取的,所以很容易造成资料被窃取。后来就将密码属性值放到/etc/shadow文
件中去。所以我们看到这里只显示x。
UID:用户ID,这个不用解释,linux系统还是通过ID来判断用户大。
需要注意的是当uid为0时表示系统管理员。所以将其他用户id改为0,将
使其他人改为管理员。
一般讲1-499 保留给系统使用。更细划分是将1-99会保留给系统预设的账号。
将100-499则保留给系统一些服务来使用。
GID:组ID。指明用户所属组。有关组的概念待会再讲。例子中root属于0组。
GECOS:一般说明用户信息的,如电话、地址等附属信息。
Directory:即我们常说的家目录,例子中root家目录/root
Shell:用来指明用户登录时预设使用的bash。例子中预设使用/bin/bash。
注意,我们还可以通过这个属性让用户无法登录,达到某些用户无法登录
的目的。如将shell指向/sbin/nologin。为甚么需要这样做呢?如提供打印服务
可以使用系统资源,但没有必要登录,就可以通过此方法实现。
二、/etc/shadow
1,同样先来看下shadow长什么样子。
[root@localhost ~]# more /etc/shadow root:$6$dzsbXlAsouy1Rv8y$sjzsbZhORDfSX9eqZRvYh1IA1urCeWkSg5EH2MpeufDj3HozrthVpqxOtNjEpyBxurhG23Vm85y1Z1rfEgKIh/:16665:0:99999:7::: bin:*:15980:0:99999:7:::
2,同样可以看到每个属性用“:”来分开。原文解释可以用#man 5 shadow来查看。
loginname:登录名。即/etc/passwd中的account。例子中root。
encryptedpassword:加密的密码。上节讲过密码信息保存shadow中,就保存在这个
字段中。可以看到例子中是一段很没思路的字符。这是因为密码
通过加密的。使用单向加密算法,这样别人就无法逆向破解了。
细化看$6即代表使用加密算法。通过上面显示可以看到用户bin
的密码栏只用个“*”,表示什么意思呢?*表示账户不能用来登录。
date of last password change:最近更改密码日期。例子中16665表示从1970年1月1日开
始计算的日期时间差。即表示2015年8月18日。
minimum password age:最小密码寿命?实际指若需要改密码至少要经过多少天。或者可以
可以理解为在这些天内密码不允许更改。注意0表示随时可以更改。
maximum password age:最大密码寿命?可以这么理解,为了密码的安全,需要定期修改
密码,通过设定密码寿命,过期后提醒用户更新密码。
password warning period:密码过期前几天提醒用户更新密码。前面说过密码是有寿命的,
在寿终前需要提醒用户更新密码,这个参数就是设定提醒天数的。
password inactivity period:密码不可用期限。实际上密码寿终后是还可以继续使用的,在
它下地狱前还是有魂魄的,魂魄还能呆多久呢?就是这个参数决定的。
account expiration date:账户过期时间。这才是最终过期时间。就是说,在用户密码过期后
后用户还不更新密码的话,将到这个日期后用户将真的无法使用了。
reserved field:保留位。
三、实践
1,添加一个用户及密码
[root@localhost ~]# useradd test #密码为test
2,查看passwd文件
test:x:2009:2011::/home/test:/bin/bash
3,查看shadow文件
test:$6$zdoUUPZ8$upYc997cVApM6ywWd10NkNtnFJnliwd5aouoNv5fOb72JWj/VtvV69YCJtA1bxHHPlRr7NjVpAdFE0HUa69db1:16675:0:99999:7:::
4,修改shadow文件后
test:$6$zdoUUPZ8$upYc997cVApM6ywWd10NkNtnFJnliwd5aouoNv5fOb72JWj/VtvV69YCJtA1bxHHPlRr7NjVpAdFE0HUa69db1:16675:5:3:7:::
注意:默认shadow是没有修改权限的,我这是使用root用户添加写权限才修改的。
5,使用账号test登录,提醒如下:
Warning: your password will expire in 3days
6,尝试修改密码
[test@localhost ~]$ passwd
Changing password for user test.
Changing password for test.
(current) UNIX password:
You must wait longer to change yourpassword
7,修改上次修改密码时间后,重新使用test登录,提醒用户修改密码。
You are required to change your passwordimmediately (password aged)
Last login: Fri Aug 28 15:42:05 2015 from192.168.1.106
WARNING: Your password has expired.
You must change your password now and loginagain!