1, /etc/passwd是用户数据库,其中的域给出了用户名、加密口令和用户的其他信息.

/etc/shadow是在安装了影子(shadow)口令软件的系统上的影子口令文件。影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow中,而后者只对超级用户(root)可读。这使破译口令更困难,以此增加系统的安全性。

2, etc/shadow文件中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。它的文 件格式与/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开。


3, /etc/passwd
该目录存储的是操作系统用户信息,该文件为所有用户可见。


linux系统添加一个帐号:
useradd -g mysql -d /home/test -m test(:
新建一个用户test, 属于mysql,开始目录是/home/test)

然后进入 /etc/passwd,可以看到如下信息,在最后一行可以看到刚加的用户的信息。如下
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin  
dovecot:x:97:97:dovecot:/usr/libexec/dovecot:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin
squid:x:23:23::/var/spool/squid:/sbin/nologin    ==>以UID可以判断这些是系统帐号
pcap:x:77:77::/var/arpwatch:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
hzmc:x:500:500:hzmc:/home/hzmc:/bin/bash
mysql:x:501:501::/home/mysql:/bin/bash
chenhua:x:503:501::/home/chenhua:/bin/bash
test:x:504:501::/home/test:/bin/bash


可以看出/etc/passwd文件存放的是用户的信息,6个分号组成的7个信息,解释如下
(1):
用户名。
(2):
密码(已经加密)    ==>x 表示密码放在/etc/shadow
(3):UID(
用户标识),操作系统自己用的    ==>见下表
(4):GID
组标识。
(5):
用户全名或本地帐号 ==>对帐号的说明,这个帐号干什么用的。很多都是系统帐号。
(6):
开始目录               ==>家目录
(7):
登录使用的Shell,就是对登录命令进行解析的工具。

id 范围该 ID 使用者特性
0
(系统管理员)
当 UID 是 0 时,代表这个账号是『系统管理员』!所以当你要让其他的账号名称也具有 root 的权限时,将该账号的 UID 改为 0 即可。这也就是说,一部系统上面的系统管理员不见得只有 root 喔!不过,很不建议有多个账号的 UID 是 0 啦~
1~499
(系统账号)
保留给系统使用的 ID,其实除了 0 之外,其他的 UID 权限与特性并没有不一样。默认 500 以下的数字让给系统作为保留账号只是一个习惯。

由于系统上面启动的服务希望使用较小的权限去运行,因此不希望使用 root 的身份去运行这些服务,所以我们就得要提供这些运行中程序的拥有者账号才行。这些系统账号通常是不可登陆的,所以才会有我们在第十一章提到的 /sbin/nologin 这个特殊的 shell 存在。

根据系统账号的由来,通常系统账号又约略被区分为两种:
1~99:由 distributions 自行创建的系统账号;
100~499:若用户有系统账号需求时,可以使用的账号 UID。
500~65535
(可登陆账号)
给一般使用者用的。事实上,目前的 linux 核心 (2.6.x 版)已经可以支持到4294967295 (2^32-1) 这么大的 UID 号码喔!


下面为test用户设置密码,执行如下命令passwd test
[root@localhost etc]# passwd test
Changing password for user test.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost etc]#


4, 然后进入/etc/shadow文件下面可以看到如下信息
gdm:!!:14302:0:99999:7:::
hzmc:$1$JZMjXqxJ$bvRpGQxbuRiEa86KPLhhC1:14302:0:99999:7:::
mysql:!!:14315:0:99999:7:::
chenhua:$1$YBJZNyXJ$BnpKFD58vSgqzsyRO0ZeO1:14316:0:99999:7:::
test:$1$hKjqUA40$OelB9h3UKOgnttKgmRpFr/:14316:0:99999:7:::
可以发现,共有9个栏目

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
1)“
登录名”是与/etc/passwd文件中的登录名相一致的用户账号
2)“
口令”字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,
录时不需要口令;如果含有不属于集合{./0-9A-Za-z}中的字符,则对应的用户不能登录。
3)“
最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同
的系统可能不一样。例如在SCOLinux,这个时间起点是197011日。
4)“
最小时间间隔”指的是两次修改口令之间所需的最小天数。
5)“
最大时间间隔”指的是口令保持有效的最大天数。
6)“
警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
7)“
不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
8)“
失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。
期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。


Unix 系统最初是用明文保存密码的,后来由于安全的考虑,采用crypt()算法加密密码并存放在/etc/passwd文件。现在,由 于计算机处理能力的提高,使密码破解变得越来越容易。/etc/passwd文件是所有合法用户都可访问的,大家都可互相看到密码的加密字符串,这给系统 带来很大的安全威胁。现代的Unix系统使用影子密码系统,它把密码从/etc/pa sswd文件中分离出来,真正的密码保存在/etc/shadow文件中,shadow文件只能由超级用户访问。这样入侵者就不能获得加密密码串,用于破 解。使用shadow密码文件后,/etc/passwd文件中所有帐户的password域的内容为"x",如果password域的内容为"*",则 该帐号被停用。使用passwd这个程序可修改用户的密码。